こんにちは。

前回の続きです・・・。


今回は「データの数だけ繰り返す処理」と「該当するデータが無かった場合のコメント表示」について説明したいと思います・・・・。


と思いましたが・・・・。
すみません!しょぼん
長くなりそうなので今回は「データの数だけ繰り返す処理」の説明のみとさせてください。


晴れデータの数だけ繰り返す処理


実はデータの数だけ処理する構文は既に説明ずみです!

「基本から4」で上から順番に処理するで出た、

【 For [変数] = [開始] to [終了] ~ Next 】

です。

これは[開始]から[終了]までを一つずつ処理していくことを説明しました。

そうですビックリマーク 感の良い方お気づきだと思います。

開始から終了まで処理するということはあるデータを全て処理することと同じです!

課題1では一覧表Aの数だけ処理が必要です。ということは・・・。

開始・・・「D4」
終了・・・「D11」

ですので、

For [変数]= 4 to 11 ~ Next

とすれば良いのです。

「・・・・・・・・えっ?」と思った方はよく理解されていますグッド!

そうです。最終行については、その行がいつも同じと保証されていない限り、最終行を
その都度取得する必要がありました。

その際の構文は

【 Cells(Rows.Count,[対象の列]).End(xlUp).Row 】

でしたね。

課題の一覧表Aの最終行を調べるのは「D列」をチェックすれば良いので、

[変数]= Cells(Rows.Count,4).End(xlUp).Row

となります。(4はA、B、C、Dと四番目だから)


この変数を「LastRow_01」としたとすると


LastRow_01=Cells(Rows.Count,4).End(xlUp).Row


For [変数1]= 2 to LastRow_01

・・・・・・・・

Next


これで、一覧表Aのデータの数だけ処理する構文が完成しました。


実はここまでで、課題1の処理部分が完成したことになります。


課題1:一覧表Aの調査日を一覧表Bの一致する都道府県名の調査日に代入する。

課題画面

※右の表が一覧表A、左が一覧表B


'<変数宣言>
Dim LastRow_01 as Long,LastRow_02 as Long,i as Integer,j as Integer

'<処理部分>
’一覧表Aと一覧表Bの最終行を取得取得する。
LastRow_01= Cells(Rows.Count,4).End(xlUp).Row
LastRow_02= Cells(Rows.Count,4).End(xlUp).Row


’一覧表Aと同じ都道府県が一覧表Bにあったら、調査日を代入する
For i = 2 to LastRow_01

 For j = 2 to LastRow_02

  If Cells(i,4).Value = Cells(j,1).Value Then

    Cells(j,2).Value = Cells(i,5).Value

  End If

 Next

Next


※1番目の「For」が一覧表Aのデータの数だけ処理をする部分で、2番目の「For」が一覧表Bのデータを上から順にチェックしていく部分になります。


どうですか。

たったこれだけのプログラムで、課題1はクリアできてしまいます。

一覧表AやBが何百行あってもこの10行足らずのプログラム文で処理できてしまうのです!

マクロはそんなに難しいものではないのです。ニコニコ


次回は、今回説明できなかった「該当するデータが無かった場合のコメント表示」について説明したいと思います。

ではまた・・・。