VBAがわかる人は、どう処理を読み解いているか
例えば、下記のVBAを読み解く場合、全く知識が無い状態では解読が難しいと思います。
しかし、わかる人がこれを解読する際に、どんな風に読んでいくのかが分かれば、すぐにでも読めるようになるのです!
↓わかる人の頭の中....↓
「Withがあるから、、、End Withまでの間に書かれているピリオド(.)が先頭についたCellsはシートが"データ追加"のセルで、、、」
「Forがあるから、Nextまでの間の処理を反復する。その反復する処理ってのが、、、」
「まず、6列目だからF列のセルに、、、Left関数で、A列のセルの左から4文字を取って入力、、、」(括弧の左側が6だから6列目、右側のiが2と定義されているから、セルは「F2」指定だということ。)
「次に、7列めだからG列のセルに、、、Vlookup関数でなんか入れてる。B列のセルを検索値にして、"マスタ"シートのA:Bの2列目を参照しているのか、、、」
「で、If Then構文だから条件分岐、、、5列目ってことは、E列の値が50万以上だったら8列目、、、つまりH列へのデータ入力を2行目から、A列のデータ最終行まで繰り返せというわけか、、、」
というように、わかる人の頭の中ではこのように読み解かれていきます。
この読み解き方を基に、読み解く上での必須知識を下記に記します。
必須知識
-
セルの指定方法
-
Range...変数を使わない場合に使用。
括弧の中をダブルクォー
テーションで囲む。
例> Range("A5") -
Cells...変数を使う場合に使用。
括弧の左側に変数を入れ、
カンマ(,)で区切り、右側に列
番号を入れる。
例> Cells(i,5)
-
-
関数を使う際の注意点
プロシージャ内で使う関数は大きく分けて関数名の前に「WorksheetFunction.」と入力する必要があるもの、ないものの2種類があります。
-
必要ある関数の代表例
Sum,Counta,Sumif,Countif,Vlookup
Muchなどの文字列操作関数や日付関数 -
必要ない関数の代表例
Year,Month,Day,Left,Mid,Rightなど
の数値集計の関数
-
上記のように分けられますが、明確な基準はありません。手っ取り早い確認方法としては、WorksheetFunctionと入力後にピリオドを押すと、WorksheetFunctionをつけなければいけない関数候補リストが出てきます。ここに出てくるものはWorksheetFunctionが必要だし、ここに出てこないLeft関数などはつけなくてもよい、ということになります。
- 「Cells(Rows.Count,1).End(xlUp).Row」
↑この文の意味とは
そもそも手作業で、表データの一番下に移動する時はどのような操作をしていますか?
手操作で、A列の最終行に移動する場合は、
A1セルが選択されている状態で、
- Ctrl + ↓
これで、最終行に移動できます。
これをマクロVBAでは、
- Cells(1, 1).End(xlDown)
このように書きます。
しかし、途中に空欄のセルがある場合、表の途中に空欄が不特定に入っている場合は、いったんシートの最終行である、「A1048576」セルに移動してから、Ctrl + ↑とすれば、表の最終行に移動できます。
これをマクロVBAでは、
- Cells(Rows.Count, 1).End(xlUp)
このように書きます。
つまり、シートのA列の最終行から、上に向かって、Ctrl+↑で移動しているという訳です。
最後に.Rowsをくっつけることで、セルの値ではなく、セルの行数を表せることになります。これは定型文として丸暗記しましょう。
- 予備知識
.End(xlUp) : Ctrl+↑上へ移動
.End(xlDown) : Ctrl+↓下へ移動
.End(xlToLeft) : Ctrl+←左へ移動
.End(xlToRight) : Ctrl+→右へ移動
これらの知識を持って、もう一度上記のVBAを眺めてみると、自然と流れが読めてしまいませんか???
まだ疑問が残るという方は、
- For Next構文
- With構文
- If Then構文
- Dimという単語の意味
について独自で調べてみると良いかもしれません。以下の参考文献で、直ぐにでもVBAの基本が分かってしまうと思います!
参考文献
-たった1秒で仕事が片付くExcel自動化の教科書
https://sugoikaizen.com/excelvba/