こんにちは。
前回の続きです・・・。
これでもう7回目ですね。
なかなか終わらないじゃないか!との声も聞こえてきますが・・・・。
今回は前回の残り部分「該当するデータが無かった場合のコメント表示」について説明します。
コメントの表示
コメントの表示は以下の構文になります。
【 MsgBox "[表示する内容]",[表示するアイコン],"[タイトル]" 】
これは、単にコメントを表示するだけの構文となります。
Yes、No等で処理を分岐するにはちょっと工夫が必要になります。
今回は、単なる表示ですので説明を割愛します。ごめんなさい・・・・。
では詳しく・・・。
[表示する内容]
コメントとして表示する内容です。
例えば”完了しました!”と表示したいのであれば、
"完了しました!" と「"」で文字を囲みます。
改行して2行で表示したい場合。
処理が終了しました。
書き出された内容を確認してください。
としたい場合は、「vbNewLine」を使います。
(「vbCrLf」でも構いません。私は意味が分かりやすいので「vbNewLine」をつかっています。)
「vbNewLine」を改行したい位置に「&」で挟んで追加します。
「MsgBox "処理が終了しました。" & vbNewLine & "書き出された内容を確認してください"」
となります。
表示する内容に変数を使用する場合は、変数をそのまま書き「"」で挟む必要はありません。
Message01= "処理が終了しました。"
Message02="書き出された内容を確認してください。"
「MsgBox Message01 & vbNewLine & Message02」
となります。
[表示するアイコン]
これは複数あるのですが、単なる表示のみの場合は以下の3つを覚えておけば十分です。
正常に終了した場合・・・「vbInformation」
表示されるアイコン→
注意喚起が必要な場合・・・「vbExclamation」
表示されるアイコン→
NGの場合・・・「vbCritical」
表示されるアイコン→
これらの綴りは覚えなくてもVBEで編集する際に候補表示がされますので、なんとなく覚えていれば大丈夫です。
[タイトル]
コメントボックスのタイトルを設定できます。設定しない場合は省略して構いません。
設定は、[表示する内容]と同様にタイトル名を「"」ではさみます。
~ここまでで、コメントの表示方法の説明になります。~
該当するデータが無かった場合
今回は該当するデータが無かった場合の表示という条件があります。
該当するデータが全てあった場合となかった場合を判別しなければならないということになります。
うー
、難しい!どうしよう・・・・
大丈夫です!
ある場合とない場合ということは条件によって処理が異なるということですね。
これまで説明に出た構文で使えそうなものは・・・。
【If ~ Then ~ End If】
とすぐに思いついた方は優秀です!
すばらし~い!!
そうです。条件処理は”If~”でよさそうですね。
次に問題となるのは、「条件」ですね。
「該当するデータが全てあった場合」「なかった場合」をどう判別するかですね。
見る視点を変えてみましょう!
「データの数」に注目してみましょう。
全て該当するデータがあったということは、「一覧表Aのデータの数=一覧表Bに書きこまれた数」
ということになりませんか?
一覧表Aの数は「データの数の分だけ処理する」の処理数で数はわかりそうですね。
「エクセルマクロの基本から6」で一覧表Aの行数を
LastRow_01= Cells(Rows.Count,4).End(xlUp).Row
でカウントしています。
一覧表Aは見出し行が1行ありましたから、データの数は
LastRow_01-1
でよさそうです。
一覧表Bに書きこまれた数をどうするか?ですね。
これは、調査日の書きこみ行われた数がカウントできればよさそうですね。
処理した数をカウントする方法は
【 変数 = 変数 + 1 】
で可能になります。
変数は同じ変数を設定します。変数は数値型にします。(数値型の初期値は0になります。)
変数を仮に[Count01]としましょう。
一覧表Bに調査日を書きこむプログラム部分は「エクセルマクロの基本から5」で説明しましたとおり、
If Cells(行,列).Value = Cells(行,列).Value Then
↑一覧表Aの都道府県名 ↑一覧表B都道府県名
Cells(行,列+1).Value = Cells(行,列+1).Value
↑一覧表Bの調査日の値 ↑一覧表Aの調査日の値
Else
End If
となっています。この「Cells(行,列+1).Value = Cells(行,列+1).Value」の下に
Count01=Count01+1
を追加すればOKです。
If Cells(行,列).Value = Cells(行,列).Value Then
↑一覧表Aの都道府県名 ↑一覧表B都道府県名
Cells(行,列+1).Value = Cells(行,列+1).Value
↑一覧表Bの調査日の値 ↑一覧表Aの調査日の値
Count01=Count01+1
Else
End If
これで、書き込まれた数がカウントされます。
ということは・・・・・
メッセージ表示部分は
If Count01= LastRow_01-1 then
MsgBox "調査日を全て一覧表に書きこみました!",vbInformation
Else
MsgBox "一覧表に該当する都道府県がないため" & vbNewLine & "全て書きこみことが出来ませんでした!",vbCritical
End If
となります。
何件書きこめなかった数までを表示したい場合は、”Else~End If”部分を次のように変更しましよう。
ErrorCountで書きこめなかった数を計算して、コメントで表示している形になります。
ErrorCount = LastRow_01-1-Count01
MsgBox "一覧表に該当する都道府県がないため" & vbNewLine & " _
全て書きこむことが出来ませんでした!" _
& vbNewLine & "書きこめなかった件数:" & ErrorCount,vbCritical
※上記コメント部分で途中改行されています。プログラム文を改行する際は、
”半角スペース+_”と入力しその後を改行します。
いかがでしたか?
これで、必要な構文の説明が完了しました。
次回は、実際にVBE画面にプログラムを入力していきましょう。
前回の続きです・・・。
これでもう7回目ですね。
なかなか終わらないじゃないか!との声も聞こえてきますが・・・・。
今回は前回の残り部分「該当するデータが無かった場合のコメント表示」について説明します。
コメントの表示コメントの表示は以下の構文になります。
【 MsgBox "[表示する内容]",[表示するアイコン],"[タイトル]" 】
これは、単にコメントを表示するだけの構文となります。
Yes、No等で処理を分岐するにはちょっと工夫が必要になります。
今回は、単なる表示ですので説明を割愛します。ごめんなさい・・・・。
では詳しく・・・。[表示する内容]
コメントとして表示する内容です。
例えば”完了しました!”と表示したいのであれば、
"完了しました!" と「"」で文字を囲みます。
改行して2行で表示したい場合。
処理が終了しました。
書き出された内容を確認してください。
としたい場合は、「vbNewLine」を使います。
(「vbCrLf」でも構いません。私は意味が分かりやすいので「vbNewLine」をつかっています。)
「vbNewLine」を改行したい位置に「&」で挟んで追加します。
「MsgBox "処理が終了しました。" & vbNewLine & "書き出された内容を確認してください"」
となります。
表示する内容に変数を使用する場合は、変数をそのまま書き「"」で挟む必要はありません。
Message01= "処理が終了しました。"
Message02="書き出された内容を確認してください。"
「MsgBox Message01 & vbNewLine & Message02」
となります。
[表示するアイコン]
これは複数あるのですが、単なる表示のみの場合は以下の3つを覚えておけば十分です。
正常に終了した場合・・・「vbInformation」
表示されるアイコン→
注意喚起が必要な場合・・・「vbExclamation」
表示されるアイコン→
NGの場合・・・「vbCritical」
表示されるアイコン→
これらの綴りは覚えなくてもVBEで編集する際に候補表示がされますので、なんとなく覚えていれば大丈夫です。
[タイトル]
コメントボックスのタイトルを設定できます。設定しない場合は省略して構いません。
設定は、[表示する内容]と同様にタイトル名を「"」ではさみます。
~ここまでで、コメントの表示方法の説明になります。~
該当するデータが無かった場合今回は該当するデータが無かった場合の表示という条件があります。
該当するデータが全てあった場合となかった場合を判別しなければならないということになります。
うー
、難しい!どうしよう・・・・
大丈夫です!
ある場合とない場合ということは条件によって処理が異なるということですね。
これまで説明に出た構文で使えそうなものは・・・。
【If ~ Then ~ End If】とすぐに思いついた方は優秀です!
すばらし~い!!

そうです。条件処理は”If~”でよさそうですね。
次に問題となるのは、「条件」ですね。
「該当するデータが全てあった場合」「なかった場合」をどう判別するかですね。
見る視点を変えてみましょう!
「データの数」に注目してみましょう。
全て該当するデータがあったということは、「一覧表Aのデータの数=一覧表Bに書きこまれた数」
ということになりませんか?
一覧表Aの数は「データの数の分だけ処理する」の処理数で数はわかりそうですね。
「エクセルマクロの基本から6」で一覧表Aの行数を
LastRow_01= Cells(Rows.Count,4).End(xlUp).Row
でカウントしています。
一覧表Aは見出し行が1行ありましたから、データの数は
LastRow_01-1
でよさそうです。
一覧表Bに書きこまれた数をどうするか?ですね。
これは、調査日の書きこみ行われた数がカウントできればよさそうですね。
処理した数をカウントする方法は
【 変数 = 変数 + 1 】
で可能になります。
変数は同じ変数を設定します。変数は数値型にします。(数値型の初期値は0になります。)
変数を仮に[Count01]としましょう。
一覧表Bに調査日を書きこむプログラム部分は「エクセルマクロの基本から5」で説明しましたとおり、
If Cells(行,列).Value = Cells(行,列).Value Then
↑一覧表Aの都道府県名 ↑一覧表B都道府県名
Cells(行,列+1).Value = Cells(行,列+1).Value
↑一覧表Bの調査日の値 ↑一覧表Aの調査日の値
Else
End If
となっています。この「Cells(行,列+1).Value = Cells(行,列+1).Value」の下に
Count01=Count01+1
を追加すればOKです。
If Cells(行,列).Value = Cells(行,列).Value Then
↑一覧表Aの都道府県名 ↑一覧表B都道府県名
Cells(行,列+1).Value = Cells(行,列+1).Value
↑一覧表Bの調査日の値 ↑一覧表Aの調査日の値
Count01=Count01+1
Else
End If
これで、書き込まれた数がカウントされます。
ということは・・・・・
メッセージ表示部分は
If Count01= LastRow_01-1 then
MsgBox "調査日を全て一覧表に書きこみました!",vbInformation
Else
MsgBox "一覧表に該当する都道府県がないため" & vbNewLine & "全て書きこみことが出来ませんでした!",vbCritical
End If
となります。
何件書きこめなかった数までを表示したい場合は、”Else~End If”部分を次のように変更しましよう。
ErrorCountで書きこめなかった数を計算して、コメントで表示している形になります。
ErrorCount = LastRow_01-1-Count01
MsgBox "一覧表に該当する都道府県がないため" & vbNewLine & " _
全て書きこむことが出来ませんでした!" _
& vbNewLine & "書きこめなかった件数:" & ErrorCount,vbCritical
※上記コメント部分で途中改行されています。プログラム文を改行する際は、
”半角スペース+_”と入力しその後を改行します。
いかがでしたか?
これで、必要な構文の説明が完了しました。
次回は、実際にVBE画面にプログラムを入力していきましょう。