Contents
基本構文
操作項目 | 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 配列名(開始インデックス 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以外の引数は省略可 |
インプットボックスの出力(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) | 様々なプロパティやメソッドがあるので便利 |