ExcelマクロVBA技術解説
VBAこれだけは覚えておきたい必須基本例文10

ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説
最終更新日:2018-08-22

VBAこれだけは覚えておきたい必須基本例文10

VBAを覚える順序としては、
・文法から始める方法
・実践例文から始める方法
どちらが良いとは言い切れませんが、もし文法習得に限界を感じているなら、
実践的な基本例文を暗記することから始めてみると良いでしょう。
また、
VBA習得において、
・何を目標にやっていけばよいのか
・どの程度出来たらVBAができると言えるのか
こんな疑問もでてくるでしょう。



以下の10個の必須基本例文を読めて書ければ概ねVBAの基本は出来ますといえるレベルと言って良いでしょう。

基本例文を何度も読んで、何度も書いてみると、いつの間にかVBAが身近な言語となっていきます。

以下では、VBAの解説はごく簡単な説明にとどめています。
細部について、あれこれこだわるより、何度も書いて動かしてみて下さい。
動かすときは、ステップイン(F8)で実行してください。
デバッグの基礎
・デバッグとは ・論理エラーと文法エラー ・イミディエイトウィンドウ ・ブレークポイント ・ステップ実行 【ここでのポイント】 あまりにも範囲が広いため、どこまでが出題範囲なのか悩ましいてころです。デバッグそのものを問う問題だとしても、例文にVBAコードが存在する場合,Excel VBAエキスパート対策です。合格後の業務改善の実務での活用まで。
コーディングとデバッグ
効率的なコーディングと、プログラム作成では避けて通れないデバッグについて説明します。また、陥りやすい間違い、よくやってしまう間違い等も説明しておきます。ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説
シートの状態と変数の状態を良く確認しながら進めて下さい。

例文をかけるようになったら、
それぞれに記載してある参考ページを読んで、細部の文法を学んでください。


1.最終行まで処理
Sub example1()
  Dim i As Long
  For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    Cells(i, 3) = Cells(i, 1) + Cells(i, 2)
  Next
End Sub

2行目からA列とB列にデータが入っています。
A列とB列を足して、C列に入れています。

Cells(Rows.Count, 1).End(xlUp).Row
これが、A列にデータが入っている最終行になります。
, 1)
この1がA列の指定なので、他の列の最終行の場合はこの数値を変更します。

第18回.最終行の取得(End,Rows.Count)
Excelワークシートにおける表の最終行の取得は、必須技術になります、エクセルは表計算ソフトです、つまり縦横の表を扱います、データは横に項目があり、縦に項目に対するデータが入っている事が一般的です。しかし、そのデータ行数は決まった行数ではない事が普通です。Excelマクロの基礎と応用

第6回.表の先頭から最終行まで繰り返す(ForとEnd(xlUp).Row)
エクセルの表は、横の項目はあまり変更はないものですが、縦のデータ数、つまり行数は常に変わるものです、前回のように、固定の回数しか繰り返せないのでは困ります、データ数に応じて、最終行まで繰り返す方法が必要です。データの最終行が分かれば良いのです。マクロが覚えられないという初心者向けに理屈抜きのやさしい解説

最終行・最終列の取得方法(End,CurrentRegion,SpecialCells,UsedRange)
エクセルの表をマクロVBAで扱う時は、データ部分の先頭から最終行までの、開始列から最終列まで処理する事が多いでしょう。開始行や開始列は、ほとんどの場合、見出し行や見出し列の次からになります。ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説
2.後ろから逆順ループ
Sub example2()
  Dim i As Long
  Application.DisplayAlerts = False
  For i = Worksheets.Count To 1 Step -1
    If Worksheets(i).Name Like "削除*" Then
      Worksheets(i).Delete
    End If
  Next
  Application.DisplayAlerts = True
End Sub

「削除○○」のように削除で始まるシート名を削除します。
1番目のシートから削除していくと、削除した時点でシート数が変わってしまうので上手くいきません。

For i = Worksheets.Count To 1 Step -1
変数iがシートの数(Worksheets.Count )から1になるまで、1ずつ減らしていきます。

シート削除時には、警告メッセージが表示されるので、
Application.DisplayAlertsをFalseにすることで、警告が出ないようにしています。

第16回.繰り返し処理(For Next)
VBAのForNextは、同じ処理を繰り返し行うためのVBA構文です。VBAで繰り返し処理をする方法は何通りかありますが、最も頻繁に使われていて、最も簡単便利であり、まず最初に覚えるべき繰り返し処理のVBA構文がForNextになります。Excelマクロの基礎と応用

第66回.シートのコピー・移動・削除(Copy,Move,Delete)
シートをコピーや移動したり、また削除する場合の説明です、マクロVBAでは、雛形シートをコピーして使ったり、不要なシートを削除することは頻繁にあります。シートのコピー・移動には、、Worksheet.Copyメソッド、Worksheet.Moveメソッド これら、Wor,Excelマクロの基礎と応用
3.コレクション処理
Sub example3()
  Dim ws As Worksheet
  Application.DisplayAlerts = False
  For Each ws In Worksheets
    If ws.Name Like "削除*" Then
      ws.Delete
    End If
  Next
  Application.DisplayAlerts = True
End Sub

「削除○○」のように削除で始まるシート名を削除します。

For Each ws In Worksheets
全てのワークシートから、一つずつ変数wsに取り出します。

シート削除時には、警告メッセージが表示されるので、
Application.DisplayAlertsをFalseにすることで、警告が出ないようにしています。

第58回.コレクションとは
同種のオブジェクトを複数まとめたものを「コレクション」と呼びます、コレクションもオブジェクトの一種です。例えば、Workbookオブジェクトが複数まとまったものは「Workbooksコレクション」Worksheetオブジェクトが複数まとまったものは「Worksheet,Excelマクロの基礎と応用

第59回.コレクション処理(For Each)
ForEachは、コレクションの各要素に対して繰り返し処理を実行します、コレクションはオブジェクトの集まりですので、ForEachは、コレクションの中から、個別のオブジェクトを取り出して処理する場合に使用します。コレクションの全ての要素に対し処理を行うと、ループは終了,Excelマクロの基礎と応用
4.多分岐
Sub example4()
  Dim i As Long
  For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    'ElseIfで
    If Cells(i, 1) >= 90 Then
      Cells(i, 2) = "A"
    ElseIf Cells(i, 1) >= 70 Then
      Cells(i, 2) = "B"
    ElseIf Cells(i, 1) >= 50 Then
      Cells(i, 2) = "C"
    Else
      Cells(i, 2) = "D"
    End Select
    'Select Caseで
    Select Case Cells(i, 1)
      Case Is >= 90
        Cells(i, 2) = "A"
      Case Is >= 70
        Cells(i, 2) = "B"
      Case Is >= 50
        Cells(i, 2) = "C"
      Case Else
        Cells(i, 2) = "D"
    End Select
  Next
End Sub

2行目からA列にデータが入っています。
A列の数値によって、B列にABCDの判定を入れています。

ElseIfでの記述と、Select Caseでの記述の両方でやっています。
ElseIfとSelect Caseでは全く同じ処理となっています。

第20回.条件分岐(If)
ある条件の時だけ処理したい事もあれば、条件によって処理内容を変更したい事もあります、条件により処理を分岐させたい場合に使うのが、Ifステートメントです。VBAマクロで自動化する場合の多くは、条件により処理を変えつつ一定回数繰り返すという事です。Excelマクロの基礎と応用

第21回.条件分岐(ElseIf)
前回のIFステートメントでは、真か偽の二択でした、今回は、もっと多くの分岐が必要な、Ifステートメントで多肢条件分岐の場合の書き方です。ステートメントとしては、Ifステートメントです。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説


第22回.条件分岐(Select Case)
前回のElseIf以外の、多肢条件分岐の別の書き方があります、それがSelectCaseになります。むしろElseIfより、このSelectCaseの方が、より多肢条件分岐に適していると言えます。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
5.セルのコピー
Sub example5()
  'セル全体をコピー
  Range("A1").Copy Destination:=Range("B1")
  '値だけのコピー
  Range("B2:B10").Value = Range("A2:A10").Value
End Sub

A1セルを、B1セルにコピーします。
値だけでなく、書式等を含めたセルの情報の全てをコピーします。

A2:A10セルの値だけを、B2:B10にコピーします。
この場合は、Valueを省略できません。

第40回.セルのコピー・カット&ペースト(Copy,Cut,Paste)
マクロVBAにおいて、あるセルをコピーまたはカットして、他のセルに貼り付ける場合のマクロVBAの説明になります、手作業で、セルをコピー(Ctrl+C)またはカット(Ctrl+X)して、他のセルに貼り付け(Ctrl+V後にESCまたはEnter) これと同じ動作をするマ,Excelマクロの基礎と応用

第41回.セルのコピー&値の貼り付け(PasteSpecial)
値の貼り付けと題しましたが、値だけではなく、「形式を選択して貼り付け」のいろいろな指定方法です。セルをコピーして、他のセルに「形式を選択して貼り付け」する場合のマクロVBAコードになります。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説

第42回.セルをコピーするとは
セルをコピーするとは、どういう事でしょうか、セルをコピーするという事を少し掘り下げて考えることで、より実践的なVBAコードを書くことが出来るようになります。セルは、Rangeオブジェクトです、オブジェクトそのものは、コピーできません、では、何をコピーしているので,Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
6.ワークシート関数
Sub example6()
  Dim i As Long
  On Error Resume Next
  For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    Cells(i, 2) = WorksheetFunction.VLookup( _
          Cells(i, 1), Range("E:F"), 2, False)
  Next
  On Error GoTo 0
End Sub

2行目からA列にデータが入っています。
A列の値で、E:F列のデータをVLOOKUPして、B列に入れています。

VBAをやる上では、ワークシート関数の習得は必須になります。
ワークシート関数で出来ることをVBAでゴリゴリ書いたりしないようにして下さい。

第87回.WorksheetFunction(ワークシート関数を使う)
VBA関数以外に、Excelワークシート関数をマクロVBAで使うことが出来ます、ワークシート関数は、VBA関数よりはるかに多くの関数があります。ワークシート関数を使う事で、VBAコードを非常に簡潔に記述することが出来る場合が多いです。Excelマクロの基礎と応用
7.オブジェクト変数
Sub example7()
  Dim i As Long
  Dim ws As Worksheet
  Set ws = ActiveSheet
  With ws
    For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
      .Cells(i, 3) = .Cells(i, 1) + .Cells(i, 2)
    Next
  End With
End Sub

シートを指定しないRangeやCellsはアクティブシートとなってしまうので、
アクティブシート以外を操作する場合はシートを指定します。
しかし、シート指定は記述が長くなりがちなので、
オブジェクト変数を使って、シート指定を短い記述にすることが出来ます。
さらに、
Withを使う事で、まとめて一括でシートを指定してより簡単にシートを指定できるようになります。

第51回.Withステートメント
Withステートメントは、指定したオブジェクトに対してオブジェクト名を再定義することなく、一連のステートメントを実行することができます。文章で言えば、主語を一度書いたら、その後は主語を省略する場合の書き方になります。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説

第52回.オブジェクト変数とSetステートメント
変数のデータ型の説明において、Object・・・オブジェクト型 というのがあった事を覚えているでしょうか。数値や文字ではなく、オブジェクトを入れる変数がオブジェクト変数です。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
8.ブックを開く
Sub example8()
  Dim wb As Workbook
  Dim ws As Worksheet
  Set wb = Workbooks.Open("C:\user\sample.xlsx")
  Set ws = wb.Worksheets(1)
  ThisWorkbook.Worksheets(1).Range("A1") = ws.Range("A1")
  wb.Close SaveChanges:=False
End Sub

ブックを開いて、先頭シートのA1セルの値を取得しています。
ブックのOpenと同時にオブジェクト変数に入れる事で、その後が記述しやすくなります。

第63回.ブックを開く(Open)
他のブックを開く方法です、しかし、これが結構いろいろあるのです。Excelで開くことが出来るファイルはCSV等のテキストファイルもありますが、ここではエクセルファイル限定で説明します。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説

第64回.ブックを閉じる・保存(Close,Save,SaveAs)
ワークブックを閉じる場合、保存する場合のマクロVBAの説明です、閉じる時に保存するか保存しないか、また、保存する場合も、どのように保存するかによってVBAが違ってきます。閉じる Workbook.Closeメソッド Workbook.CloseSaveChanges,Excelマクロの基礎と応用
9.ファイル一覧
Sub example9()
  Dim i As Long
  Dim sFile As String
  i = 1
  sFile = Dir("C:\sample\*.xls*")
  Do While sFile <> ""
    Cells(i, 1) = sFile
    i = i + 1
    sFile = Dir()
  Loop
End Sub

Cドライブ下にある、sampleオォルダ内のexcelファイルの一覧を取得しています。

Dir関数は、ファイルだけでなくフォルダも取得することができます。

第17回.繰り返し処理(Do Loop)
繰り返し処理として、前回はFor〜Nextをやりました、今回はDo〜Loopです。For〜Nextに比べると使用頻度は落ちますが、必ず覚える必要があるものです。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説

第79回.ファイル操作T(Dir)
VBAでは、フォルダのファイル一覧を取得したり、ファイルの存在確認をする事が出来ます、指定したパターンやファイル属性と一致するファイルまたはフォルダの名前を表す文字列の値を返します。Dir関数は、引数に指定したファイルが存在すると、そのファイル名を返し、存在しないと空,Excelマクロの基礎と応用

エクセルでファイル一覧を作成
10.テキスト読み書き
Sub example10()
  Dim InData As String
  Open "C:\sample\sample1.txt" For Input As #1
  Open "C:\sample\sample2.txt" For Output As #2
  Do While Not EOF(1)
    Line Input #1, InData
    Print #2, InData
  Loop
  Close #1
  Close #2
End Sub

"C:\sample\sample1.txt"を1行ずつ読み込んで、
同じ内容を、
"C:\sample\sample2.txt"に出力しています。

For InputとLine Input
For OutputとPrint
これらをセットで使います。
Closeを忘れないようにしてください。

第116回.ファイル操作U(OpenとClose)
VBAでファイル(CSV等)を扱う時は、最初に、ファイルを開き、次に、読込書込みを行い、最後に、ファイルを閉じます。ファイルを開くには、Openステートメントを使います、ファイルをとじるには、Closeステートメントを使います。Excelマクロの基礎と応用

第117回.ファイル操作U(Line Input #)
VBAでファイル(CSV等)を扱う時は、最初に、ファイルを開き、次に、読込書込みを行い、最後に、ファイルを閉じます。ファイルを読み込む時に、LineInput#ステートメントを使います。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説

第118回.ファイル操作U(Print #)
VBAでファイル(CSV等)を扱う時は、最初に、ファイルを開き、次に、読込書込みを行い、最後に、ファイルを閉じます。ファイルを書き込む時に、Print#ステートメントを使います。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説

第119回.ファイルシステムオブジェクト(FileSystemObject)
FileSystemObjectオブジェクトは、コンピュータのファイルシステムへのアクセスを提供します、VBAに用意されているファイル操作関連のステートメントや関数より、より強力で、より多くの機能が搭載されています。ただし、機能が大変多いため、これらを全て覚えるという,Excelマクロの基礎と応用

ここまでがしっかり覚えられれば、
後は、使えるメソッドやプロパティを順に増やしていってください。


そして、ある程度VBAがかけるようになったら、次は配列に進んでください。
VBAの処理速度対策として、配列は必須技術になります。

第111回.静的配列
配列は、値を格納するために多くの区画を持つ1つの変数です、集合住宅やアパートにたとえられますが、要は、変数の箱を複数つなげたものと理解すれば良いでしょう。1つの箱には、1つの値しか入れられませんが、その箱が複数つながっていますので、結果として、複数の値をいれられるのが,Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説

第112回.動的配列(ReDim)
静的配列では、配列の要素数は宣言時点で決められていました、しかし、プログラミングをする上で、実行時点で要素数を決めたい場合や、実行途中で増やしたい場合が多くあります。実行時点で要素数を増減できるのが、動的配列になります。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説

第113回.配列に関連する関数
配列を使う上で、必要となるVBA関数がいくつかあります、より便利に配列を活用するために必須となるVBA関数について解説します。LBound関数 配列の指定された次元で使用できる最小の添字を、長整数型(Long)の値で返します。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説

第114回.セル範囲⇔配列
セル範囲をVariant型変数に入れる事で、配列を作成することができます、また、配列をセル範囲にまとめて入れる事も出来ます。これは、VBAを高速処理したい時の必須テクニックになります、マクロVBAの処理が遅い場合は、このテクニックが使えないか検討してください。Excelマクロの基礎と応用

配列の使い方について
今回は、配列についての基礎知識をまとめました。配列とはシートのセルを考えて下さい。ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説

VBAの配列まとめ(静的配列、動的配列)
VBAで配列を必要とするのは、処理速度を上げる為だと言えます、そもそも、エクセルにはセルの2次元配列であるシートがあります。にもかかわらず、VBAの学習を進めると必ず配列が出てきます、ではなぜVBAで配列必須になるかと言うと、セルを使うと処理速度が非常に遅く




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

シートに数式を設定する時のセル参照の指定方法
標準モジュールとシートモジュールの違い
オートフィルタ(AutoFilter)の使い方まとめ
複雑な条件(複数除外等)のオートフィルター(AutoFilter)
クリップボードを使わないセルのCopy
Rangeの使い方:最終行まで選択を例に
フルパスをディレクトリ、ファイル名、拡張子に分ける
Colorプロパティの設定値一覧
VBAを定型文で覚えよう
VBAこれだけは覚えておきたい必須基本例文10
エクセルVBAでのシート指定方法

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

「VBAによる解析シリーズその2 カッコ」をやってみた|エクセル(5月21日)
VBA+SeleniumBasicで検索順位チェッカー作成|VBA技術解説(5月18日)
テーブル操作のVBAコード(ListObject)|VBA入門(5月12日)
テーブル操作の概要(ListObject)|VBA入門(5月12日)
VBAのスクレイピングを簡単楽にしてくれるSelenium|VBA技術解説(5月6日)
Excelワークシート関数一覧(2010以降)|VBAリファレンス(4月22日)
クラスとCallByNameとポリモーフィズム(多態性)|VBA技術解説(4月6日)
VBAでのタイマー処理(SetTimer,OnTime)|VBA技術解説(4月3日)
クラスとイベントとマルチプロセス並列処理|VBA技術解説(4月2日)
エクセルの日付と時刻のまとめ|エクセル関数超技(3月6日)

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

1.ひらがな⇔カタカナの変換|エクセル基本操作
2.最終行の取得(End,Rows.Count)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.RangeとCellsの使い方|ExcelマクロVBA入門
6.変数とデータ型(Dim)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.繰り返し処理(For Next)|ExcelマクロVBA入門
9.とにかく書いて見よう(Sub,End Sub)|VBA入門
10.セルに文字を入れるとは(Range,Value)|VBA入門



  • >
  • >
  • >
  • VBAこれだけは覚えておきたい必須基本例文10

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


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






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

    本文下部へ