VBAを定型文で覚えよう
VBAの書籍を読んでも、ネットの解説記事を読んでも、
なかなかVBAをマスター出来ないという場合は、学習方法が間違っているかもしれません。
その人に合った学習方法、それは人それぞれ違うのは当然です。
これらを見ても、読んだときは分かったつもりになんだけど、
いざ、実際にVBAを書こうとすると、
どうやって書いたら良いか…
どこから書いたら良いか…
手が止まってしまうというのなら、学習方法を少し変えてみて下さい。
もちろん、
以下で書いていることが、あなたに合っていない事もあります。
そのように感じたら、別の方法を探してください。
「定型文を丸暗記しましょう」という事です。
最低限としてVBEを開いてマクロを書いて実行できるところまでは覚えておいてください。
Excelマクロ再入門
まずは、以下の2つのサンプルコードを読んでみて下さい。
サンプルVBA
サンプル1
Sub sample1()
Dim i As Long
Dim lastRow As Long
Dim cnt As Long
Dim wb As Workbook
Dim ws As Worksheet
Dim shtName As String
Set wb = ThisWorkbook
shtName = "データ"
For Each ws In wb.Worksheets
With ws
If InStr(.Name, shtName) > 0 Then
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = lastRow To 2 Step -1
cnt = WorksheetFunction.CountA(.Rows(i))
If cnt = 0 Then
.Rows(i).Delete
End If
Next
End If
End With
Next
End Sub
サンプル2
Sub sample2()
Dim i As Long
Dim j As Long
Dim ws As Worksheet
ThisWorkbook.Activate
For j = 1 To Worksheets.Count
With Worksheets(j)
If .Name Like "*データ*" Then
i = 2
Do Until .Cells(i, 1) = ""
Select Case .Cells(i, 1)
Case Is >= 70
.Cells(i, 2) = "A"
Case Is >= 50
.Cells(i, 2) = "B"
Case Else
.Cells(i, 2) = "C"
End Select
i = i + 1
Loop
End If
End With
Next
End Sub
サンプルVBAの解説
これくらいならスラスラ書けるよって人は、この下は読む必要がありません。
いままでの学習を続けてください。
そもそも全然わからない。
というのなら、以下をじっくり読んでみて下さい。

「データ1」「データ2」というよな名前のシートにはデータが入っています。
その他の名前のシート(Sheet1やSheet2)は、説明文等の別の用途に使っています。
そして、「データ○」のシートにはA列に点数が入っています。
・点数に応じた評価をB列に出したい
(70以上はA、50以上はB、その他はC)
sample1は、途中の空行を削除しています。
sample2は、点数に応じた評価を出力しています。
VBAを定型文で覚えるための課題
課題1
分からない構文や単語があっても構いませんので、
もう一度VBAコードをじっくり読んでみましょう。
ざっと目を通す感じで読んでみましょう。
これらを繰り返し何度か読んで込みましょう。
課題2
軽くさっと読む程度でも構いません。
もちろん、じっくり理解してはいけないという事ではありません、
理解できない・覚えられないと思っても、そこで停止せずに先に進んでくださいという事です。
構文・単語 | 解説ページ |
Dim | 第12回.変数とデータ型(Dim) |
Workbook | 第53回.Workbookオブジェクト |
Worksheet | 第55回.Worksheetオブジェクト |
Thisworkbook | 第53回.Workbookオブジェクト |
Activate | 第27回.ブック・シートの選択(Select,Activate) |
Set | 第52回.オブジェクト変数とSetステートメント |
For Each … Next | 第58回.コレクションとは 同種のオブジェクトを複数まとめたものを「コレクション」と呼びます、コレクションもオブジェクトの一種です。例えば、Workbookオブジェクトが複数まとまったものは「Workbooksコレクション」Worksheetオブジェクトが複数まとまったものは「Worksheetsコレクション」オブジェクト名が単数形であるのに対し、
第59回.コレクション処理(For Each) |
For … Next | 第16回.繰り返し処理(For Next) |
Cells(.Rows.Count, 1).End(xlUp).Row | 第18回.最終行の取得(End,Rows.Count) |
Rows(i).Delete | 第29回.セル・行・列の削除・挿入(Delete,Insert) |
With … End With | 第51回.Withステートメント |
If … End If | 第20回.条件分岐(If) ある条件の時だけ処理したい、ある条件の時は処理したくない、そのような条件によって処理内容を変更したい場合があります。VBAで条件により処理を分岐させたい場合に使うのが、Ifステートメントです。マクロVBAで自動化する場合の多くは、条件により処理を変えつつ一定回数繰り返すという事です。
第21回.条件分岐(ElseIf) |
Select Case | 第22回.条件分岐(Select Case) |
Instr | 第44回.VBA関数について ワークシートに関数があるように、マクロVBAにも専用の関数が用意されています、このマクロVBA専用の関数をVBA関数と呼んだりします。関数とは、多くの人が共通して必要となる機能(命令)を一塊にしてプログラミング言語として用意されているものです。
第45回.VBA関数(Format)VBAのFormat関数は、指定した書式に変換した文字列を返す関数で、ワークシート関数のTEXT関数とほぼ同様の機能になります。Format関数は、非常に使用頻度の高い関数でありマクロVBAにおいては重要かつ必須習得関数です。Format関数はしっかと使えるようにしておきましょう。
第46回.VBA関数(日付,DateAdd)データ型の中でも日付時刻はかなり特殊であり、関数の使用は必要不可欠になります。ここでは、日付に関するVBA関数の一覧と、DateAdd関数について解説します。DateAdd関数以外の他の関数は、一覧のリンクより個別のページを参照して下さい。
第47回.VBA関数(文字列操作,Replace,InStr,StrConv)文字列操作は、マクロVBAでプログラミングする上で必須です、データ整形、データクレンジング、データクリーニング、これらを行うVBAにおいて不可欠なものが、文字列操作関数です。ここでは、文字列操作に関するVBA関数の一覧と Replace関数、InStr関数、StrConv関数について解説します。
第48回.VBA関数(その他,Fix,Int,Rnd,Round,IsEmpty) |
WorksheetFunction.CountA | 第87回.WorksheetFunction(ワークシート関数を使う) |
Do … Loop | 第17回.繰り返し処理(Do Loop) |
構文や単語の理解が少し進んだところで、
もう一度VBAコードをじっくり読んでみましょう。
ざっと目を通す感じで読んでみましょう。
これらを繰り返し何度か読んで込みましょう。
課題3
上記のVBAコードを見ながら、そのまんま書き写せば良いです。
ただし、
インデント(字下げ)はちゃんとするようにして下さい。
つまり、全く同じように書かなければダメです。
If ~ End If
Select Case ~ End Select
For ~ Next
For Each ~ Next
Do ~ Loop
With ~ End With
ブロック構文は、
最初の行を書いたら、次にはブロック構文の終了文を書いてから中身を書きます。
For Each ws In wb.Worksheets
Next
For Each ws In wb.Worksheets
With ws
End With
Next
For Each ws In wb.Worksheets
With ws
If InStr(.Name, shtName) > 0 Then
End If
End With
Next
For Each ws In wb.Worksheets
With ws
If InStr(.Name, shtName) > 0 Then
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = lastRow To 2 Step -1
Next
End If
End With
Next
For Each ws In wb.Worksheets
With ws
If InStr(.Name, shtName) > 0 Then
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = lastRow To 2 Step -1
cnt = WorksheetFunction.CountA(.Rows(i))
If cnt = 0 Then
End If
Next
End If
End With
Next
インデント(字下げ)には、必ずTabキーを使ってください。
課題4
何を(どんな処理)を書いているかを考えながら書いてください。
シートに対して、どのような処理をしているかを考えながら書いてください。
課題5

VBAコードの実行によって、シートがどう変化していくか、
VBAコードとシートの動きを対比しながら見つめて下さい。
課題6
一通り分かる所だけでも書いたら、
サンプルコードと見比べて、分からなかった所、間違ったところを書き直しましょう。
課題7
・実行結果が正しくない
このような場合は、課題6に戻ってください。
VBAを定型文で覚えることの目標
sample1の課題1で最初に見たときとは、全く違った見え方になっているはずです。
VBAコードの意味、シートの動き、変数の変化、
これらが頭の中にイメージできるようになってきます。
目指すべき状態
頭の中に、ブック、シート、変数これらを用意します。
VBAコードにあわせて、頭の中でこれらを変化させていきます。
これが無理なくできるようになることを目指してください。
初心者(VBAを始めたばかりの頃)は、
この状態から、
VBAの命令 ⇔ 物体・事象を思い浮かべる
身近な例で言うなら、
apple ⇔

多くの人は「りんご」という日本語を介さずにイメージしているはずです。
appleという単語に繰り返し何度も触れたことでこのような状態になったという事です。
VBAも繰り返し何度も触れることでこの状態になります。
後は、VBAで使えるステートメント・メソッド・プロパティ・関数を増やしていけば良いだけです。
逆に言えば、
この段階を経ずに、VBAのステートメント・メソッド・プロパティ・関数をいくら覚えても、
実際のVBAコードをスラスラ書けるようにはならないという事です。
いろいろなパターンの良いサンプルコードを見つけて、この課題をやってみて下さい。
そして、使えるVBAの幅を広げていってください。
ただし、
メソッドや関数の引数については無理に暗記する必要はありません。
これらは、必要な時に資料を見るかコピペすれば済むことです。
基本ステートメントの使い方、ロジックの組み立て方(アルゴリズム)
これを意識してVBAの学習に取り組んでください。
同じテーマ「マクロVBA技術解説」の記事
Rangeの使い方:最終行まで選択を例に
フルパスをディレクトリ、ファイル名、拡張子に分ける
Colorプロパティの設定値一覧(カラー定数、XlRgbColor列挙)
VBAを定型文で覚えよう
VBAこれだけは覚えておきたい必須基本例文10
エクセルVBAでのシート指定方法
文字列結合&でコンパイルエラーになる理由
手動計算時の注意点と再計算方法
VBAの用語について:ステートメントとは
オブジェクト変数とは何か
VBAの小数以下の演算誤差について
新着記事NEW ・・・新着記事一覧を見る
VBA100本ノック 98本目:席替えルールが守られているか確認|VBA練習問題(3月1日)
VBA100本ノック 97本目:Accessからデータを取得2|VBA練習問題(2月27日)
VBA100本ノック 96本目:Accessからデータを取得1|VBA練習問題(2月26日)
VBA100本ノック 95本目:図形のテキストを検索するフォーム作成|VBA練習問題(2月24日)
VBA100本ノック 94本目:表範囲からHTMLのtableタグを作成|VBA練習問題(2月23日)
VBA100本ノック 93本目:複数ブックを連結して再分割|VBA練習問題(2月22日)
VBA100本ノック 92本目:セルの色を16進で返す関数|VBA練習問題(2月20日)
VBA100本ノック 91本目:時間計算(残業時間の月間合計)|VBA練習問題(2月19日)
VBA100本ノック 90本目:セルに重なっている画像の削除|VBA練習問題(2月17日)
VBA100本ノック 89本目:2つのフォルダの統合|VBA練習問題(2月16日)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.マクロはどこに書くの(VBEの起動)|VBA入門
10.とにかく書いてみよう(Sub,End Sub)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBA技術解説
- VBAを定型文で覚えよう
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。