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
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回.コレクションとは ・コレクションの中から単一オブジェクトを指定する場合 ・セルであるRangeオブジェクトのコレクションは? ・コレクションの要素数 ・Collectionオブジェクト
第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) ・Ifステートメントの構文 ・IFステートメントの条件式 ・Ifステートメントの使用例文 ・Ifステートメントのネスト(入れ子) ・サイト内のIfステートメント参考ページ ・最後に
第21回.条件分岐(ElseIf) |
Select Case | 第22回.条件分岐(Select Case) |
Instr | 第44回.VBA関数について ・VBA関数の書き方 ・関数の戻り値を使わない場合 ・名前付き引数 ・○○○B関数 ・○○○$関数 ・ワークシート関数との関係 ・自動メンバ表示 ・習得すべき関数 ・最後に
第45回.VBA関数(Format)・Format関数 ・日付/時刻表示書式指定文字 ・数値表示書式指定文字 ・文字列表示書式指定文字 ・Format関数の使用例 ・※セルに出力する場合 ・最後に
第46回.VBA関数(日付,DateAdd)・日付時刻に関するVBA関数の一覧 ・DateAdd関数の構文 ・DateAdd関数の使用例
第47回.VBA関数(文字列操作,Replace,InStr,StrConv)・文字列操作に関する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に戻ってください。
サンプル2も同じようにやってみましょう
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 ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.条件分岐(Select Case)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBA技術解説
- VBAを定型文で覚えよう
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。