VBAまとめ

VBA

基本構文

操作項目 VBA 備考
Subプロシージャの入力 Sub プロシージャ名()
    ~処理~
End Sub
[Sub マクロ名()] を入力してEnterを押下すると自動で [End Sub] が出力される
Functionプロシージャの入力 Function プロシージャ名(引数名 As 型, …) As 戻り値の型
    ~処理~
    プロシージャ名 = 戻り値
End Sub
Functionプロシージャは戻り値を返す
プロシージャの呼び出し Call プロシージャ名 引数が必要な場合 →Call プロシージャ名(引数)
変数の宣言 Dim 変数名 As 型  
定数の宣言 Const 定数名 As 型 定数名は大文字
静的配列の宣言(1次元)  Dim 配列名(インデックス) As 型

(例)0~9までの要素を持つ配列を作成
Dim 配列名(9) As 型

Dim 配列名(開始インデックス to 終了インデックス) As 型 (例)1~10までの要素を持つ配列を作成
Dim 配列名(1 to 10) As 型
静的配列の宣言(2次元)  Dim 配列名(1次元インデックス, 2次元インデックス) As 型 (例)6個と11個の要素を持つ配列を作成
Dim 配列名(5,10) As 型
動的配列の宣言 Dim 配列名() As 型  
動的配列の再定義 ReDim 配列名(インデックス)  
動的配列の再定義(データの初期化なし) ReDim Preserve 配列名(インデックス)  
配列にデータを格納 配列名 = Array(“データ1”, “データ2”, “データ3”)   
配列名(0) = “データ1”
配列名(1) = “データ2”
配列名(2) = “データ3”
 
コメント ‘ コメントしたい文 [ツールバー]の[コメント ブロック]で一括でコメントアウトできる
文字と文字の結合 “文字” & “文字”  
複数行を1行とみなす 改行前の文 _
    改行後の文 
(半角スペース+アンダースコア) 1行のコードが長くなるとき、可読性を上げるために使用
プロパティの指定 オブジェクト.プロパティ名  
メソッドの指定 オブジェクト.メソッド名  
オブジェクト名の省略
(With文)
With オブジェクト
    .プロパティ名 = 値
    .メソッド名
End With
プロパティ:オブジェクトの情報や状態を取得・設定
メソッド:オブジェクトの動作を命令

・メソッドにはオプション(引数)を付けられるものがある。引数名は順番通りであれば省略可
・関数やメソッドの戻り値を使用する場合は引数を必ず括弧でくくり、使用しない場合は括弧を付けない
(例)戻り値を不使用
Worksheets.Add After:=ActiveSheet
(例)戻り値を使用
Worksheets.Add(After:=ActiveSheet).Name = “シート2”
メッセージボックスの出力(MsgBox関数) MsgBox(Prompt:=”表示する文字”, Buttons:=ボタンの種類, Title:=”タイトル”)

Prompt以外の引数は省略可
メッセージを表示するだけ(戻り値不使用)の場合は括弧を外す
(例)MsgBox “表示する文字”

インプットボックスの出力(InputBox関数) InputBox(Prompt:=”表示する文字”, Title:=”タイトル”, Default:=”初期表示の文字”) Prompt以外の引数は省略可

条件分岐

操作項目 VBA 備考
条件による処理が1つの場合
(If文)
If 条件式 Then
    ~条件が成立したときの処理~
End If
 
条件による処理が2つの場合
(If~Else文)
If 条件式 Then
    ~条件が成立したときの処理~
Else
    ~条件が成立しなかったときの処理~
End If
 
条件による処理が複数の場合
(If~Else If~Else文)
If 条件式1 Then
    ~条件式1が成立したときの処理~
Else If 条件式2
    ~条件式1が成立せず、条件式2が成立したときの処理~
Else
    ~どの条件も成立しなかったときの処理~
End If
 
条件が多い場合
(Select Case文)
Select Case 変数
    Case 1
        ~変数=1のときの処理~
    Case 2
        ~変数=2のときの処理~
    Case Else
        ~変数が上記以外のときの処理~
End Select
 

繰り返し処理

操作項目 VBA 備考
基本の繰り返し
(For~Next文)
For カウンター変数 = 初期値 to 終値
    ~繰り返す処理~
Next カウンター変数
終値の後に [Step 増分] を記述すると、カウンター変数の増分を指定できる
コレクションや配列の繰り返し
(For Each~Next文)
For Each 要素 In コレクションまたは配列
    ~繰り返す処理~
Next 要素
 
For文の繰り返し処理から抜ける Exit For  
条件が成立している間繰り返し
(Do~Loop文)
Do While 条件式
    ~条件が成立している間実行する処理~
    Exit Do
Loop
 
Do文の繰り返し処理から抜ける Exit Do  
条件が成立するまで繰り返し
(Do Until~Loop文)
Do Until 条件式
    ~条件が成立するまで実行する処理~
Loop
 

セルの情報

操作項目 VBA 備考
Rangeオブジェクトの取得(単一) Range(“セル番地”) セル番地:(例)A1
Cells(行番号,列番号) 列番号は数字でもアルファベットでも可 (例)B1セル →Cells(1,2)またはCells(1,”B”)
Rangeオブジェクトの取得(複数) Range(“セル番地1 , セル番地2”)  
Rangeオブジェクトの取得(範囲) Range(“セル番地1 : セル番地2”)  
Range(Cells(行番号,列番号) , Cells(行番号,列番号))  
行範囲の取得 Range(“行番号 : 行番号”)  
列範囲の取得 Range(“列番号 : 列番号”) 列番号はアルファベット
セルの値を取得 Rangeオブジェクト.Value  
セルの値を設定 Rangeオブジェクト.Value = 値  
指定セルが含まれる行の取得 Rangeオブジェクト.EntireRow  
指定セルが含まれる列の取得 Rangeオブジェクト.EntireColumn  
アクティブな表を取得 Rangeオブジェクト.CurrentRegion  
最終行の取得(空白セルがない場合) Rangeオブジェクト.End(xlDown).Row Ctrl+↓の操作
最終行の取得(空白セルがある場合) Cells(Rows.Count, 1).End(xlUp).Row シートの最終行からCtrl+↑の操作
最終列の取得(空白セルがない場合) Rangeオブジェクト.End(xlToRight).Column Ctrl+→の操作
最終列の取得(空白セルある場合) Cells(1, Columns.Count).End(xlToLeft).Column シートの最終列からCtrl+左の操作
使用済み最終セルの取得 Rangeオブジェクト.SpecialCells(xlLastCell)  
セルロックを設定 Rangeオブジェクト.Locked = True  
セルロックの解除 Rangeオブジェクト.Locked = False  

セルの操作

操作項目 VBA 備考
セルの選択 Rangeオブジェクト.Select 先頭のセルがアクティブになる
セルの内容を別のセルに移動 Rangeオブジェクト.Cut Range(“貼り付け先の先頭のセル番地”) 貼り付け先のRangeを省略した場合はクリップボードに格納
セルの内容を別のセルにコピー Rangeオブジェクト.Copy Range(“貼り付け先の先頭のセル番地”) 貼り付け先のRangeを省略した場合はクリップボードに格納
セルの削除(左にシフト) Rangeオブジェクト.Delete Shift:=xlShiftToLeft  
セルの削除(上にシフト) Rangeオブジェクト.Delete Shift:=xlShiftUp  
セルの挿入(右にシフト) Rangeオブジェクト.Insert Shift:=xlShiftToRight  
セルの挿入(下にシフト) Rangeオブジェクト.Insert Shift:=xlShiftDown  
セルの結合 Rangeオブジェクト.Merge Rangeオブジェクトにはセル範囲を指定
セルの結合を解除 Rangeオブジェクト.UnMerge  
セルをアクティブにする Rangeオブジェクト.Active  
セルのクリア(全体) Rangeオブジェクト.Clear  
セルのクリア(数式と文字) Rangeオブジェクト.ClearContents  
セルのクリア(書式) Rangeオブジェクト.ClearFormats  
検索 Rangeオブジェクト.Find(What:=検索値, _
                                  After:=検索範囲の手前のセル
                                  LookIn:=検索対象, _
                                  LookAt:=一致条件)
What以外の引数は省略可
ワークシート関数を使用した検索のほうが処理は早い
LookIn:数式→xlFormulas、値→xlValues、コメント→xlComments
LookAt:完全一致→xlWhole、部分一致→xlPart
検索の継続 Rangeオブジェクト.FindNext(After:=検索範囲の手前のセル) 引数は省略可
並べ替え Rangeオブジェクト.Sort Key1:=1番目に並べ替えの基準とするフィールド, Order:=並び順, _
                                  Key2:=2番目に並べ替えの基準とするフィールド, Order:=並び順, _
                                  Header:=見出しの有無
Order:昇順(規定値)→xlAscending、降順→xlDescending
Header:見出しなし(規定値)→xlNo、見出しあり→xlYes、Excelが判定→xGuess
行高や列幅を自動調整 Rangeオブジェクト.AutoFit  

行の操作

操作項目 VBA 備考
行の取得(単一) オブジェクト.Rows(行番号) オブジェクトは省略可。その場合はアクティブシートが対象となる
行の取得(範囲) オブジェクト.Rows(“行番号:行番号”)  
行の削除 オブジェクト.Rows(行番号)Delete  
行の挿入 オブジェクト.Rows(行番号).Insert  
シートの行数の取得 オブジェクト.Rows.Count  
行の高さを変更 オブジェクト.Rows(行番号).RowHeight = 数値  

列の操作

操作項目VBA備考
列の取得(単一)オブジェクト.Columns(列番号)オブジェクトは省略可。その場合はアクティブシートが対象となる
列の取得(範囲)オブジェクト.Columns(“列番号:列番号”)列番号は数字でもアルファベットでも可
列の削除オブジェクト.Columns(列番号).Delete 
列の挿入オブジェクト.Columns(列番号).Insert 
シートの列数の取得オブジェクト.Columns.Count 
列の幅を変更オブジェクト.Columns(列番号).ColumnWidth = 数値 

ワークシートの操作

操作項目 VBA 備考
シートをアクティブにする Worksheetsコレクション.Activate  
アクティブなシート ActiveSheet  
シートのグループ化 Worksheets(Array(“Sheet1”, “Sheet2”, “Sheet3”)).Select  
シートの追加(後方) Worksheets.Add After:=どのシートの後ろに追加するかを指定, Count:=追加するシートの数 引数を省略すると、アクティブシートの前に新しいシートが挿入される
AfterをBeforeに変更すると、前方に挿入できる
シートの移動(後方) Worksheetsコレクション.Move After:=どのシートの後ろに移動するかを指定 引数を省略すると、シートは新しいブックに移動される
AfterをBeforeに変更すると、前方に移動できる
シートのコピー(後方) Worksheetsコレクション.Copy After:=どのシートの後ろにコピーするかを指定 引数を省略すると、シートは新しいブックにコピーされる
AfterをBeforeに変更すると、前方にコピーできる
シートの削除 Worksheetsコレクション.Delete  
シート名の取得 Worksheetsコレクション.Name  
シート名の変更 Worksheetsコレクション.Name = “シート名”  
シートの保護 ActiveSheet.Protect Password:=”パスワード”, UserInterfaceOnly:=True 引数は省略可
UserInterfaceOnly:Trueを設定すると、マクロからの変更は許可される
シートの保護を解除 Worksheetsコレクション.Unprotect  

ワークブックの操作

操作項目VBA備考
ブックをアクティブにするWorkbooksコレクション.Activate 
ブックを開くWorkbooks.Open FileName:=絶対パス付Excelのファイル名 
ブックを閉じるWorkbooksコレクション.Close 
ブックの追加Workbooks.Add 
実行したマクロが組み込まれているブックThisWorkbook 
ブックの保存Workbookオブジェクト.Save 
ブックを名前を付けて保存Workbookオブジェクト.SaveAs FileName:=パス付ファイル名 

Applicationオブジェクトを使用した操作

操作項目 VBA 備考
検索(ワークシート関数を使用) Application.WorksheetFunction.Countif(範囲,検索条件)  
Application.WorksheetFunction.VLookup(検査値, 範囲, 列番号, 検索方法)  
Application.WorksheetFunction.Match(検査値, 範囲, 照合の種類)  
画面表示の更新を制御 Application.ScreenUpdating = False マクロの実行中に画面表示の更新を止めて、マクロを高速に処理することができるので推奨
画面表示の更新を許可 Application.ScreenUpdating = True マクロが終了すると自動的に画面表示が更新されるが、マクロの最後に明示的に記述するほうが好まれる
特定の警告やメッセージを制御 Application.DisplayAlerts = False Excelの仕様で出力されるメッセージを表示させたくない場合に使用
特定の警告やメッセージを許可 Application.DisplayAlerts = True  
イベントの検知を制御 Application.EnableEvents = False マクロ高速化のため、マクロ実行中はこの設定を推奨
イベントの検知を許可 Application.EnableEvents = True  
計算方法を手動に設定 Application.Calculation = xlCalculationManual マクロ高速化のため、マクロ実行中はこの設定を推奨
計算方法を自動に設定 Application.Calculation = xlCalculationAutomatic  
ファイルを開くダイアログの出力 Application.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)  
ファイルダイアログ Application.FileDialog(fileDialogType) 様々なプロパティやメソッドがあるので便利
タイトルとURLをコピーしました