【Excel VBA】1行飛ばしで転記するループ処理(For Nextステートメント)

Excel VBAのループの一つ、For Nextステートメントは使用頻度が高く、基本ともいえます。

【Excel VBA】For Nextステートメントで同じ処理を指定した回数分繰り返す方法 | Excelを制する者は人生を制す ~No Excel No Life~

今回はそんなFor Nextステートメントの応用テクニックとして、Excel VBAで1行飛ばしで転記するループ処理について解説していきます。

マクロでしたいこと

1行飛ばし転記①

「印刷サンプル」というブックのD列の2行目以降を別ブックにマクロで転記します。


1行飛ばし転記②

転記先は「VBAサンプル」というブックのA列の2行目以降ですが、このブックは1レコードにつき2行必要なため、転記する際は1行飛ばしの偶数行に転記が必要になります。

今回はこの条件でVBAを記述していきます。

コードサンプル

1行飛ばし転記③

2行目にカウンタ変数として”i”をデータ型Integerを指定しています。(データ量が多ければLongにしましょう)

3行目はブック「印刷サンプル」の転記データの最終行を特定するための変数として”LastRow”をデータ型Longで指定しています。

4行目は頻出のブック「印刷サンプル」を簡略化するための変数”WB”をデータ型Workbookで指定しています。

5行目は変数”WB”にブック「印刷サンプル.xlsx」をセットします。

6行目は変数”WB”をActivateメソッドで選択します。

7行目はさらに「ツール」シートをSelectメソッドで選択します。

6・7行目は1行で記述しようとするとエラーになるので注意しましょう!

8行目は、変数”LastRow”に「印刷サンプル」の「ツール」シートの1列目(A列)のデータがある最終行の行数が入ります。(データ量にあわせて行数が自動で変わります)

こちらの部分は下記記事をご参照ください。

【Excel VBA】ワークシート内のデータがある最終行番号を取得する方法 | Excelを制する者は人生を制す ~No Excel No Life~

9行目はFor Nextステートメントの繰り返し範囲を指定します。

カウンタ変数”i”の範囲は今回「1」から変数”LastRow”までとなります。
(変数”LastRow”は行数の数値が入ります)

10行目は、For Nextステートメントで繰り返し処理を行う内容を記述します。

今回は「VBAサンプル」のシート「Sheet1」の1列目の2の倍数の行に、変数”WB”に格納した「印刷サンプル」のシート「ツール」の4列目のデータを転記になるので、イコール(=)でつなげます。

このマクロが記述されているのが転記先の「VBAサンプル」になるため、ブック名は”ThisWorkbook”で省略できます。

シート部分は普通にSheetsプロパティで「Sheet1」を指定します。

セルが今回の肝で、Cellsプロパティでセル番地を行列の番号でカウンタ変数に応じて可変になるよう、行番号はカウンタ変数”i”に倍数となる2の乗算を指定、列番号はA列を示す「1」を指定します。

イコール(=)を挟んだ右辺には参照元になる「印刷サンプル」の「ツール」シートのCellsプロパティでセル番地を指定します。

行番号は「印刷サンプル」は1行目が見出しでデータ部分は2行目からになるため、カウンタ変数”i”に「1」を加算し、列番号はD列を示す「4」を指定します。

あとは11行目にFor Nextステートメントの結びとなる「Next」を忘れずに入力しましょう。

マクロの動作イメージ

1行飛ばし転記④

「VBAサンプル」のA列の偶数行に「印刷サンプル」のD列のデータがすべて転記されました!

ちなみに「VBAサンプル」のA列はセルが1行目を除き2行分を結合していますが、結合された状態でも問題なく転記されます。

まとめ

繰り返し処理は本当に事務処理の効率化に直結します!

私もまだまだ勉強中ですが、繰り返し処理のいろいろなパターンを使いこなせるように精進していきたいですね。

ご参考になれば幸いです(^^)


この記事が気に入ったら
いいね ! しよう

無料メルマガはじめました!(特典あり)

メールアドレスを登録すればブログではお伝えできない情報を無料で受信できます。
今なら特典として、サンプルファイルを無料でプレゼント中!
もっとエクセルをスキルアップしたい方は、ぜひご登録くださいm(__)m

ご案内

おすすめ記事