前回はセルの値のコピー&ペーストをするコードを書いてみましたので、今回はそれを繰り返して複数のセルの値をコピー&ペーストする方法について学んでいきます。
繰り返し作業はコピー&ペーストだけではなく、他のことにもよく使うのでぜひ身につけてください!
動画でも解説しているので、動画の方がわかりやすいという方は目次から動画の箇所にとんで見てみてください。
今回やりたいこと
前回の課題で作った、別のエクセルのセルをコピーする、というのを1つのセルではなく複数のセルのコピーができるように変更
というのが今回の目標です。
例えばこのような2つのエクセルがあった時、左のエクセルのB2からB5のデータを右のエクセルにコピーする、という内容です。
前回課題で作ったコードを元に、このように書けばコピー自体は可能ではあります。
Range("B2").Copy Workbooks("コピー先.xlsx").Worksheets("Sheet1").Range("B2")
Range("B3").Copy Workbooks("コピー先.xlsx").Worksheets("Sheet1").Range("B3")
Range("B4").Copy Workbooks("コピー先.xlsx").Worksheets("Sheet1").Range("B4")
Range("B5").Copy Workbooks("コピー先.xlsx").Worksheets("Sheet1").Range("B5")
可能ではありますが、行番号しか違わないコードをたくさん書くのは面倒ですよね。
そこで、For文という繰り返しが行えるものを使って、行番号を1つずつ増やしながらコピーしていくという寸法です。
上のコードを見てもらうと、違いは行番号のみになります。
Range(“B2“).Copy Workbooks(“コピー先.xlsx”).Worksheets(“Sheet1”).Range(“B2“)
この、「2」という数字が3,4,5と変わりながら繰り返し実行ができれば、上で書いた4行のコードと同じ動きをします。
そこで、「2」という数字を「変数」というものに置き換えます。
変数とは
例えば、kazuという変数に「11」という数字を入れて
Range(“A1”) =kazu
を実行するとセルA1に変数kazuに入っている数字、11が入力されます。
使い方としては、まず、
Dim 変数名 As Long
という変数の名前を宣言します。
そして、その変数に文字や数字を入れます。
Dim 変数名 As Long の宣言を書く位置はどこでもいいのですが、変数を使う前に書いてください。
例えば、こんな感じで冒頭にまとめて宣言をしたり、
変数を使う直前で宣言をしたり、
どちらでも大丈夫です。
大事なのは、変数を使う場所より前に宣言をすること、です。
ちなみに私は冒頭にまとめて書くことが多いです。
もう1点、宣言についてなのですが、変数の中に入れたいものによって宣言の仕方が変わってきます。
先ほど説明したのは、数字を入れるための変数の宣言でした。文字を入れる場合の宣言はこちらになります。
Dim 変数名 As String
最後のLongがStringに変わっています。
LongやStringの他にも、いろいろパターンがあるのですが、一旦はこの2つを覚えておけば大丈夫です。
数字と文字以外を扱いたいとなった時に、「VBA 変数 宣言」で検索すると、他の種類を調べることができます。一気に覚えるのは大変なので、必要な時に徐々に知識を増やしていくという方法の方がオススメです。
変数について注意点が1つあります。変数は文字や数字を入れる箱と言いましたが、箱には1つのアイテムしか入りません。
例えば、kazuという変数に「11」という数字を入れて、そのあとで「12」という数字を入れて、そしてRange(“A1”) =kazu
を実行するとセルA1に12という数字が入ります。
11は上書きされて消えてしまっているんですね。
同じ変数名を使いまわしすることは可能なのですが、意図せず上書きされないようにだけ気を付けてください。
では、変数を使ってコードを変更していきます。
Dim i As Long
Range("B" & i).Copy Workbooks("コピー先.xlsx").Worksheets("Sheet1").Range("B" & i)
まず、変数を宣言します。今回は数字を入れたいのでAs Longで宣言します。
次に「B2」の部分の「2」を変数に変更します。
Bという文字とiという変数を組み合わせる時は、&でつなぎます。
For文
変数に置き換えることができたので、次はFor文を使って繰り返しをしていきます。
For文の書き方はこのような形になります。
For 変数名= 開始の数 To 終わりの数
繰り返したいコード
Next 変数名
先ほどのコードを使うと、変数は i 、繰り返したいコードは
Range(“B” & i).Copy Workbooks(“コピー先.xlsx”).Worksheets(“Sheet1”).Range(“B” & i)
B2からB5のデータをコピーしたいので、開始の数は2、終わりの数は5になります。
そうすると、変数 i が2,3,4,5と変化しながらコピーするコードが実行されるという形です。
コードで書くとこのような形になります。
Sub test()
Dim i As Long
For i = 2 To 5
Range("B" & i).Copy Workbooks("コピー先.xlsx").Worksheets("Sheet1").Range("B" & i)
Next i
End Sub
この辺りは、Youtubeの動画の方で1行ずつ実行をしているところを見てもらった方がわかりやすいかもしれないです。(11:16あたりからです)
動画での解説
課題
今日の内容をふまえて、For文を使って繰り返し作業を行うコードを書いてみてください
準備
・下図のような形で、セルA1からA6までに数字を入れてください
課題内容
セルのA1からA6をB1からB6にコピーしてください。変数は i とします。
完成イメージはこちらです。
(下の「回答」の左にある▲を押すと回答のコードが見れます)
回答
Sub kadai2()
Dim i As Long
For i = 1 To 6
Range("A" & i).Copy Range("B" & i)
Next i
End Sub
まとめ
今回はFor文を使った繰り返しについて解説しました。
次回は複数のエクセルのデータをコピーする方法について解説をしていきます。これができると、フォルダの中に入っている複数のエクセルのデータを転記できるようになるのでとても便利です!
コメント