【ExcelVBA入門】繰り返し処理 グレートですよこいつは!【激アツ】

前回までで、ExcelVBAで出来るすごいことの一つ、「他のエクセルファイルを開いて中身を参照する」方法を紹介しました。
今回はファイルを開いて転記する際に複数の行、列を一気に転記する方法を紹介するよ。ここはVBAの学習で激アツなポイントの一つです。
よみぞう
激アツなんだ!
えな
まずは動画をご覧ください
- おさらい
- ForNext構文 ExcelVBAの激アツな部分
- コードを見ていこう!
- 繰り返しの動きを確認しよう!
おさらい
はい、前回はこの「OpenClose3」で、他のエクセルファイルを開いて、A1セルだけ。このエクセルファイルに転記するまでを紹介しました。
一応前回のおさらいをさらっと。
- (1行目)文字列を入れる変数booknameを宣言して
- (2行目)これは、画面更新の停止。これを書いておくと処理が早くなるんでしたよね。
- (3行目)元データフォルダに入っているdata.xlsxというエクセルファイル名をbooknameに代入。
- (4行目)data.xlsxを開く
- (5行目)data.xlsxのシート1のA1セルの値をこのエクセルファイルのA1セルに入力
- (6行目)data.xlsxを保存しないで閉じる
でした。
ForNext構文 ExcelVBAの激アツな部分
今回はこのForNext1を見ていきます。
OpenClose3と違うのは、
変数の宣言のところに、新しい変数が宣言されているところ、
と開く処理と閉じる処理の間の転記処理の部分が違います。
まずは、実行してみましょう。(F5で実行)
↓
はい、data.xlsxの表全体がこのエクセルファイルに転記されました。
コードを見ていこう!
さっき言ったとおり、変数の宣言に新しくiが宣言されています。Asの後を見るとLongと書いているので、これは、整数専用の変数だと分かります。iには整数しか入りません。まず、ここを確認してください。
繰り返し処理 ForとNextの間
続いてここ。
For とNext の間にインデントが入っています。基本編で紹介したとおり、一つの塊だとわかりやすくするためにインデントを入力しています。では何の塊か。これはForNext構文という繰り返し処理の塊です。Forの後ろを見て下さい。i=1 to 11と書いています。これは、変数iに1~11までの整数を順番に代入する。という意味です。つまり、繰り返す度にiの値を1~11まで変更して全部で11回繰り返すことになります。
ここわかりにくいかもしれないので、1行ずつ実行しながら見ていきます。
繰り返しの動きを確認しよう!
転記処理のところが見たいので、既に黄色い行の手前まで実行した状態からスタートします。この黄色い行が次に実行する行です。1巡目の時はiには1が代入されています。変数iを1と読み替えてコードを見てみましょう。開いたファイルの1行目の1列目のセルをこのエクセルファイルのシート1の1行目の1列目に代入する。と読みます。ではF8で1行ずつ実行してみます。(F8で実行)
data.xlsxの1行目の1列目のセルが、このファイルの1行目の1列目に代入されました。
同じように1行目の2列目のセルを1行目の2列目へ、(f8実行)
このファイルの1行目の2列目のセルが、このファイルの1行目の2列目に代入されました。
では、この調子で実行していきます。(f8でfornextの最終行まで実行)
で、ここまで来たら、次にどこが実行されるか。やってみます。F8を押す。
とはい、見て下さい。ここに戻りました。ただし、ここで、iの値が2に変わります。
なので、次は2行目の1から13列目までが転記されます。
それが、終わったら、3行目の1から13列目まで、、
4行目の1から13列目までという具合で、iの値が変わりながら、11行目の1~13列目まで繰り返し処理が行われます。なんとなく分かりましたかね。この繰り返しが一瞬で行われた結果、表全体が転記されるという訳です。
例では10行だけですが、これが100行とか1000行になってもこの11を100とか、1000とかに変えるだけで対応できます。
これ、すごくないですか?激アツですよね?
よみぞう