こんにちは。
課題の最終説明です!
やっと最終・・・。
前回は、VBE画面に実際にプログラムを書いて、最終行を取得しメッセージで表示するところまでを行いまいた。
自分で書いたプログラムが動くとすごくうれしいですよね。
私もそうでした。
やればできるじゃんと自分を褒めました
さて、今回はプログラムの本丸になります。
と言っても、既に「エクセルマクロの基本から6」と「エクセルマクロの基本から7」でご説明済みです。
なので、一気に書いていきます。
ごめんなさい。6と7で書いた変数や型と表現が変わっています。
(コピペはだめ!自分の手で書いてくださいね。)
Public Sub 表入力()
Dim i as Long, j as Long, LastRow01 as Long, LastRow02 as Long, Ck_Count as Long
Dim ErrorCount as Long ’・・・・①
LastRow01=Cells(Rows.Count,4).End(xlUp).Row
LastRow02=Cells(Rows.Count,1).End(xlUp).Row
For i = 2 to LastRow01
For j = 2 to LastRow02
If Cells(i,4).Value = Cells(j,1).Value Then
Cells(j,2).Value = Cells(i,5).Value
Ck_Count=Ck_Count+1
Exit For ’・・・・②
End If
Next
Next
ErrorCount=LastROw01-1-Ck_Count
If Ck_Count= LastRow01-1 then
MsgBox "調査日を全て一覧表に書きこみました!",vbInformation
Else
MsgBox "一覧表に該当する都道府県がないため" _
& vbNewLine & _
"全て書きこむことが出来ませんでした!" _
& vbNewLine & "書きこめなかった件数:" _
& ErrorCount,vbCritical
End If
End Sub
補足
上記プログラムについて2つ補足説明をします。
①については、前回変数の設定の際に出てきていませんでした。
私もすっかり忘れていました。
これはデータにズレが生じた際にその件数を計算するときに使う
変数でした。
②については、まったく説明しておりませんでした。
これは「For~Next」を途中で中止するためのものです。
「Exit」ですので出る(中止する)という意味です。
一覧表B(A列)の表の上から順に一致する都道府県名を探して
いますが、見つかった場合は、そのあとを探す必要はありませんよね。
なので、「見つかったからここで終わりね」という合図になります。
この時中止するのは「For j = 2 to LastRow02」になります。
どうですか?
理解できないところはありましたか?
理解でいなかったところがあった方は、過去の記事を見直していただければと
思います。
では、マクロを実行してみてください。
一覧表Aの調査日が一覧表Bの調査日にもれなく書き込まれましたか?
もし、書き込みできなったメッセージが出た方は、都道県名の入力ミス
がないか確認してください。
もし、メッセージ画面ではなく、エラー画面が表示された場合は、
エラー個所をVBEが表示してくれますのでスぺルミスがないか、
変数の宣言漏れがないかを調べてください。
長々とお付き合いいただきありがとうございました。
非常に基礎的な部分でしたが、今回説明させていただいた部分は
マクロを作成していく中ではとても重要でかつよく使う内容です。
この内容を理解できれば、簡単なマクロ(素人マクロ)を自作できるようになります。
たくさん自作することが大切ですので、頑張って作成してください。
分からないところが出ればググれば誰かが教えてくれます。
次回
は、複数のシートにまたがるマクロの作成について説明したいと思います。
それでは、皆さんありがとうございました。
ちなみにエクセルマクロの勉強に非常に役立った本です。
|
アプリ作成で学ぶExcelVBAプログラミングユーザーフォーム&コントロール
2,916円
Amazon
|

