VBAエディタを開く
ショートカットキー:ExcelからAlt+ F11
メニューボタン:開発>Visual Basic
定数の定義
Const tax As Double = 0.08 '消費税率は8%
変数の定義
- Dim a As Boolean ‘ブール型
- Dim b As String ‘文字列型
- Dim c As Byte ‘バイト型
- Dim c As Integer ‘整数型
- Dim d As Long ‘長整数型
- Dim e As Single ‘単精度浮動小数点型
- Dim f As Double ‘倍精度浮動小数点型
- Dim g(3) As Integer ‘配列
- Dim hiduke As Date ‘日付
- Dim o As Object ‘オブジェクト型
分岐
If…Then End if
Dim age As Integer
age = 18
If age >= 0 And age <= 18 Then
Debug.Print age & "歳はこどもです"
End If
If…Then ElseIf…Then ElseIf…Then EndIf
Dim age As Integer
age = 28
If age >= 0 And age <= 18 Then
Debug.Print age & "歳はこどもです"
ElseIf age >= 19 And age <= 65 Then
Debug.Print age & "歳は大人です"
ElseIf age >= 66 And age <= 100 Then
Debug.Print age & "歳はシニアです"
Else
Debug.Print age & "歳以上の人はセンテナリアンと呼びます"
End If
Select Case
Dim age As Integer
age = 28
Select Case age
Case 0 To 18
Debug.Print age & "歳はこどもです"
Case 19 To 65
Debug.Print age & "歳は大人です"
Case 66 To 100
Debug.Print age & "歳はシニアです"
Case Else
Debug.Print age & "歳以上の人はセンテナリアンと呼びます"
End Select
ループ
For…Next
Sub test()
Dim Index As Integer
For Index = 1 To 10
Debug.Print Index
Next
End Sub
'出力結果
1
2
3
4
5
6
7
8
9
10
While…Wend
While 条件式
処理
Wend
Sub macro1()
Dim i As Integer, str As String
While i < 3
i = i + 1
str = i & "回目の処理です"
Debug.Print str
Wend
End Sub
'出力結果
1回目の処理です
2回目の処理です
3回目の処理です
Do While Loop
Do while 条件式
処理
Loop
Sub macro1()
Dim i As Integer, str As String
Do While i < 3
i = i + 1
str = i & "回目の処理です"
Debug.Print str
Loop
End Sub
'出力結果
1回目の処理です
2回目の処理です
3回目の処理です
Foreach
Dim 変数 As ○○○
For Each 変数 In ○○○s
・・・
Next 変数
Dim ws As Worksheet
For Each ws In Worksheets
ws.PrintPreview
Next ws
Dim i As Integer
For i = 1 To Worksheets.Count
Worksheets(i).PrintPreview
Next i
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Debug.Print ws.Name
Next
Exitでループを抜ける
Sub macro1()
Dim i As Integer, str As String
Do While i < 6
i = i + 1
If i > 3 Then
Exit Do
End If
str = i & "回目の処理です"
Debug.Print str
Loop
End Sub
'出力結果
1回目の処理です
2回目の処理です
3回目の処理です
GoToでループをスキップ
Sub macro1()
Dim i As Integer, str As String
Do While i < 6
LLL:
i = i + 1
If i < 4 Then
GoTo LLL
End If
str = i & "回目の処理です"
Debug.Print str
Loop
End Sub
'出力結果
4回目の処理です
5回目の処理です
6回目の処理です
関数パラメータと戻り値
戻り値=変数
Sub test()
Dim ret As Integer
ret = GET_SOMETHING(5)
Debug.Print "戻り値=" & ret
End Sub
Function GET_SOMETHING(ByVal para As Integer) As Integer
Dim a As Integer
a = para
GET_SOMETHING = a
End Function
'test()の実行結果
戻り値=5
戻り値=配列
Sub test()
Dim para(2) As Integer
Dim ret() As Integer
'Dim ret2 As Variant
para(0) = 1
para(1) = 2
para(2) = 3
ret = GET_SOMETHING(para)
'ret2 = GET_SOMETHING(para)
Debug.Print "戻り値=" & ret(0)
Debug.Print "戻り値=" & ret(1)
Debug.Print "戻り値=" & ret(2)
End Sub
Function GET_SOMETHING(ByRef para() As Integer) As Integer()
Dim a(2) As Integer
Dim index As Integer
index = 0
For Each p In para()
a(index) = p + 10
index = index + 1
Next
GET_SOMETHING = a()
End Function
'出力結果
戻り値=11
戻り値=12
戻り値=13
デバッグ
- F5 実行
- F8 ステップイン
- Shift+F8 ステップオーバー
- Ctrl+Shift+F8 ステップアウト
BookとSheetとCell操作
- Dim wb As Workbook
- Set wb = ActiveWorkbook ’ブックオブジェクトを代入
- wb.Save ’ブックを保存
- wb.Close ’ブックを閉じる
- Dim ws As Worksheet
- Set ws = ActiveSheet
- Application.DisplayAlerts ‘ True, Falseを設定し、警告表示/非表示を制御する
- Range(“F5:N22”)ClearContents ’Range範囲内の内容をクリア
- Dir(path) ’フォルダやファイルのディレクトリチェック
- Workbooks.Open FileName:=FilePathName, UpdateLinks:=False, ReadOnly:=True ‘ファイルを開く
- Sheets(“シート名”).Select ’シート選択
- ActiveSheet.FilterMode ’True, False フィルタ状態をチェック
- ActiveSheet.ShowAllData ’フィルタを開放
- WorksheetFunction.Countifs(Columns(“D”), “<>”) ’条件付きの件数をカウンタ
- WorksheetFunction.Sumifs(Range(“R:R”),”<>”) ’条件付きの合計値を計算
- WorksheetFunction.Sum(Range(“H4:H18”)) ’合計値を計算
- WorksheetFunction.Subtotal() フィルタ結果件数を計算
- Cells(row, column).value ’セルの値
- Range(“F” & rowNum).value ’セルの値
- Workbooks(FileName).Close ’ファイルを閉じる
シート保護解除
With ws
.Unprotect Password:=PW_KEY 'PW_KEYでシート保護解除
.EnableAutoFilter = True '自動フィルタ有効にする、コピー動作にエラーを無くす
End With
With ws
.Protect password:=PW_KEY,AllowFormattingCells:=True,AllowFormattingColumns:=True,AllowFiltering:=True
End With
FilterMode
If ActiveSheet.FilterMode = True Then
ActiveSheet.ShowAllData
End If
Range("A2").AutoFilter Field:=18, Criterial1:="<>"
Range("A2").AutoFilter Field:=20, Criterial1:="=OK"
Office VBA リファレンス
Office Visual Basic for Applications (VBA) リファレンス
この記事の内容は、VBA について学ぶことを希望したり、Office をカスタマイズする作業にプログラミングを役立てる方法について詳しく知ることを望む、経験ある Office ユーザーのために書かれています。
コメント