Excel VBA

アプリケーション

アプリケーション操作

最小化
ActiveWindow.WindowState = xlMinimized

警告メッセージ表示・非表示

シートの削除、ブックの終了時等
Application.DisplayAlerts = False
Application.DisplayAlerts = True

遂次実行

VBA上での画面操作(行削除やテキスト変更等)を実際の画面で反映させる・させないの設定
Application.ScreenUpdating = False
Application.ScreenUpdating = True

Book

ActiveBookパス
ActiveWorkbook.Path

Book操作

新規Book開く
Workbooks.Add
既存Bookを開く
Workbooks.Open ("C:\Time.csv")
Set ObjTime = ActiveWorkbook.Worksheets(1)
保存して閉じる
ActiveWorkbook.Close SaveChanges:=True
Set ObjTime = Nothing
CSV形式で保存
ActiveWorkbook.SaveAs SavePath & "\" & "TEST", Excel.XlFileFormat.xlCSV
TEXT形式で保存
ActiveWorkbook.SaveAs SavePath & "\" & "TEST", Excel.XlFileFormat.xlCurrentPlatformText
ActiveWorkbook.SaveAs SavePath & "\" & "TEST", Excel.XlFileFormat.xlNormal
保存せずに終了
ActiveWorkbook.Close SaveChanges:=False

シート

Sheet情報

シート数
1枚の時:1。0という事はない
ReturnValue = ActiveWorkbook.Sheets.Count
ReturnValue = 1
シート名
ReturnValue = ActiveWorkbook.Worksheets(1).Name
ReturnValue = "Sheet1"

シート操作

新シート追加
ActiveWorkbook.Sheets.Add
全シートを削除
ActiveWorkbook.Sheets.Delete
シートコピー
ActiveSheets.Copy After:=Worksheets(1)
ActiveSheets.Copy Before:=Worksheets(1)
Book間シートコピー
ActiveWorkBook.WorkSheets(1).Copy After:=Workbooks("~").Worksheets(1)
ActiveWorkBook.WorkSheets(1).Move Before:=Workbooks("~").Worksheets(1)

行・列操作

~.Rows(1:1).Copy '行のコピー
~.Rows(1:1).Cut '行の切り取り
~.Columns("A:D").Copy '列のコピー
~.Rows(2:2).Insert '↑内容の貼り付け
先頭行の固定
~.Rows(2:2).Select
~.ActiveWindow.FreezePanes = True
~.Columns("A:D").ColumnWidth = 20 '列幅
~.Rows("2:2").RowHeight = 20 '行高
~.Rows(5).EntireColumn.AutoFit '列幅自動調整
~.Columns(5).EntireRow.AutoFit '行高自動調整

ヘッダー・フッター

With ActiveSheet.PageSetup
 .LeftHeader = Range("A1").Value 'ヘッダー文字
 .CenterHeader = Range("A2").Value
 .RightHeader = Range("A3").Value
 .LeftFooter = Range("A4").Value 'フッター文字
 .CenterFooter = Range("A5").Value
 .RightFooter = Range("A6").Value
End With

抽出

Range("A1:B5000").AdvancedFilter
 Action:=xlFilterCopy, _
 CriteriaRange:=Range("F1:F2"), _ 'CriteriaRange … 検索条件
 CopyToRange:=Range("F4"), _ 'CopyToRange … 検索結果出力先
 Unique:=False

ソート

Cells(1, 1)、Cells(1, 2)順に並び変え
Range("A1:E5").Sort key1:=Cells(1, 1), _ 'キー
 order1:=xlAscending, _ '昇順
 key2:=Cells(1, 2), _
 order2:=xlAscending

フィルタリング

Range("A1:D500").AutoFilter
 Field:=2, _  'フィルタリング対象列番号
 Criteria1:=Array("1","2","3"), _  'Variant型の配列(↓参照)
 Operator:=xlFilterValues
※Dim Test(2) As Integer
Test(0) = 1 : Test(1) = 2 : Test(2) = 3
の時、Array("1","2","3") = Test

重複削除

ActiveSheet.Range("A1:D500").RemoveDuplicates Columns:=1, Header:=xlNo

オートシェイプ

絶対位置を取得。オートシェイプを配置する。
SX = Obj.Cells(2, 2).Left
SY = Obj.Cells(2, 2).Top + Obj.Cells(2, 2).Height / 2
EX = Obj.Cells(2, 5).Left
EY = Obj.Cells(2, 5).Top + Cells(2, 5).Height / 1
Set MyLine = Obj.Shapes.AddLine(SX, SY, EX, EY) '描画

点線の矢印
Obj.Shapes.Range(MyLine.Name).Line.EndArrowheadStyle = msoArrowheadTriangle '矢印に
Obj.Shapes.Range(MyLine.Name).Line.Weight = 0.75 '細さ
Obj.Shapes.Range(MyLine.Name).Line.DashStyle = msoLineDash '点線に

セル

線引き

With Cells(1,1)
 .Borders(xlEdgeTop).LineStyle = xlLineStyleNone '線を消す
 .Borders(xlEdgeTop).LineStyle = xlContinuous '上部に線を引く
 .Borders(xlEdgeBottom).LineStyle = xlContinuous '下部に線を引く
 .Borders(xlEdgeLeft).LineStyle = xlContinuous '左部に線を引く
 .Borders(xlEdgeRight).LineStyle = xlContinuous '右部に線を引く
 .Borders.LineStyle = xlContinuous '格子状に線を引く
 (例) Range(Cells(2,2),Cells(4,4)).Borders.LineStyle = xlContinuous

 .Borders.Weight = xlMedium '周りの線を太線に
 .Borders.Weight = xlThick '周りの線を極太線に

 線引きと色付けをまとめて
 Call .Range("A5").BorderAround(
 LineStyle:=xlContinuous, _
 Weight:=xlThick, _
 Color:=vbRed)
End With

結合

セルを結合する
Cells(1,1).Range(Cells(2,2),Cells(7,2)).Merge
結合しているか否か?
ReturnValue = Cells(1,1).Cells(2,2).MergeCells
ReturnValue = True
選択状態のセルの情報を取得
ReturnValue = Sellection.Row
ReturnValue = 2
(結合されている場合最上位行)
↑の法則を利用して結合セルの内容を取得
ReturnValue = Cells(Sellection.Row,2)
ReturnValue = "Header"

セル操作

選択状態に
Cells(3,2).Select
表の端のセルを参照
ReturnValue = Cells(2, 2).End(xlDown).Row
ReturnValue = 7
xlUp / xlDown / xlToLeft / xlToRight
指定のセルの相対位置のセルを参照
ReturnValue = Cells(2, 2).OffSet(5,0)
ReturnValue = Range("A5").OffSet(5,5)
ReturnValue = 7
Excelの関数を使用
Application.WorksheetFunction.~
Application.WorksheetFunction.SUM()
Application.WorksheetFunction.COUNT

通常方式のセル位置の文字列を取得

ReturnValue = .Cells(2, 2).Address
≠R1C1参照形式
ReturnValue = "$B$2"

書式

With Cells(1,1)
 .NumberFormatLocal = "[h]:mm" 時間設定(9:00)
 .NumberFormatLocal = "hh:mm" '09:00
 .NumberFormatLocal = "@" '文字列

 .VerticalAlignment = xlVAlignCenter 'センター表示
 .HorizontalAlignment = xlHAlignCenter 'センター表示
 .WrapText = True '折り返して全体を表示する
 .Orientation = 0 '方向の角度
 .AddIndent = True '前後にスペースを入れる
 .IndentLevel = 0 'インデントの数値
 .ShrinkToFit = True '縮小して全体を表示する
 .ReadingOrder = xlContext '文字の方向

 .Cells(1,1).Interior.Color = VbRed 背景色

 .Cells(1,1)Font.Size = 5 '文字サイズ
 .Cells(1,1)Font.Bold = True '太字
 .Cells(1,1)Font.Color = VbRed '文字色
End With