VBAコード集:超個人的頻出コードまとめ
概要
実際の開発でよく使うVBAコードをまとめました。
異論はあっても傍観してください。
注意点
- シートオブジェクトの指定は省略しています。実際の運用では誤動作防止のため、明示的に指定してください。
- SelectionオブジェクトやSelectメソッドを使用しているため、対象のシートがアクティブである必要があります。
主なカテゴリ
セル・行・列の指定
' 単一セルの指定
Range("A1").Select
Cells(1, "A").Select
Cells(1, 1).Select
' 範囲指定
Range("A1", "C5").Select
Range(Cells(1, 1), Cells(5, 3)).Select
' 行の指定
Rows(1).Select
Rows("1:5").Select
' 列の指定
Columns("A").Select
Columns(1).Select
Columns("A:C").Select
コピー、切り取り、挿入、削除
' 値のみコピー
Range("B1").Value = Range("A1").Value
Range("D1", "F3").Value = Range("A1", "C3").Value
' サイズ自動調整して貼り付け
Dim copyRange As Range
Dim pasteRange As Range
Set copyRange = Sheets("sheet1").Range("A1", "C3")
Set pasteRange = Sheets("sheet2").Range("B1")
pasteRange.Resize(copyRange.Rows.Count, copyRange.Columns.Count).Value = copyRange.Value
' PasteSpecialを使った簡易版
Sheets("sheet1").Range("A1", "C3").Copy
Sheets("sheet2").Range("B1").PasteSpecial xlPasteValues
Application.CutCopyMode = False
' 切り取り
Selection.Cut
' 挿入
Selection.Insert Shift:=xlDown
Selection.Insert Shift:=xlToRight
Rows(3).Insert
Columns("D").Insert
' 削除
Selection.Delete Shift:=xlUp
Selection.Delete Shift:=xlToLeft
Rows(5).Delete
Columns("F").Delete
' 確認メッセージ非表示
Application.DisplayAlerts = False
Range("A2", "K2000").Delete Shift:=xlUp
Application.DisplayAlerts = True
表に対する処理
' フィルター
Range("A1").AutoFilter 3, "=" & "鈴木"
Range("A1").AutoFilter
Range("A1").AutoFilter 1, "=" & "検索文字列"
Range("A1").AutoFilter 1, "<>" & "検索文字列"
Range("A1").AutoFilter 1, "=" & "検索文字列" & "*"
Range("A1").AutoFilter 1, "<>" & "検索文字列" & "*"
Range("A1").AutoFilter 1, "=*" & "検索文字列"
Range("A1").AutoFilter 1, "<>*" & "検索文字列"
Range("A1").AutoFilter 1, ">" & 123
Range("A1").AutoFilter 1, ">=" & 123
Range("A1").AutoFilter 1, "<" & 123
Range("A1").AutoFilter 1, "<=" & 123
Range("A1").AutoFilter 1, ">=" & 123, xlAnd, "<" & 130
Range("A1").AutoFilter 1, ">=" & 130, xlOr, "<" & 123
' 表の選択
Range("A1").CurrentRegion.Select
If WorksheetFunction.Subtotal(3, Columns(Selection.Column)) > 1 Then
Selection.CurrentRegion.Select
Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select
End If
ブック・シートオブジェクト
' ブックオブジェクト
Dim wb As Workbook
Set wb = ThisWorkbook
Set wb = ActiveWorkbook
Set wb = Workbooks.Open("C:\Users\User\Documents\test.xlsx")
' シートオブジェクト
Dim ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet
Set ws = ThisWorkbook.Sheets("sheet1")
Set ws = ThisWorkbook.Sheets(1)
ブックの保存・閉じる
' 保存
ThisWorkbook.Save
ThisWorkbook.SaveAs "保存名"
ThisWorkbook.SaveAs "C:\Users\User\Documents\test.xlsm"
' 強制上書き保存
Application.DisplayAlerts = False
ThisWorkbook.SaveAs "C:\Users\User\Documents\test.xlsm"
Application.DisplayAlerts = True
' 閉じる
ThisWorkbook.Close SaveChanges:=True
ThisWorkbook.Close SaveChanges:=False
ショートコード集
' 最終行・列の取得
Dim LastRow As Long
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
Dim LastCol As Long
LastCol = Cells(1, Columns.Count).End(xlToLeft).Column
' 次のセルを選択
Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Select
Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1).Select
'和暦変換
和暦 = Format(Sheet1.Cells(※, ※), "gggee年m月度")
' フォルダ内のファイルを順に処理
Dim folderPath As String
Dim fso As Object
Dim files As Object
Dim file As Object
Dim wb As Workbook
folderPath = "C:\Users\User\Documents\TestFolder"
Set fso = CreateObject("Scripting.FileSystemObject")
Set files = fso.GetFolder(folderPath).files
For Each file In files
Set wb = Workbooks.Open(file)
' ☆☆☆☆ ここに処理を書く ☆☆☆☆
Next file
' 全シートに処理
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
' ☆☆☆☆ ここに処理を書く ☆☆☆☆
Next
' ピボットテーブル更新
Dim pvt As PivotTable
For Each pvt In ActiveSheet.PivotTables
pvt.PivotCache.Refresh
Next
' A1 → R1C1形式変換
Dim col_A1Format As String
Dim col_R1C1Format As Long
col_A1Format = "C"
col_R1C1Format = Cells(1, col_A1Format).Column
' 確認メッセージ非表示
Application.DisplayAlerts = False
' ☆☆☆☆ ここに処理を書く ☆☆☆☆
Application.DisplayAlerts = True
メッセージでの分岐処理
If MsgBox("Outlookメールを作成しますか?", vbYesNo + vbQuestion, "確認") = vbYes Then
処理内容
Else
MsgBox "処理を中断します。"
End If。
オワオワリです
誰かの参考になれば幸いです。