こんにちは。
前回の続きです・・・。
今回は「データの数だけ繰り返す処理」と「該当するデータが無かった場合のコメント表示」について説明したいと思います・・・・。
と思いましたが・・・・。
すみません!
長くなりそうなので今回は「データの数だけ繰り返す処理」の説明のみとさせてください。
データの数だけ繰り返す処理
実はデータの数だけ処理する構文は既に説明ずみです!
「基本から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行足らずのプログラム文で処理できてしまうのです!
マクロはそんなに難しいものではないのです。
次回は、今回説明できなかった「該当するデータが無かった場合のコメント表示」について説明したいと思います。
ではまた・・・。
前回の続きです・・・。
今回は「データの数だけ繰り返す処理」と「該当するデータが無かった場合のコメント表示」について説明したいと思います・・・・。
と思いましたが・・・・。
すみません!

長くなりそうなので今回は「データの数だけ繰り返す処理」の説明のみとさせてください。
データの数だけ繰り返す処理実はデータの数だけ処理する構文は既に説明ずみです!
「基本から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行足らずのプログラム文で処理できてしまうのです!
マクロはそんなに難しいものではないのです。

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