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