For~each~Nextを使って繰り返し作業を自動化するExcelマクロの作成

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

ForNextの間にEachを挟んで繰り返し作業を記述する構文について記載します。

doloop_0

関連記事 Do~Loopを使って繰り返し作業を自動化するExcelマクロの作成

関連記事 For~Nextを使って繰り返し作業を自動化するExcelマクロの作成


For~Each~Nextの基本

ForEachNextの基本的な記述方法は次のとおりです。

[aside type=”boader”] For Each 変数 In グループ名

(繰り返しの処理を記述)

Next[/aside]

ForEachNextの構文は、指定したグループ名の中で記述された処理を繰り返すと終了となります。

例えば次のとおりです。

foreachnext_1

変数wsAll(型はWorksheet)に開いているワークブックのワークシートを代入し、そのワークシートの名称を表示するという記述になります。

Excelで左から「テストシート」、「テストシート2」、「セルの指定」・・・というシート名称が設定されているファイルで実行すると次のとおりです。

foreachnext_11

一番左の「テストシート」から順に名称が表示されていきます。作成されているシート名称をすべて表示したらプログラムは終了します。

 

いろいろな条件

① 1つの列をグループ名に指定する場合

ForNext記事で取り上げた次のファイルのA列の数値をC列に転記するという処理をForEachNextを使って記述してみます。

A列の数値をC列に転記する記述は、「A列の数値を行数を1つずつ増加しながら、同じ行のC列に転記する」というプログラムになれば良いので、次のように記述しました。

foreachnext_3

変数varGa(型はVariant)を定義します。(※1)

グループ名はRangeCellsを使用してA列の2行目から10行目を指定しました。上記の赤い枠囲み。

varGaに代入したA列の数値をC列に転記する記述の後、

C列の転記する行数を1つ増やす必要があるので、その記述もしました。上記の緑色の枠囲み。

これを実行すると次のとおり。

foreachnext_4

(※1)この例では、行数の指定(整数の値)を代入するので、変数の型はLongを指定したいところですが、Long型の変数をForEachNextの構文で使用し、処理を実行すると次のようなエラーメッセージが表示されて処理が止まってしまいます。

foreachnext_12

Variant型かWorkbookWorksheetのようなオブジェクト型を使用する必要があります。

 

② 1つの行をグループ名に指定する場合

上記①で記述したグループ名では、A列を上から順に処理していきますが、1つの行を指定するとどうなるでしょうか?

次のようなシートを用意しました。

foreachnext_5

1行目の数値を3行目に転記する処理を記述してみます。

foreachnext_6

グループ名は、RangeCellsを使用して行数を「1」に固定し、列数をB列~E列を表す数字の「2」と「5」を使用して指定しました。

変数lonXa(型はLong)は、列数を管理するための変数です。

上記の記述を実行すると次のとおりです。

foreachnext_7

1つの列の中で、左から右へと順に処理が実行されます。

数値の「6」が表示されているのは、E列(左から5番目)の転記処理の後に、列数をMsgBoxで表示する記述になっているからです。

E列(5番目)に1を加えた数値の「6」が表示されます。

 

③ グループ名に複数の行と列を指定する

グループ名に複数の行と列を指定するとどうなるでしょうか?

①の例の記述を次のように変更してみました。

foreachnext_8

cellsのなかの数字の記述をピンク色の枠囲みのように変更しました。

A2セルからB10セル、つまり2つの列と9つの行をグループ名に指定してあります。これを実行すると次のようになります。

foreachnext_9

複数の列と行を指定した場合は、A2→B2→A3→B3・・・と処理が進むことになります。

A列とB列をそれぞれ、C列とD列に転記する方法を考えてみました。

foreachnext_13

上記のとおりIfThen構文を使い、「C列のセルが空白(””)の場合は、C列にデータを転記し(上記の赤い枠囲み部分)、空白でなければ、D列に転記し、転記後、変数lonYaに1を加える(上記の緑色の枠囲み部分)」という記述にしました。

これを実行すると次のとおりです。

foreachnext_14

 

まとめ

私は、ForEachNext構文は、基本のところの例のように複数のワークシートを操作する時に使うことが多く、ワークシート名称をListBoxに表示するような場合は便利なので、後日、記事にしてみたいと思います。


■□◆◇ 編集後記 ◇◆□■

クライアントから何を聞き出すか、どのように質問するかというヒアリングのスキルについて、よく考えています。

「税務代理」という本人に代わって申告等の行為をしているので、税務にかかわるすべての事情を把握しておく必要があります。

しかし、あまり質問の方法が良くないと、税務に直接関係ない話までを知ってしまうことになります。そのようなときは、大変申し訳ない気持ちになります。

年末調整の時期になると、所得税の計算のために、家庭の事情を確認しなければならず、扶養控除等の申告書の記載内容等から事情を推察し、変更等の確認に漏れがないように気を付けています。

配偶者や子供の名前が違っているケースや生年月日が前年の扶養控除等申告書と比較して、変わっている場合があります。多くは、ケアレスミス(書き間違え)ですが、質問する時はちょっとドキドキします。