Excelマクロを使用するときによく使う処理のサンプルです。
コピペで使えるようになっているので使ってください。
正規表現でバリデーション
Dim objRegExp As Object
Set objRegExp = CreateObject("VBScript.RegExp")
Dim testStr As String
testStr = "090"
Dim patternStr As String
patternStr = "^[0-9]+"
With objRegExp
.pattern = patternStr
If(.test(testStr) Then
#ここに処理を書く
End If
End With
VBAでSwitch文(Select)
Select Case 変数
Case 値1
変数=値1の場合の処理
Case 値2
変数=値2の場合の処理
Case Else
変数=値1、変数=値2を満たさなかった場合の処理
End Select
VBA 自動計算と再描画
With Application
.Calculation = xlCalculationManual '数式再計算オフ
.ScreenUpdating = False '再描画オフ
End With
With Application
.Calculation = xlCalculationAutomatic '数式再計算オン
.ScreenUpdating = True '再描画オン
End With
ファイル選択ダイアログ
Dim strPath As String ' 選択したファイルのパス
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = "初期パス"
If .Show = True Then
strPath = .SelectedItems(1)
End If
End With
フォルダ選択ダイアログ
Dim strPath As String ' 選択したフォルダのパス
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "初期パス"
If .Show = True Then
strPath = .SelectedItems(1)
End If
End With
最終行の取得
Dim endRow As Long
endRow = targetSheet.Cells(Rows.Count, 1).End(xlUp).Row
オートフィルタの解除
' wbkはWorkbookオブジェクトのインスタンス
If wbk.Worksheets("ワークシートの名前").FilterMode = True Then
wbk.Worksheets("ワークシートの名前").ShowAllData
End If
ワークシート存在チェック関数
Private Function isExistWorkSheet(wbk As Workbook, sheetName As String) As Boolean
Dim ws As Worksheet
isExistWorkSheet = False
For Each ws In wbk.Worksheets
If ws.Name = sheetName Then
isExistWorkSheet = True
Exit For
End If
Next ws
End Function
確認を表示させずシートなどを消す
With Application
.DisplayAlerts = False
'何かの処理
.DisplayAlerts = True
End With
コピーアンドペースト
Dim wbk As Workbook
Dim fromWs As WorkSheet
Dim toWs As WorkSheet
Set wbk = ThisWorkbook
Set fromWs = wbk.Worksheets("コピー元のシート名")
Set toWs = wbk.Worksheets("ペースト先のシート名")
fromWs.Activate '必要かどうかは確認
fromWs.Range("A2:D2).Copy
toWs.Activate
toWs.Range("A1:D9").PasteSpecial Paste:=xlPasteAll 'Paste:=XXXXX ペースト方法の指定
リンクの更新をせずにブックを開く
Workbooks.Open targetBookName, UpdateLinks:=False
Set targetBook = ActiveWorkBook
エラーが出てもとりあえず進める(無視)
On Error Resume Next
'エラーが出そうな処理
Workbooks.Open targetBookName, UpdateLinks:=False
If Err.Number <> 0 Then
MsgBox("エラーが発生しました。")
End If
あるフォルダにあるすべてのファイルに関して処理する
配列を使った値のコピー
Dim myArray
myArray = ws1.Range("A1:Z100")
ws2.Range("A1:Z100") = myArray
'プログラムで汎用的に使うならこの形式
myArray = ws1.Range(ws1.Cells(1,1),ws1.Cells(26,100))
ws2.Range(ws2.Cells(1,1),ws2.Cells(26,100)) = myArray