VBAノウハウ整理

VBA

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 ユーザーのために書かれています。

コメント

タイトルとURLをコピーしました