Excel活用

CSVデータから必要な列だけをコピーするマクロの作り方②【For文その1~For‥Next文の基本的な使い方~】

前回はVBAでコピー&ペーストの方法を書きました。

で、次もVBAでの常套句【繰り返し処理】の書き方です。

では早速今回やりたいことから確認しておきましょう。

この記事でやりたいこと

今回やりたいことはいたって単純です。

この列名をコピー、別シートにリストにして貼り付けます。

これを力技でVBAで書くとこうなります。

Sub 列名取得_ダメなパターン()
    
    Sheets(1).Cells(1, 1).Copy Sheets(2).Cells(2, 1)
    Sheets(1).Cells(1, 2).Copy Sheets(2).Cells(3, 1)
    Sheets(1).Cells(1, 3).Copy Sheets(2).Cells(4, 1)
    Sheets(1).Cells(1, 4).Copy Sheets(2).Cells(5, 1)
    Sheets(1).Cells(1, 5).Copy Sheets(2).Cells(6, 1)
    Sheets(1).Cells(1, 6).Copy Sheets(2).Cells(7, 1)
    Sheets(1).Cells(1, 7).Copy Sheets(2).Cells(8, 1)
    Sheets(1).Cells(1, 8).Copy Sheets(2).Cells(9, 1)
    Sheets(1).Cells(1, 9).Copy Sheets(2).Cells(10, 1)
    
End Sub

いやいやいやいや、これは無い。笑

まず書くのがめんどくさいし、列が増えたら対応できないですよね。

しかもよく見ると、コピー元の列インデックスとコピー先の行インデックスしか変わってません。

そして次の関係が成り立っていることも分かります。

  • コピー元列インデックスは1~9で1ずつ増加。
  • コピー先行インデックス = コピー元列インデックス+1

であればコピー元列インデックスだけ1~9で繰り返す処理ができれば、いちいちこんなに書かなくてもいいわけです。

そこで出てくるのが[For~Next]です。

次から、繰り返し処理の具体的な書き方を見ていきましょう。

[For~Next]の使い方

変数宣言

まず、繰り返す過程で変わるもの変わらないものを確認しましょう。

  • 変わるもの:コピー元列インデックスとコピー先行インデックス
  • 変わらないもの:Sheets(1).Cells(1, 変).Copy Sheets(2).Cells(変, 1)

このコピー元列インデックスとコピー先行インデックスは都度変化し、これ以外は固定ということになります。

ですので、まずこの変わる部分について変数宣言します。

Dim i As Long

これが変数宣言です。

「ここに i は数値型の変数であることを宣言する!」

こんなところでしょうか。これがあることで、変数であることが明示されました。

次にFor~Nextについてみていきましょう。

繰り返し処理

ここで繰り返す処理はFor~Nextの内側に書きます。

書き方はこちら。

For [変数] = 開始 To 終了
  繰り返す処理内容
Next

これで意味は[変数]を[開始]から[終了]まで[処理]を繰り返すです。

今回のやつにあてはめるとこうなります。

For i = 1 To Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Column
    Sheets(1).Cells(1, i).Copy Sheets(2).Cells(i + 1, 1)
Next

これで、今回のマクロは完成です。

まとめ

今回作ったマクロはこうです。

Sub 列名取得()

Dim i As Long

For i = 1 To Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Column
    Sheets(1).Cells(1, i).Copy Sheets(2).Cells(i + 1, 1)
Next

End Sub

整数型の変数 i を宣言し、For~Nextでiが1から[列数]までコピー&ペーストし、最後はEnd Subで締めました。

これを実行すると最初に示したように、Sheet1の列名をSheet2に列名リストとしてコピーするのです。

ここまでがFor~Nextの使い方でした。

次回、じゃあ二重に繰り返す場合は?条件に応じて処理を変えたい場合は?そんなことを書きますのでお楽しみに。

最後までお読みいただき、ありがとうございました。