こんにちは。


これまでのまとめも含め、課題をクリアするためのマクロを作成していきましょうチョキ


まずは、課題にある表を作成しましょう。ビックリマーク

課題画面


上記の画面のように、処理を実施するための表を作成します。

A列に「北海道」から「沖縄県」を入力し、B列は空白にしてください。
D列には「群馬県」から「東京都」を入力し、E列は画面のとおりの日付を入力しましょう。

ここは、必ず課題と同じである必要はありません。好きなように入力してかまいません。

ここでは、課題画面に沿っての説明ですので、その点はご注意ください。


・・・・入力は終わりましたか?ファイル保存を忘れずに。


プログラムを作成するために「VBE画面」を開きましょう。

開き方については「エクセルマクロの基本から3」で説明していますので、
分からなくなった方は再度確認してくださいね。

変数強制宣言


上記の画面まで進みましたか?

次に、作成するマクロの名前をつけましょう。

VBE画面のツールバーの「挿入」をクリックします。表示されたメニューの「プロシージャ」を選択します。

下記のようなメニューが表示されますので、「名前」に「表入力」と入力し、”OK”を押して下さい。
他は変更しなくて大丈夫です。

プロシージャ画面

VBE画面の「Option Explicit」の下に

Publick Sub 表入力()

End Sub


と表示されましたか?

表示されたら準備OKですグッド!


では、プログラムを書いていきましょう。

一つ約束してください。

プログラム文は必ず自らタイピングしてください。コピペでは覚えることができません。たくさん書くことが大事です!

1 変数の宣言

ますは、プログラムで使用する変数を決めて、宣言しましょう。

変数・・?宣言・・・?叫び

となった方は「エクセルマクロの基本から1」「エクセルマクロの基本から2」を確認してくだい!

今回必要な変数を決めていきましょう!

と言いつつ最初からすべての変数を決ることは実際難しいです。プログラムを作成していくうちに必要になったり、結局使わなかったりと・・・・。
足りなくなったら後で設定すれば良いので、作成時に必要だと思う変数を設定しましょう。
今回は変数の使いまわしは行いません。面倒ですので。
慣れてくると使いまわしをして変数を少なくしていきましょう。


では・・・・。

必要な構文をこれまで勉強してきました。その構文単位で必要な変数を考えていきましょう。

使う構文は「For~Next」「If~then~End If」でした。


For~Next」は、データを順番に処理してく構文でした。その際、一つずつ増やしてく変数が必要でした。それを入れ子でつかいますので、2つ必要ですね。

一つ目を「」二つ目を「」としましょう。(ご自身の好きな文字を変数にしてもOKです。)

その次はどこまで処理をするのか「最終行」を取得する必要がありましたね。
なので、その変数を「LastRow01」「LastRow02」としましょう。

次はと・・・。「If~End If」では、データがすべて処理されたかをカウントする変数が必要でした。
これは、「Ck_Count」としましょう。

ひとまずこれでよさそうなので、変数宣言部分を書いていきましょう!


VBE画面の「Public Sub 表入力()」と「End Sub」のに変数宣言を書いていきます。

Public Sub 表入力()

Dim i as Long, j as Long, LastRow01 as Long, LastRow02 as Long, Ck_Count as Long

End Sub


これで変数宣言は終了です!!



2 本文の作成(最終行の取得と確認)

プログラムは書いた上から順番に処理されています。
なので、変数は処理時に必要な「値」を取得しておかなければなりません。

プログラムを書く際は、「上から順番に処理される」「変数は必要となる前に値を取得する

この2点に注意が必要です!

今回使用している変数はすべて数値型ですので、初期値として「0」が設定されています。

事前に値が必要なものとしては「LastRow01」と「LastRow02」となりますので、この2つの変数の値を取得しましょう。

最終行の取得は「Cells(Rows.Count,列).End(xlUp).Row」でしたね。

LastRow01=Cells(Rows.Count,4).End(xlUp).Row ←D列の最終行
LastRow02=Cells(Rows.Count,1).End(xlUp).Row ←A列の最終行

これでOKです。

Public Sub 表入力()

Dim i as Long, j as Long, LastRow01 as Long, LastRow02 as Long, Ck_Count as Long

LastRow01=Cells(Rows.Count,4).End(xlUp).Row
LastRow02=Cells(Rows.Count,1).End(xlUp).Row


End Sub

では、正しく最終行が取得されたかをメッセージに表示してみましょう。

LastRow02の後に

MsgBox "D列の最終行は" & LastRow01 & vbNewLine & "A列の最終行は" & LastRow02 & "です。",vbInformation

と書いて、ファイルを保存してください。

では、マクロを実行してみましょう。

実行はメニューバーの「実行」をクリックし表示されたメニューの「Sub/ユーザーフォームの実行」を選択してください。メニューに緑の三角マークがある場合は、それをクリックすることでも実行できます。

表示されたメッセージと実際に入力した件数があっているか確認してください。

あっていれればOKです。

最終行メッセージ

確認できたら、追加した「MsgBox~」を削除しておいてください。

長くなってきましたので、今回はここまでにしたいと思います。