0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【超個人的】ExcelVBAでよく使うコードまとめ

Posted at

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。

オワオワリです

誰かの参考になれば幸いです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?