VBA技術解説
VBAを定型文で覚えよう

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2018-03-26 最終更新日:2021-08-08

VBAを定型文で覚えよう


VBAの書籍を読んでも、ネットの解説記事を読んでも、
なかなかVBAをマスター出来ないという場合は、学習方法が間違っているかもしれません。
その人に合った学習方法、それは人それぞれ違うのは当然です。


本サイトでも、入門者用として多くのページが存在します。

ExcelマクロVBA入門
・VBA学習の進め方について ・1. VBAの基礎・基本:VBA入門 ・2. VBA入門に必要なVBEの基本的使い方 ・3. VBAプログラミングの基礎・基本 ・4. Excel各種機能とオブジェクトの理解:VBA入門 ・5. VBA初級からVBA中級を目指して ・6. VBA入門の後日追加記事 ・7. VBA入門その後の学習について ・「VBA入門」の記事を学校の授業もしくは企業研修でお使いになる場合
ExcelマクロVBA再入門
・準備:VBA再入門 ・セルを扱う:VBA再入門 ・エクセルの便利機能:VBA再入門 ・ブック・シートを扱う:VBA再入門 ・マクロ全体を最適化する:VBA再入門 ・自動化への道:VBA再入門 ・最後に:VBA再入門 ・VBAエキスパートを受験する人は
Excelマクロの記録で覚えるVBA
Wxcelマクロの記録を使うと、手動操作がVBAで自動記録されます。このマクロの記録を使って記録されたVBAコードを読み、そして修正しつつマクロVBAを覚えていこうというシリーズです。マクロVBAをある程度覚えた後にも、マクロの記録はVBAコードを調べるときにとても役立ちます。


これらを見ても、読んだときは分かったつもりになんだけど、
いざ、実際にVBAを書こうとすると、
どうやって書いたら良いか…
どこから書いたら良いか…
手が止まってしまうというのなら、学習方法を少し変えてみて下さい。
もちろん、
以下で書いていることが、あなたに合っていない事もあります。
そのように感じたら、別の方法を探してください。


ここで推奨しているのは、一言で言えば、
「定型文を丸暗記しましょう」という事です。

ただし、
最低限としてVBEを開いてマクロを書いて実行できるところまでは覚えておいてください。

ExcelマクロVBA入門
・VBA学習の進め方について ・1. VBAの基礎・基本:VBA入門 ・2. VBA入門に必要なVBEの基本的使い方 ・3. VBAプログラミングの基礎・基本 ・4. Excel各種機能とオブジェクトの理解:VBA入門 ・5. VBA初級からVBA中級を目指して ・6. VBA入門の後日追加記事 ・7. VBA入門その後の学習について ・「VBA入門」の記事を学校の授業もしくは企業研修でお使いになる場合
第1回.マクロって何?VBAって何?
・マクロとは ・VBAとは ・マクロVBA学習の必要性 ・VBAによる自動化とは条件分岐しつつ処理を繰り返すだけ ・VBAでできること ・マクロVBA学習の前提知識 ・マクロVBAの学習の手引き(VBA学習順序)
第2回.まずはマクロVBAを使う準備
・Excel2003以前 ・Excel2007での「開発」タブ表示 ・Excel2010以降での「開発」タブ表示
第3回.マクロの記録
・マクロ記録の限界 ・「マクロの記録」の操作方法 ・個人用マクロブック ・VBAでの書き方が分からない時に調べる方法
第4回.マクロはどこに書くの(VBEの起動)
・「Visual Basic Editor」の表示方法 ・標準モジュールの挿入 ・「Module1」の名称変更 ・「Module1」の削除
第5回.VBEのオプション設定(Option Explicit)
マクロを書き始める前に、出来れば設定しておいた方が良いオプションがあります。いえ、絶対に設定しておかなければならないVBEのオプション設定です、必ず最初に設定しておいてください。VBEの「ツール」→「オプション」以下の画面が出ます。
第6回.とにかく書いて見よう(Sub,End Sub)
それでは、とにかくマクロVBAを書いてみましょう。VBEで実際にマクロを書いてみましょう VBE(VisualBasicEditor)に標準モジュールを追加したら、そこにマクロを書いていきます。sub練習1 と入力し、Enterして下さい、このように、subがSubと先頭が大文字になり、後ろに()が付きます。
第7回.マクロを実行するには(F5)
・VBEの画面で実行 ・ワークシートの開発タブで実行 ・ボタンや図形に登録して実行 ・マクロを実行すると

または、
Excelマクロ再入門
・準備:VBA再入門 ・セルを扱う:VBA再入門 ・エクセルの便利機能:VBA再入門 ・ブック・シートを扱う:VBA再入門 ・マクロ全体を最適化する:VBA再入門 ・自動化への道:VBA再入門 ・最後に:VBA再入門 ・VBAエキスパートを受験する人は
第1回.マクロを書く準備をする
・開発タブの表示 ・VBEの設定 ・標準モジュールの挿入 ・「マクロを書く準備をする」のまとめ ・ExcelマクロVBA入門の対応ページ
第2回.マクロを書いて動かす
・マクロ有効ブックの作成 ・マクロVBAを書いてみる ・マクロVBAの実行 ・複数のマクロVBAを書く ・プロシージャーとは ・「マクロを書いて動かす」のまとめ ・ExcelマクロVBA入門の対応ページ


まずは、以下の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の解説

何をしているかが判読できて、
これくらいならスラスラ書けるよって人は、この下は読む必要がありません。
いままでの学習を続けてください。

何とか読めるには読めるけど書く自信がない。
そもそも全然わからない。
というのなら、以下をじっくり読んでみて下さい。

VBA マクロ 定型文 丸暗記

上図のように、シートが複数あり、
「データ1」「データ2」というよな名前のシートにはデータが入っています。
その他の名前のシート(Sheet1やSheet2)は、説明文等の別の用途に使っています。
そして、「データ○」のシートにはA列に点数が入っています。

・途中の空行を削除したい
・点数に応じた評価をB列に出したい
 (70以上はA、50以上はB、その他はC)

上記のVBAコードは、
sample1は、途中の空行を削除しています。
sample2は、点数に応じた評価を出力しています。

sample1について、以下の課題1~課題6をやってみましょう。


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を書いてみましょう。
上記のVBAコードを見ながら、そのまんま書き写せば良いです。
ただし、
インデント(字下げ)はちゃんとするようにして下さい。
つまり、全く同じように書かなければダメです。

書き方の手順について
Sub ~ End Sub
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

ステップイン(F8)実行しながら、シートがどのように変化していくかを見つめて下さい。

VBA マクロ 定型文 丸暗記

このように、VBAとバックのシートが同時に確認できるようにウィンドウを血要請して、
VBAコードの実行によって、シートがどう変化していくか、
VBAコードとシートの動きを対比しながら見つめて下さい。

ステップインについては → マクロの実行
・【ここでのポイント】 ・Visual Basic Editorから実行する ・[マクロ]ダイアログボックス ・シート上にボタンを配置する ・メニュー/ツールバーに登録する ・クイックアクセスツールバーに登録する ・【業務改善の実務】 ・【本サイト内の関連ページ】 ・VBAエキスパート公式テキスト


課題6

いよいよ、サンプルコードを見ずに書いてみましょう。

途中で分からないところがあっても、分かる所だけでけでも書き進めましょう。
一通り分かる所だけでも書いたら、
サンプルコードと見比べて、分からなかった所、間違ったところを書き直しましょう。

書き終えたら、ステップイン(F8)実行しながら、1行づつ確認しながら進めてみましょう。


課題7

サンプルコードを見ずに書いて、そのままステップイン実行してみましょう。

文法エラーや実行エラーは、自力で解決しましょう。

・文法エラーや実行エラーを解決できない
・実行結果が正しくない
このような場合は、課題6に戻ってください。

エラーなく正しい結果になれば、無事終了です。


サンプル2も同じようにやってみましょう

sample1が終わったら、次はsample2です。

sample2について、上記の課題1~課題7をやってみましょう。


VBAを定型文で覚えることの目標

課題7が完了したら、VBAコード全体を見渡してみて下さい。

なんとなく全体を見渡す感じが良いです。
sample1の課題1で最初に見たときとは、全く違った見え方になっているはずです。

ふと目に止まった1行を見ただけでも、
VBAコードの意味、シートの動き、変数の変化、
これらが頭の中にイメージできるようになってきます。

目指すべき状態

VBAコードを見て、シートの動き・変数の変化が頭の中にイメージできるようになる事です。
頭の中に、ブック、シート、変数これらを用意します。
VBAコードにあわせて、頭の中でこれらを変化させていきます。
これが無理なくできるようになることを目指してください。

この状態は、VBAを日本語に訳さずに読んでいる状態です。
初心者(VBAを始めたばかりの頃)は、

VBAの命令 ⇔ 日本語に訳す ⇔ 物体・事象を思い浮かべる
この状態から、
VBAの命令 ⇔ 物体・事象を思い浮かべる

このような状態に変化してきているという事です。
身近な例で言うなら、
apple ⇔ VBA リンゴの画像
多くの人は「りんご」という日本語を介さずにイメージしているはずです。
appleという単語に繰り返し何度も触れたことでこのような状態になったという事です。
VBAも繰り返し何度も触れることでこの状態になります。

この段階を過ぎれば、
後は、VBAで使えるステートメント・メソッド・プロパティ・関数を増やしていけば良いだけです。
逆に言えば、
この段階を経ずに、VBAのステートメント・メソッド・プロパティ・関数をいくら覚えても、
実際のVBAコードをスラスラ書けるようにはならないという事です。

ここでの課題で一定の成果があったと感じたら、
いろいろなパターンの良いサンプルコードを見つけて、この課題をやってみて下さい。
そして、使えるVBAの幅を広げていってください。
ただし、
メソッドや関数の引数については無理に暗記する必要はありません。
これらは、必要な時に資料を見るかコピペすれば済むことです。

覚えるべきことは、
基本ステートメントの使い方、ロジックの組み立て方(アルゴリズム)
これを意識してVBAの学習に取り組んでください。




同じテーマ「マクロVBA技術解説」の記事

Rangeの使い方:最終行まで選択を例に
フルパスをディレクトリ、ファイル名、拡張子に分ける
Colorプロパティの設定値一覧(カラー定数、XlRgbColor列挙)
VBAを定型文で覚えよう
VBAこれだけは覚えておきたい必須基本例文10
エクセルVBAでのシート指定方法
文字列結合&でコンパイルエラーになる理由
手動計算時の注意点と再計算方法
VBAの用語について:ステートメントとは
オブジェクト変数とは何か
VBAの小数以下の演算誤差について


新着記事NEW ・・・新着記事一覧を見る

VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ