この記事の所要時間: 約 14分40秒
ページコンテンツ
VBAチートシート
VBAを業務で使うことがあったため、アウトプットとして本記事を作成しています。
始めてツールを作るのに戸惑ったところもあり、これから始める方の参考にしていただければ幸いです。
VBA基礎
コメント
'コメントしたい場合は、先頭に「'」を付けるとできるよ
変数宣言&代入
'変数宣言
Dim testWord As String
'「HelloWorld」を代入
testWord = "HelloWorld"
定数
'定数宣言
Const myName As String = "Tanaka Taro"
メッセージ表示
'変数宣言
Dim testWord As String
testWord = "HelloWorld"
'メッセージを表示
MsgBox testWord
型
'整数を扱う時(Integerは扱える整数の範囲が狭い)
Dim a As Long
'True, Falseを返す時
Dim b As Boolean
'文字列を扱う時
Dim c As String
'日付を扱う時
Dim d As Date
'オブジェクトを扱う時
Dim e As Object
'全てのデータを扱う時(配列等)
Dim f As Variant
'オブジェクトを複数扱う時
Dim g As New Collection
'ワークブックを扱う時
Dim wb As Workbook
'ワークシートを扱う時
Dim st As WorkSheet
頻度の高い型を列挙してみました。
型の種類は色々とあるので、都度覚えていきましょう。
算術演算子
'結果:2(和)
a = 1 + 1
'結果:1(差)
b = 2 - 1
'結果:2(積)
c = a * b
'結果:2(商)
d = 4 / 2
'結果:8(べき乗)
e = 2^3
'結果:3(商の整数)
f = 7 ¥ 2
'結果:4(商の余り)
g = 9 Mod 5
比較演算子
'2より大きい
n > 2
'2より小さい
n < 2
'3以上
n >= 3
'3以下
n <= n
'等しい
n = 4
'等しくない
n <> 2
'県を含む(条件に合うならTrueを返す)
"沖縄県" Like "*県"
'比較(左右で同じオブジェクトを参照しているならTrueを返す)
a Is b
Likeに使う条件は、以下となります。
・* 使用例:*sample*(sampleが含まれる文字列)
・? 使用例:an?(anが含まれる3文字の文字列)
・[ ] 使用例:[ABC](A, B, Cのいずれかを含む1文字)
・[!] 使用例:[!ABC](A, B, C以外の1文字)
・[-] 使用例:[1-9](1~9までの範囲の1文字)
論理演算子
'aかつbである場合
a = 1 And b = 2
'aまたはbの場合
a = 1 Or b = 2
'aじゃない場合
Not a = 2
'aとbのどちらの条件も満たす時、またはaとbのどちらの条件も満たさない場合
a = 1 Eqv b= 2
'片方の条件を満たす場合
a = 1 Xor b = 2
フォーマット
'現在の日時をyyyymmdd型にする
Dim Date As String
Date = Format(now, "yyyymmdd")
条件分岐(If文)
If文
Dim a As Long, b As Long, c As Long
Dim judgeFlg As Boolean
a = 3
b = 4
c = 5
judgeFlg = False
'If文の基本
If (a^2 + b^2) = c^2 Then
judgeFlg = True
End If
'条件に一致する場合と、それ以外の時の処理(Else)
If a = b Then
judgeFlg = True
MsgBox "二等辺三角形です"
Else
MsgBox "二等辺三角形ではありません"
End If
'複数の条件(ElseIf)
If a = b Then
judgeFlg = True
MsgBox "二等辺三角形です"
ElseIf a = b = c Then
judgeFlg = True
MsgBox "正三角形です"
ElseIf (a^2 + b^2) = c^2 Then
judgeFlg = True
MsgBox "直角三角形です"
Else
MsgBox "どの定理にも当てはまりません"
End If
繰り返し処理
For文
Dim a As Long, b As Long
a = 1
b = 7
Dim i As Long, j As Long
i = 3
j = 4
'繰り返しの基本
For i = a To b
Cells(i, 2) = j
i = i + 1
j = j + 1
Next i
'条件を満たしたら直ぐにFor文を抜ける
Dim k As Long
For k = a To b
If Cells(k, 2) <> "" Then
Exit For
End If
Next k
Dim c As Long, d As Long, value As Long
Dim l As Long, m As Long
c = 9
d = 9
'繰り返しの入れ子
For l = c To d
For m = c To d
value = l * m
MsgBox "式:" & l & " × " & m & "の答えは" & value & "です。"
Next m
Next l
While文
Dim i As Long
Dim a As Long
Dim value As Long
a = 1
'While文の基本
Do While i >= 10
value = i + a
'インクリメント
i = i + 1
Loop
繰り返す数が明確に決まっていれば、For文を使いましょう。
どの程度繰り返すか不明な場合は、While文を使いましょう。
While文の最後はインクリメントする処理を忘れないようにしましょう。
数万回行う繰り返し処理では、性能に関わるので判定などの処理は極力避けましょう。
プロシージャ
Sub
Sub test ()
'この中に処理を記載していくよ
End Sub
Function
Sub test ()
Dim a As Long, b As Long, sum As Long
a = 1
b = 2
'引数が1つだとCallが無くても呼び出せるよ
sample1(a)
'引数が2つ以上で、Callを使わないと「コンパイルエラー 修正候補=」になるよ
sum = Call sample2(a, b)
End Sub
Function sample1 (ByVal a As String)
a = a + 1
End Function
Function sample2 (ByVal a As String, ByVal b As String)
'プロシージャ名を変数とすると、戻り値になるよ
sample2 = a + b
End Function
Subは値を返しませんが、Functionは値を返します(戻り値がある)。
Functionの場合、引数が2つ以上ある時にCallで呼び出さないとコンパイルエラーとなります。
ブック(Excelファイル)の操作
Excelファイルを操作するには、まずブック(Workbook)と呼ばれるファイル全体と、シート(Sheet)の扱いを覚える必要があります。
Workbook
'現在開いているExcelファイル
ActiveWorkbook
'マクロを実行しているExcelファイル
ThisWorkbook
'ファイル名を指定して操作する
Workbook("ファイル名")
ブック(Excelファイル)を開く
'フルパスでファイルを指定して開く
Workbook.Open "C:\Book1.xlsx"
'変数でファイルを指定
Dim path As String
Dim fileName As String
path = "C:\excel\"
fileName = "Book.xlsx"
'変数を使ってファイルを開く
Workbook.Open path & fileName
'読み取り専用で開く(UpdateLinks:= 0で外部リンクの更新をしない)
Workbook.Open(FileName:= "C:\Book1.xlsx", UpdateLinks:= 0, ReadOnly:= True)
ブックの存在を確認
'対象のファイルがあれば開いて、なければメッセージを出して処理を終了
If Dir("C:\excel\Book.xlsx") <> "" Then
Workbook.Open "C:\excel\Book.xlsx"
Else
MsgBox "対象のファイルが見つかりません"
Exit Sub
End If
ブック名を取得する
Dim wbName As String
'現在開いているExcelファイルの名前を取得する
wbName = ActiveWorkbook.Name
同名のブックが開かれているか確認する
Dim wb As Workbook
For Each wb In Workbook
If wb.Name = "Book.xlsx" Then
MsgBox "ファイルが既に開かれています"
Exit Sub
End If
Next wb
Workbook.Open "C:\excel\Book.xlsx"
ブックの保存
Dim wb As Workbook
Set wb = ActiveWorkbook
'上書き保存
wb.Save
'名前を付けて保存する(ファイル名のみ必須)
wb.SaveAs("フルパス", FileFormat:= xlExcel8)
ブックを閉じる
Dim wb As Workbook
Set wb = ActiveWorkbook
'保存しないで閉じる
wb.Close(False)
'保存して閉じる
wb.Colse(True)
新しいブックを作成
Dim nb As Workbook
'新規のブックを作成
Set nb = Workbook.Add
シートの操作
シート名を取得する
Dim wsName As String
'現在開いているブックのシート名を取得する
wsName = ActiveWorkbook.ActiveSheet.Name
シートのインデックス番号を取得する
'Sheet1のインデックス番号を取得する
Dim i As Long
i = ThisWorkbook.Worksheets("Sheet1").Index
シート名の変更
'一番左(インデックス番号1)の最初のシートをサンプル1というシート名に変更
ActiveWorkbook.Worksheets(1).Name = "サンプル1"
シートの数を数える
Dim sheetsCount As Long
sheetsCount = ActiveWorkbook.Worksheets.Count
レンジ(Range)
範囲の指定
'A2からAの最終行まで範囲を指定
ActiveWorkbook.ActiveSheet.Range("A2:A")
'セルで指定(A1からJ50まで)
ActiveWorkbook.Worksheets(2).Range(Cells(1, 1), Cells(50, 10))
Rangeの指定に変数を使用すると処理が遅くなるので、繰り返し処理、範囲が変わりやすいなど理由がない場合は、べた書きしてしまいましょう。
Rangeの行番号を知る
Dim rowIndex As Long
rowIndex = ActiveWorkbook.ActiveSheet.Range("A2").Row
Rangeの列番号を知る
Dim columnIndex As Long
columnIndex = ActiveWorkbook.ActiveSheet.Range("A2").Column
Rangeを指定して値を削除
'指定の範囲の数式、文字、コメント、書式を全てクリアする
ActiveSheet.Range(A2:BE200).Clear
'指定の範囲の数式と文字をクリアする
ActiveSheet.Range(A2:BE200).ClearContens
Rangeを指定してコピー&ペースト
Dim wb As Workbook
Set wb = ActiveWorkbook
Dim nb As Workbook
Dim ns As Worksheet
Set nb = Workbook.Add
Set ns = ActiveWorkbook.ActiveSheet
'指定範囲をコピー
wb.ActiveSheet.Range(A2:A).Copy
'値のみをペースト
nb.ActiveSheet.Range("B2").PasteSpecial Paste:= xlPasteValues
'書式のみをペースト
nb.ActiveSheet.Range("B2").PasteSpecial Paste:= xlPasteFormats
'左辺がコピー先、右辺がコピー元
ns.Range(A2:A) = wb.Worksheets(2).Range(A2:A)
セル(Cells)
セルの指定
'行と列を整数で指定(C2を指す)
ActiveWorkbook.ActiveSheet.Cells(2, 3)
'文字列で指定(A6を指す)
ActiveWorkbook.ActiveSheet.Cells(6, "A")
セルに文字を入れる
'B2に「HelloWorld」と記入
Cells.(2, 2) = "HellWorld"
セルの値を取得する
'B2の値を取得する
Dim returnWord As String
returnWord = ActiveSheet.Cells(2, 2)
セルの値を削除する
'Rangeと使い方は同じ
Cells(2, 2).Clear
Cells(2, 2).ClearContens