表示形式を確認する方法
表示形式を確認するには、NumberFormatとNumberFormatLocalの2つのプロパティを活用します。
NumberFormatとNumberFormatLocalの違い
VBAで表示形式を確認する場合、NumberFormatとNumberFormatLocalの2つのプロパティが使用できますが、両者には以下のような違いがあります。
- NumberFormatプロパティは、セルに設定された数値フォーマットの書式を返します。例えば、セルが “yyyy/mm/dd” の場合、NumberFormatプロパティは “yyyy/mm/dd” を返します。
- NumberFormatLocalプロパティは、現在のシステム設定に従って、セルに設定された数値フォーマットのローカル書式を返します。例えば、セルが “yyyy/mm/dd” の場合でも、Windowsのローカル設定が日本語の場合、NumberFormatLocalプロパティは “yyyy年mm月dd日” を返します。
つまり、NumberFormatプロパティは常に英語の書式を返すのに対し、NumberFormatLocalプロパティはシステムのローカル設定に従った書式を返します。そのため、NumberFormatLocalプロパティを使用すると、ユーザーの設定に合わせた表示形式を取得することができます。
- NumberFormat:Generalが返される
- NumberFormatLocal:G/標準が返される
⇒NumberFormatとNumberFormatLocalは書式の設定方法が異なる
TypeName関数とは
VBAのTypeName関数は、渡されたオブジェクトのデータ型を文字列として返す関数です。
具体的には、以下のように使用します。
Dim var As Variant
var = "Hello"
MsgBox TypeName(var) ' "String" と表示される
この場合、変数varには文字列が代入されています。TypeName関数にvarを渡すと、”String”という文字列が返されます。
TypeName関数は、渡されたオブジェクトのデータ型を判定するために使われます。これにより、変数に格納された値の型に応じた処理を行うことができます。例えば、数値型の変数に対して数値演算を行うか、文字列型の変数に対して文字列処理を行うかを、TypeName関数を使って判断することができます。
TypeName関数の構文
TypeName 関数:指定した変数の型名を返す
*Variant や Object 型に設定されている型を調べたいときに使用
⇒戻り値:StringやNullなど
⇒配列を指定すると型の後ろに()を付ける 例)Integer()
Range("A1") = TypeName(Range("A1").Value)
解説
- 引数「値」の型名 (Integer 型なら Integer) を文字列で返す
- Variant 型や Object 型のときは、それに入っている値の型名を返す
- 引数「値」が配列なら型名()のように、後ろに()を付けて返す
- Variant 型や Object 型の配列、その中に配列が入っている時は、Variant()やObject()を返す
NumberFormatLocal_指定列の表示形式の確認
指定列のセルの表示形式を確認するために、VBAのNumberFormatLocalプロパティを使用することができます。以下は、例として列Aのセルの表示形式を確認するコードです。
Sub CheckNumberFormat()
Dim LastRow As Long
Dim i As Long
' データがある最終行を取得
LastRow = Range("A" & Rows.Count).End(xlUp).Row
' 列Aのセルの表示形式を確認
For i = 1 To LastRow
Debug.Print Range("A" & i).NumberFormatLocal
Next i
End Sub
このコードでは、LastRow変数を使用して、列Aにデータがある最終行を取得しています。その後、Forループを使用して、列Aのセルの表示形式を確認し、Debug.Print文を使用して、結果を出力しています。
例えば、セルが日付形式の場合、出力結果は以下のようになります。
yyyy/mm/dd
yyyy/m/d
mm/dd/yyyy
m/d/yyyy
...
同様に、数値形式の場合は以下のようになります。
0
0.0
0.00
#,##0
#,##0.0
#,##0.00
...
このように、NumberFormatLocalプロパティを使用することで、指定列のセルの表示形式を簡単に確認することができます。
別のエクセルマクロ
Sub 指定列の表示形式の確認()
Dim str As String
Dim LastRow1 As Long
Dim i As Long
LastRow1 = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To LastRow1
str = Range("A" & i).NumberFormatLocal
Range("B" & i) = str
Next
MsgBox "完了"
End Sub
TypeName_該当列の表示形式確認
Sub 該当列の表示形式確認()
Dim i As Long
Dim LastRow1 As Long
LastRow1 = Cells(Rows.Count, 1).End(xlUp).Row
Range("B2").EntireColumn.Insert
For i = 2 To LastRow1
Cells(i, 2).Value = TypeName(Cells(i, 1).Value)
Next
MsgBox "完了"
End Sub
ダイアログを表示して該当列の表示形式確認する方法
このマクロは、ダイアログで選択した列のセルの表示形式を確認するためのものです。
*表対応可能
Sub ダイアログで範囲指定した列の表示形式確認()
'選択セル範囲を受け取る変数を宣言
Dim selectedRange As Range, rng As Range, sng As Range
On Error GoTo myError
'列挿入用_セル選択ダイアログを表示----------------------------------------
Set sng = Application.InputBox("調べる列のセルを選択", Type:=8)
sng.Select
ActiveCell.Offset(0, 1).EntireColumn.Insert
ActiveCell.Offset(0, 1).EntireColumn.Insert
ActiveCell.Offset(0, 1).EntireColumn.Insert
'----------------------------------
'セル選択ダイアログを表示--------------------------
Set selectedRange = Application.InputBox("調べる列のセル範囲を選択してください", Type:=8)
'選択セル範囲に対してループ処理 順番 列→行 左から右へ
For Each rng In selectedRange
rng.Next.Value = rng.NumberFormatLocal
rng.Offset(0, 2).Value = rng.NumberFormat
rng.Offset(0, 3).Value = TypeName(rng)
Next
'----------------------------------
myError:
sng.Select
MsgBox "完了"
End Sub
解説
- 最初に、セル選択ダイアログを表示し、調べる列のセルを選択します。その列の次に3列挿入され、その後に表示形式が格納されます。
- 次に、もう一度セル選択ダイアログが表示され、調べる列のセル範囲を選択します。選択された範囲に対してループ処理を行い、それぞれのセルの表示形式を取得して、隣に表示形式を格納するようになっています。
- 最後に、エラーが発生した場合に、エラーメッセージを表示します。そして、最初に選択した列のセルを選択して、完了のメッセージを表示します。
NumberFormat・NumberFormatLocal_範囲を指定して表示形式確認 *イミディエイトに表記
Sub 範囲を選択して表示形式確認()
Range("B2").EntireColumn.Insert
Dim r As Range
For Each r In Selection
Debug.Print r.NumberFormat
Debug.Print r.NumberFormatLocal
'Cells(r, 3) = r.NumberFormat
Next
MsgBox "完了"
End Sub
セルの表示形式判定
このマクロは、選択されたセル範囲の表示形式を判定し、条件に応じて色を変えます。
Sub セル範囲の表示形式判定()
Range("A2").CurrentRegion.Select
Dim A As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim i As Integer
Dim j As Integer
'範囲指定
A = Selection(1).Row
b = Selection(Selection.Count).Row
c = Selection(1).Column
d = Selection(Selection.Count).Column
Range("A2").CurrentRegion.Select
For i = A To b
For j = c To d
'数式ならば:青色
If Cells(i, j).HasFormula Then
Cells(i, j).Interior.Color = 16764006
'未入力ならば:透明
ElseIf Cells(i, j) = "" Then
Cells(i, j).Interior.Pattern = xlNone
'数値ならば:桃色
ElseIf IsNumeric(Cells(i, j)) = True Then
Cells(i, j).Interior.Color = 16764159
'文字列ならば:緑色
ElseIf VarType(Cells(i, j)) = vbString Then
Cells(i, j).Interior.Color = 10092441
End If
Next j
Next i
MsgBox "完了"
End Sub
解説
- まず、
Range("A2").CurrentRegion.Select
により、選択されたセル範囲がA2から始まっていることを想定して、選択された範囲を選択します。 - 次に、
A
からb
までの各行、c
からd
までの各列についてループを行います。このループを通じて、各セルの表示形式を判定します。 - ループ内の各
If
ステートメントは、セルの内容を検査し、適切な色を割り当てます。Cells(i, j).HasFormula
は、セルに数式がある場合、そのセルを青色にします。Cells(i, j) = ""
は、セルが未入力の場合、セルを透明にします。IsNumeric(Cells(i, j)) = True
は、セルが数値である場合、セルを桃色にします。VarType(Cells(i, j)) = vbString
は、セルが文字列である場合、セルを緑色にします。
- 最後に、マクロは”完了”というメッセージボックスを表示して終了します。
選択したセルが文字列か文字列でないかをメッセージボックスに表示
これは、ユーザーが選択したセルの中身が文字列であるかどうかを判定し、結果をメッセージボックスで表示するエクセルマクロです。
Sub セルを選択してメッセージボックスに文字列かどうかを判定()
'選択セル範囲を受け取る変数を宣言
Dim rng As Range
Set sng = Application.InputBox("調べるセルを選択", Type:=8)
sng.Select
If VarType(ActiveCell.Value) = vbString Then
MsgBox "文字列"
Else
MsgBox "文字列でない"
End If
MsgBox "完了"
End Sub
解説
- まず、
Dim
文を使って変数rng
を宣言します。この変数は、後で選択されたセル範囲を受け取るために使用します。 - 次に、
InputBox
関数を使って、ユーザーにセルを選択するように促します。Type:=8
を指定することで、入力ボックスに選択範囲を指定することができるようになります。選択されたセル範囲は、変数sng
に代入されます。 sng.Select
を使って、選択されたセル範囲をアクティブにし、If
文で選択されたセル範囲の中身が文字列であるかどうかを判定します。VarType
関数を使って、セルの型を取得し、vbString
と比較することで、文字列であるかどうかを判定します。- 最後に、結果をメッセージボックスで表示し、処理が完了したことを示すメッセージボックスを表示します。
コメント