ExcelマクロVBA技術解説 | VBAこれだけは覚えておきたい必須基本例文10 | ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説



最終更新日:2018-08-22

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

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


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

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

以下では、VBAの解説はごく簡単な説明にとどめています。
細部について、あれこれこだわるより、何度も書いて動かしてみて下さい。
動かすときは、ステップイン(F8)で実行してください。
デバッグの基礎
コーディングとデバッグ
シートの状態と変数の状態を良く確認しながら進めて下さい。

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


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)

第6回.表の先頭から最終行まで繰り返す(ForとEnd(xlUp).Row)

最終行・最終列の取得方法(End,CurrentRegion,SpecialCells,UsedRange)
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)

第66回.シートのコピー・移動・削除(Copy,Move,Delete)
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回.コレクションとは

第59回.コレクション処理(For Each)
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)

第21回.条件分岐(ElseIf)

第22回.条件分岐(Select Case)
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)

第41回.セルのコピー&値の貼り付け(PasteSpecial)

第42回.セルをコピーするとは
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(ワークシート関数を使う)
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ステートメント

第52回.オブジェクト変数とSetステートメント
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)

第64回.ブックを閉じる・保存(Close,Save,SaveAs)
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)

第79回.ファイル操作T(Dir)

エクセルでファイル一覧を作成
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)

第117回.ファイル操作U(Line Input #)

第118回.ファイル操作U(Print #)

第119回.ファイルシステムオブジェクト(FileSystemObject)

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

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

第111回.静的配列

第112回.動的配列(ReDim)

第113回.配列に関連する関数

第114回.セル範囲⇔配列

配列の使い方について

VBAの配列まとめ(静的配列、動的配列)




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

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

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

数値範囲で表検索するVLOOKUP近似一致|エクセル関数超技(10月5日)
エクセルVBAでのシート指定方法|VBA技術解説(9月8日)
VBAのクラスとは(Class,Property,Get,Let,Set)|VBA技術解説(8月28日)
VBAこれだけは覚えておきたい必須基本例文10|VBA技術解説(8月22日)
VBAの省略可能な記述について|ExcelマクロVBA技術解説(8月11日)
複数条件判定を行う時のコツ|ExcelマクロVBA技術解説(7月11日)
For Next の使い方いろいろ|VBA技術解説(6月14日)
VBAを定型文で覚えよう|ExcelマクロVBA技術解説(3月26日)
VBAスタンダード試験対策まとめ|MOS VBAエキスパート対策(3月16日)
ユーザーフォームとメニューの操作|MOS VBAエキスパート対策(3月14日)

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

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



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

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


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





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

    本文下部へ

    ↑ PAGE TOP