Excel
ExcelVBA
マクロ

Excel VBA (マクロ) 備忘録

記載目的

  • Excelでの業務はどの案件でも必要となるため、VBA知識があると効率的
  • 基本的なものから応用的な内容へ繋がる記載にしてゆきたい

補足

  • 本当に必要そうなものに限定する
  • 冗長な表現を極力避ける
  • 随時更新する

記載の順番は以下

  • 【基本的な書き方】
  • 【VBAショートカット】 ※WindowsPC
  • 【具体例】
  • 【作成したVBA】

【基本的な書き方】

説明     例        備考
対象.命令 Range("A1").Select
対象.様子 Range("A1").Value = 123
使用する変数の型はこちらのみで良さそう Long(長整数型) / String(文字列型)

【VBAショートカット】 ※WindowsPC

説明     例        備考
入力候補の表示 Ctrl + Space
行の削除 Ctrl + Y
インデントを付ける 2行以上選択して Tab
インデントを戻す Shift + Tab
クイックヒントの表示 Ctrl + I
無限ループ時の強制中断 Ctrl + Pause / Ctrl + Break / Esc 左記いずれか
実行 F5
コード1行ずつ実行 F8

【具体例】

説明     例        備考
セルコピー Range("A1").Copy TARGET
セルA1から連続してデータが入った最下端セルを選択 Range("B2").End(xlDown).Select
アクティブのワークブックのフルパスを取得 ActiveWorkbook.FullName
他のプロシージャを呼べる Call プロシージャ名
文字色 設定 Cell.Font.Color = RGB(255, 255, 255)
背景色 設定 Cell.Interior.Color = RGB(255, 255, 255)
セルが空欄かどうか調べたい Cell.Value = ""
セルを検索 検索範囲.Find
相対的な位置のセルを操作 Cell.Offset(行数, 列数)
選択範囲の大きさを変更する Cell.Resize(行数, 列数)
セルに数式を入力 Cell.Formula Cell.Value
ワークシート関数を使うには WorksheetFunction.関数名(引数)

【作成したVBA】

プロシージャの最初と最後に入れる処理が早くなるらしい ※コピペして使用する

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  .DisplayAlerts = False
  .Calculation = xlCalculationManual
End With


''''''''''''''''''''''''''''''
'                            '
'   ~~ そのほかの処理内容 ~~         '
'                            '
''''''''''''''''''''''''''''''


With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .CutCopyMode = False
  .Calculation = xlCalculationAutomatic
End With

for文の基本的な使い方①

'指定セルから下方向へ1月から12月までを入力する
Dim i As Integer
 For i =1 to 12
  Cells(i, 1) = i & "月"
 Next i

for文の基本的な使い方②

'上記for文 一個飛ばしバージョン
'一個飛ばし
Dim i As Integer
 For i =1 to 12 Step2
  Cells(i, 1) = i & "月"
 Next i

ファイル開くダイアログ扱い方

Sub ファイル開くダイアログ扱い方()

'変数filenameを定義
  Dim filename As String

'Excelファイルに限定してファイルオープンダイアログを表示させる
  filename = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")

'変数filenameに値がなければ、もしくは、それ以外の場合
  If filename  "False" Then
    Workbooks.Open filename
  Else
    MsgBox "キャンセルしました!"
    Exit Sub
  End If

End Sub

PATHからファイルネーム抽出する

Dim filename As String
Dim filename_from_path As String
Dim targetname As String

'PATHからファイルネームのみ抽出
  filename_from_path = InStrRev(filename, "\")
  targetname = Mid(filename, filename_from_path + 1)

該当シートを、あるあるファイルの1番目のシート後ろへコピーする

Dim targetname As String

'ワークブック「targetname」の「コピーするシート」を、ワークブック「作業ファイル」の1つ目のシートの後ろへコピーする
  Workbooks(targetname).Worksheets("コピーするシート").Copy _
  After:=Workbooks("作業ファイル").Sheets(1)