こんにちは。

 

課題の最終説明です!

 

やっと最終・・・。爆  笑

 

前回は、VBE画面に実際にプログラムを書いて、最終行を取得しメッセージで表示するところまでを行いまいた。

自分で書いたプログラムが動くとすごくうれしいですよね。 OK

私もそうでした。

やればできるじゃんと自分を褒めました星

 

 

さて、今回はプログラムの本丸になります。

と言っても、既に「エクセルマクロの基本から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が表示してくれますのでスぺルミスがないか、

変数の宣言漏れがないかを調べてください。

 

 

長々とお付き合いいただきありがとうございました。

非常に基礎的な部分でしたが、今回説明させていただいた部分は

マクロを作成していく中ではとても重要でかつよく使う内容です。

この内容を理解できれば、簡単なマクロ(素人マクロ)を自作できるようになります。

たくさん自作することが大切ですので、頑張って作成してください。

分からないところが出ればググれば誰かが教えてくれます。

 

次回?は、複数のシートにまたがるマクロの作成について説明したいと思います。

それでは、皆さんありがとうございました。照れ

 

ちなみにエクセルマクロの勉強に非常に役立った本です。