【初級編】VBAチートシート

この記事の所要時間: 1440

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

 

日本で一番簡単にビットコインが買える取引所 coincheck bitcoin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA