セル操作
EXCEL VBAでのセル操作で、よく使うものチートシート。
使用環境
・Windows11
・EXCEL 2019
選択
ThisWorkbook.Worksheets("[シート名]").Cells(1, 1).Select
VBAセルを選択する場合、シートがアクティブ状態にないとエラーになるので注意。
指定する座標は、列番号、行番号、の順。
アクティブセル取得
Dim cell As Range
Set cell = ActiveCell
VBAアクティブセル移動
セル自体を移動するのではなく、選択しているカーソルの移動。
ActiveCell.Offset(1, 0).Activate
VBA指定は列方向の移動、行方向の移動の順に指定。
列では上(負数)~下(正数)の移動列数を指定。
行では左(負数)~右(正数)の移動行数を指定。
指定セル取得
Dim cell As Range
Set cell = ThisWorkbook.Worksheets("シート名").Cells(1, 1)
VBAオブジェクトとして取得する場合はRangeになる。
値取得
Dim val As Variant
' 値を取得(通過は通貨型、日付型は日付型で取得)
val = ThisWorkbook.Worksheets("シート名").Cells(1, 1).Value
' 値を取得(通貨型、日付型は倍精度浮動小数点型として取得)
val = ThisWorkbook.Worksheets("シート名").Cells(1, 1).Value2
' 表示される内容を文字列型で取得(書式適用有)
val = ThisWorkbook.Worksheets("シート名").Cells(1, 1).Text
VBA書式を適用したい場合は、Textで文字列型として取得するの1択。
Value、Value2は値の内容によって取得される型が異なるので注意が必要。
ValueとValue2の差異は、通貨、日付情報を専用の型で取得するのか、倍精度浮動小数点型で取得するのか、の違い。
値設定
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Value = "sample"
VBA計算式取得
Dim val As Variant
val = ThisWorkbook.Worksheets("シート名").Cells(1, 1).Formula
VBAセルの入力内容が式ではなく値であった場合、値(書式適用なし)が文字列で取得される。
計算式設定
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Value = "=1+1"
VBAフォント、文字サイズ設定
With ThisWorkbook.Worksheets("シート名").Cells(1, 1).Font
.name = "Yu Gothic"
.Size = 11
End With
VBA縦横表示位置指定
With ThisWorkbook.Worksheets("シート名").Cells(1, 1)
.VerticalAlignment = xlCenter
.HorizontalAlignment = xlGeneral
End With
VBA縦位置はVerticalAlignmentで指定する。
上(xlTop)、中央(xlCenter)、下(xlBottom)。
横位置はHorizontalAlignmentで指定する。
指定なし(xlGeneral)、左(xlLeft)、中央(xlCenter)、右(xlRight)。
文字色設定
' ThemeColor(1~10)で指定する
' TintAndShadeは -1~1の範囲で指定。中間色は0。
' UIでの色選択時の値は上から、0、0.8、0.6、0.4、-0.25、-0.5
With ThisWorkbook.Worksheets("シート名").Cells(1, 1).Font
.ThemeColor = 2
.TintAndShade = 0.8
End With
' ColorパレットのIndex(1~56)で指定する
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Font.ColorIndex = 3
' RGBで指定する
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Font.Color = RGB(255, 0, 0)
VBAThemeColor、ColorIndex、Color、いずれも指定するとTintAndShadeは0に戻る。
そのため、TintAndShadeで明るさ調整する場合はその後で指定する必要がある。
セル内のテキストの一部のみ色を付ける場合は以下のように指定する。
' セル全体の色指定
With ThisWorkbook.Worksheets("シート名").Cells(1, 1).Font
.ThemeColor = 5
.TintAndShade = 0.25
End With
' 部分色指定
With ThisWorkbook.Worksheets("シート名").Cells(1, 1).Characters(Start:=3, Length:=2).Font
.ThemeColor = 4
.TintAndShade = 0
End With
VBA部分的な指定は、VBAで値を書き変えるとリセットされるので注意。
背景色設定
' ThemeColor(1~10)で指定する
' TintAndShadeは -1~1の範囲で指定。中間色は0。
' UIでの色選択時の値は上から、0、0.8、0.6、0.4、-0.25、-0.5
With ThisWorkbook.Worksheets("シート名").Cells(1, 1).Interior
.ThemeColor = 4
.TintAndShade = 0.25
End With
' ColorパレットのIndex(1~56)で指定する
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Interior.ColorIndex = 3
' RGBで指定する
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Interior.Color = RGB(255, 0, 0)
VBA基本的には上記のいずれかで良い。
ただ、パターンが指定されている場合はこれだけではパターンが外れないので、以下を追加する。
With ThisWorkbook.Worksheets("シート名").Cells(1, 1).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.PatternTintAndShade = 0
End With
VBA表示形式設定
' 標準に戻す
ThisWorkbook.Worksheets("シート名").Cells(1, 1).NumberFormatLocal = "G/標準"
' 数値
ThisWorkbook.Worksheets("シート名").Cells(1, 1).NumberFormatLocal = "0_ "
' 文字列
ThisWorkbook.Worksheets("シート名").Cells(1, 1).NumberFormatLocal = "@"
' 通貨
ThisWorkbook.Worksheets("シート名").Cells(1, 1).NumberFormatLocal = "\#,##0;\-#,##0"
' 日付
ThisWorkbook.Worksheets("シート名").Cells(1, 1).NumberFormatLocal = "yyyy/m/d"
VBA上記は一例。
設定値はUIからの書式指定のユーザー定義の設定内容を指定する形になるので、UIから設定値を作ってそれをコピー&ペーストするのが分かりやすい。
太字、斜体、下線、取り消し線
' 太字 設定/解除
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Font.Bold = True
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Font.Bold = False
' 斜体 設定/解除
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Font.Italic = True
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Font.Italic = False
' 下線、二重下線 設定/解除
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Font.Underline = xlUnderlineStyleSingle
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Font.Underline = xlUnderlineStyleDouble
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Font.Underline = xlUnderlineStyleNone
' 取り消し線 設定/解除
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Font.Strikethrough = True
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Font.Strikethrough = False
VBAセル内のテキストの一部のみ設定/解除する場合は以下のように指定する。
' 太字 設定
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Characters(Start:=2, Length:=2).Font.FontStyle = "太字"
' 斜体 設定
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Characters(Start:=2, Length:=2).Font.FontStyle = "斜体"
' 太字+斜体 設定
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Characters(Start:=2, Length:=2).Font.FontStyle = "太字 斜体"
' 下線、二重下線 設定
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Characters(Start:=3, Length:=2).Font.Underline = xlUnderlineStyleSingle
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Characters(Start:=3, Length:=2).Font.Underline = xlUnderlineStyleDouble
' 取り消し線 設定
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Characters(Start:=2, Length:=2).Font.Strikethrough = True
' 太字/斜体 解除
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Characters(Start:=2, Length:=2).Font.FontStyle = "標準"
' 下線、二重下線 解除
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Characters(Start:=3, Length:=2).Font.Underline = xlUnderlineStyleNone
' 取り消し線 解除
ThisWorkbook.Worksheets("シート名").Cells(1, 1).Characters(Start:=2, Length:=2).Font.Strikethrough = False
VBA部分的な指定は、VBAで値を書き変えるとリセットされるので注意。
罫線
Dim cell As Range
Set cell = ThisWorkbook.Worksheets("シート名").Cells(1, 1)
' 上に実線を引く
With cell.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
.TintAndShade = 0
End With
VBABordersの引数で対象の罫線を指定する。
上(xlEdgeTop)、下(xlEdgeBottom)、左(xlEdgeLeft)、右(xlEdgeRight)。
左上から右下への斜線(xlDiagonalDown)、左下から右上への斜線(xlDiagonalUp)。
LineStyleのパラメータで、線の種類を指定する。
なし(xlNone)、実線(xlContinuous)、破線(xlDash)、点線(xlDot)、など。
Weightのパラメータで、線の太さを指定する。
極細(xlHairline)、細(xlThin)、中(xlMedium)、太(xlThick)。
色は前述の文字色などと同様で、ColorIndex、ThemeColor、ColorとTintAndShadeで指定する。
書式等のリセット
ThisWorkbook.Worksheets("シート名").Cells(1, 1).ClearFormats
VBAフォント、文字サイズ、書式、太字、斜体、下線、文字色、背景色、罫線など一通りがリセットされる。
ただし、セル内のテキストの一部を太字や斜体、文字色などを設定している場合は、そこは解除されないので注意が必要。
複製
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("シート名")
ws.Cells(1, 1).Copy ws.Cells(2, 2)
VBACopyメソッドを使うとクリップボードの内容が書き換わるので注意。
高さ 取得/設定
' 高さ取得
Dim height As Double
height = ThisWorkbook.Worksheets("シート名").Cells(1, 1).rowHeight
' 高さ設定
ThisWorkbook.Worksheets("シート名").Cells(1, 1).rowHeight = 40
VBA事実上、行の高さ取得と設定になる。
横幅 取得/設定
' 横幅取得
Dim width As Double
width = ThisWorkbook.Worksheets("シート名").Cells(1, 1).ColumnWidth
' 横幅設定
ThisWorkbook.Worksheets("シート名").Cells(1, 1).ColumnWidth = 40
VBA事実上、列の横幅取得と設定になる。
位置取得
ThisWorkbook.Worksheets("シート名").Cells(5, 5).Select
' 行番号取得
Dim row As Long
row = ActiveCell.row
' 列番号取得
Dim column As Long
column = ActiveCell.column
VBA