VBAのツールを作ることはあるものの、しばらくコードを書いていないと忘れてしまいます。
自分の勉強のために、練習でコードを書いてみようと思います。
【目次】
練習問題
上の画像のようにSheet1のデータをSheet2にコピーするVBAを作成したい。
Sheet1のデータの定義は以下の通りです。
<Sheet1のデータの定義>
- セル「B2」からデータは始まる・データがある行は、必ずB列にデータがある(B列にデータがなければその行にデータはない)
- B列にデータがない行があれば、それ以降の行にもデータは存在しない
- 複数のデータがある行は、B列から右側の連続した列に順番にデータが入る。(データが2つなら、B列C列にデータが入る)
<コピーの順番>
Sheet1からSheet2にコピーするデータの順番は、Sheet1のデータを上の行から1行ずつ(行に複数データがある場合は、左の列から右の列の順番で)、Sheet2のA列に上から順番に入力することとします。
VBAのコード
いろいろな書き方があると思いますが、私は以下のように書きました。
(コメントが煩わしいかもしれません。。。)
Sub oneCol() Dim ws1 As Worksheet Dim ws2 As Worksheet 'Sheet1、Sheet2を変数ws1、ws2に格納 Set ws1 = ThisWorkbook.Worksheets("Sheet1") Set ws2 = ThisWorkbook.Worksheets("Sheet2") '繰り返し処理用の変数i,j,kを定義し、初期値を格納 Dim i As Long: i = 2 '2行目から処理を開始するので、初期値に2を格納 Dim j As Long: j = 2 'B列から処理を開始するので、初期値に2を格納 Dim k As Long: k = 1 'Sheet2の1行目からSheet1のデータを入力させるので、初期値1を格納 Do While ws1.Cells(i, 2) <> "" '2行目からデータがない行まで繰り返し Do While ws1.Cells(i, j) <> "" 'B列からデータがない列まで繰り返し ws2.Cells(k, 1) = ws1.Cells(i, j) 'Sheet1のデータをSheet2に入力 k = k + 1 'Sheet2で次にデータを入力する行を指定するために+1 j = j + 1 '次の列を指定するために+1 Loop i = i + 1 '次の行を指定するために+1 j = 2 'B列から処理をスタートするために、2を格納 Loop End Sub
考え方
2つの繰り返し処理で考えました。
- 1つ目の繰り返しは、セル「B2」からB列のデータがない行まで1行ずつ行数をプラスする処理。
- 2つ目の繰り返しは、1つ目の繰り返しで1行ずつ行数がプラスされるので、その行でB列からデータがない列まで1列ずつプラスする処理。
上の2つの繰り返しに、Sheet1のデータをSheet2へ入力する処理をプラスしました。
今回は以上となります。