更新日:、 作成日:

VBA セルの表示形式を取得する (Range.NumberFormatLocal)

はじめに

Excel VBA マクロでセルの書式設定の表示形式を取得する方法を紹介します。

Range("B1").NumberFormatLocal または Cells(1, 2).NumberFormatLocal プロパティから、セル「B1」の表示形式を取得できます。

表示形式を設定するには「セルに表示形式を設定する」をご覧ください。
セルを範囲指定するすべての方法は「セルを範囲指定して取得する」をご覧ください。

セルの表示形式を取得する

Range の引数にセル名を指定すると、そのセルの書式設定の表示形式を取得できます。

セル「A1」の表示形式を取得するには Range("A1").NumberFormatLocal を入力します。

Dim s As String
s = Range("A1").NumberFormatLocal
Debug.Print(s)

Cells の引数にセルの行と列の番号を指定すると、そのセルの書式設定の表示形式を取得できます。

行「2」、列「A」の表示形式を取得するには Cells(2, 1).NumberFormatLocal を入力します。

Dim s As String
s = Cells(1, 1).NumberFormatLocal ' A1
s = Cells(2, 1).NumberFormatLocal ' A2
s = Cells(1, 2).NumberFormatLocal ' B1
s = Cells(2, 2).NumberFormatLocal ' B2
Debug.Print(s)

表示形式の分類の初期値は次の値になっています。すべて文字列です。

分類名
標準G/標準
数値0_ 
通貨\#,##0;\-#,##0
会計_ * #,##0_ ;_ * -#,##0_ ;_ * "-"_ ;_ @_ 
日付yyyy/m/d
時刻[$-F400]h:mm:ss AM/PM
パーセンテージ0%
分数# ?/?
指数0.E+00
文字列@
その他[<=999]000;[<=9999]000-00;000-0000

セルの範囲の表示形式を取得する

セルの範囲「A1」~「B2」の表示形式を取得するには Range("A1:B2").NumberFormatLocal または Range("A1", "B2").NumberFormatLocal を入力します。

Dim s As String
s = Range("A1:B2").NumberFormatLocal
s = Range("A1", "B2").NumberFormatLocal
Debug.Print(s)

範囲内の各セルの表示形式がすべて同じときだけ値を取得します。違う値が含まれているときは Null になります。

別シートのセルの表示形式を取得する

シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。

Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。

sheet1
Dim s As String
' Sheet1 のセル「A1」の表示形式を取得
s = Worksheets("Sheet1").Range("A1").NumberFormatLocal
s = Worksheets(1).Range("A1").NumberFormatLocal
Debug.Print(s)

' Sheet2 のセル「A1」の表示形式を取得
s = Worksheets("Sheet2").Range("A1").NumberFormatLocal
s = Worksheets(2).Range("A1").NumberFormatLocal
Debug.Print(s)

Sheet1 に Range や Cells を入力すると、自身のシートのセルになります。自身を表す Me. が省略されています。

' どちらも同じコード
Range("A1").Value = "Sheet1"
Me.Range("A1").Value = "Sheet1"

標準モジュールに Range や Cells を入力すると、開いているシートのセルになります。アクティブシートを表す ActiveSheet. が省略されています。

' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"