VBAでセルの書式設定(表示形式)

投稿日: 2024年6月8日

Excelでフォントや罫線、表示形式を設定するときに下図のように書式を変更することもVBAでは可能になっています。
書式設定の方法を詳しく説明していきます。

表示形式の設定

VBAを使用してセルの書式設定を変更するには、NumberFormatプロパティを使用します。このプロパティを設定することで、セルの表示形式を変更することができます。

数値の表示形式を変更する
Sub ChangeNumberFormat()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' A1セルの表示形式を数値に設定
    ws.Range("A1").NumberFormat = "0.00"
    
    ' A1セルに数値を入力
    ws.Range("A1").Value = 1234.5678
End Sub
日付の表示形式を変更する
Sub ChangeDateFormat()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' A1セルの表示形式を日付に設定
    ws.Range("A1").NumberFormat = "yyyy/mm/dd"
    
    ' A1セルに日付を入力
    ws.Range("A1").Value = Date
End Sub
通貨の表示形式を変更する
Sub ChangeCurrencyFormat()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' A1セルの表示形式を通貨に設定
    ws.Range("A1").NumberFormat = "$#,##0.00"
    
    ' A1セルに数値を入力
    ws.Range("A1").Value = 1234.5678
End Sub

このコードを実行すると「$」マークで自動で日本円の「¥」マークになります。

パーセンテージの表示形式を変更する
Sub ChangePercentageFormat()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' A1セルの表示形式をパーセンテージに設定
    ws.Range("A1").NumberFormat = "0.00%"
    
    ' A1セルに数値を入力
    ws.Range("A1").Value = 0.1234
End Sub
カスタム表示形式を設定する

カスタム表示形式を使用することもできます。例えば、電話番号の形式や郵便番号の形式などを設定する場合です。

Sub ChangeCustomFormat()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' A1セルの表示形式を電話番号形式に設定
    ws.Range("A1").NumberFormat = "(####) ##-####"
    
    ' A1セルに電話番号を入力
    ws.Range("A1").Value = 1234567890
End Sub

以上の例を参考にして、セルの表示形式を自由に変更することができます。NumberFormatプロパティを使用することで、数値、日付、通貨、パーセンテージ、カスタム形式など、さまざまな表示形式を設定できます。

特定の範囲の表示形式を設定する

特定の範囲を一気に表示形式を設定することも可能です。

Sub SetNumberFormatSpecificRange()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' A1からA10の範囲の表示形式をセット
    ws.Range("A1:A10").NumberFormat = "0.00"
End Sub

Cellsプロパティを使用して範囲を指定することもできます。

Sub SetNumberFormatSpecificRange()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' 特定の範囲をCellsプロパティで指定して表示形式を設定 (例: A1からB10)
    ws.Range(ws.Cells(1, 1), ws.Cells(10, 2)).NumberFormat = "0.00"
End Sub
ユーザー定義の範囲の表示形式を設定する

ユーザーに選択させた範囲に対して表示形式を設定する方法です。

Sub SetNumberFormatUserDefinedRange()
    Dim ws As Worksheet
    Dim userRange As Range
    Dim formatChoice As String
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' ユーザーに範囲を選択させる
    On Error Resume Next
    Set userRange = Application.InputBox("表示形式を設定する範囲を選択してください:", Type:=8)
    On Error GoTo 0
    
    ' ユーザーが範囲を選択した場合
    If Not userRange Is Nothing Then
        ' ユーザーに表示形式を入力させる
        formatChoice = InputBox("設定する表示形式を入力してください:", "表示形式設定")
        
        ' ユーザーが表示形式を入力した場合、その範囲の表示形式を設定
        If formatChoice <> "" Then
            userRange.NumberFormat = formatChoice
        End If
    End If
End Sub

ここに入力する表示形式は(例えば、”0.00″、”yyyy/mm/dd”、”$#,##0.00″など)を入力すると、その表示形式が選択した範囲に適用されます。

表示形式の例

数値の表示形式
項目説明表示方法
整数整数のみを表示します。ws.Range(“A1”).NumberFormat = “0”
小数点付き数値小数点以下2桁を
表示します。
ws.Range(“A1”).NumberFormat = “0.00”
桁区切り付き数値カンマで桁区切りを
表示します。
ws.Range(“A1”).NumberFormat = “#,##0”
パーセンテージパーセンテージ形式で
表示します。
ws.Range(“A1”).NumberFormat = “0.00%”
指数表示指数形式で表示します。ws.Range(“A1”).NumberFormat = “0.00E+00”
日付と時間の表示形式
項目説明表示方法
標準的な日付年月日の形式で
表示します。
ws.Range(“A1”).NumberFormat = “yyyy/mm/dd”
月/日/年月/日/年の形式で
表示します。
ws.Range(“A1”).NumberFormat = “mm/dd/yyyy”
日付と時刻日付と時刻を
組み合わせて表示します。
ws.Range(“A1”).NumberFormat = “yyyy/mm/dd hh:mm:ss”
時刻のみ時刻を表示します。ws.Range(“A1”).NumberFormat = “hh:mm:ss”
通貨の表示形式
項目説明表示方法
通貨記号通貨記号を付けて表示しますws.Range(“A1”).NumberFormat = “$#,##0.00”
テキストの表示形式
項目説明表示方法
テキスト形式数値をテキストと
して扱います。
ws.Range(“A1”).NumberFormat = “@”
カスタム表示形式
項目説明表示方法
電話番号電話番号形式で表示しますws.Range(“A1”).NumberFormat = “(####) ##-####”
郵便番号郵便番号形式で表示しますws.Range(“A1”).NumberFormat = “000-0000”
テキストと
数値の組合
テキストと数値を
組み合わせて表示します。
ws.Range(“A1”).NumberFormat = “””答え:”” #”
テキストと
数値の組合
テキストと数値を
組み合わせて表示します。
ws.Range(“A1”).NumberFormat = “””第”” #””回”””

セルの表示形式のリセット

表示形式を標準(デフォルト)の形式に戻すには、NumberFormatプロパティを空の文字列に設定します。

個々のセルの表示形式をリセットする場合は、次のようにします。

Sub ResetNumberFormat()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' A1セルの表示形式をリセット
    ws.Range("A1").NumberFormat = ""
End Sub
特定の範囲の表示形式をリセットする

特定の範囲の表示形式をリセットするには、Rangeプロパティを使用して範囲を指定します。

Sub ResetNumberFormatRange()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' A1からB10の範囲の表示形式をリセット
    ws.Range("A1:B10").NumberFormat = ""
End Sub

Cellsプロパティを使用する事も可能です。

Sub ResetNumberFormatSpecificRange()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' 特定の範囲の表示形式をリセット (例: A1:B10)
    ws.Range(ws.Cells(1, 1), ws.Cells(10, 2)).NumberFormat = ""
End Sub
ユーザー定義の範囲の表示形式をリセットする

ユーザーが入力した範囲の表示形式をリセットする場合も可能です。

Sub ResetNumberFormatUserDefinedRange()
    Dim ws As Worksheet
    Dim userRange As Range
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' ユーザーに範囲を選択させる
    On Error Resume Next
    Set userRange = Application.InputBox("リセットする範囲を選択してください:", Type:=8)
    On Error GoTo 0
    
    ' ユーザーが範囲を選択した場合、その範囲の表示形式をリセット
    If Not userRange Is Nothing Then
        userRange.NumberFormat = ""
    End If
End Sub
シート全体の表示形式をリセットする

シート全体の表示形式をリセットする場合は、次のようにします。

Sub ResetNumberFormatSheet()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' シート全体の表示形式をリセット
    ws.Cells.NumberFormat = ""
End Sub
ワークブック全体の表示形式をリセットする

ワークブック全体の表示形式をリセットする場合は、各シートに対してリセットを行います。

Sub ResetNumberFormatWorkbook()
    Dim ws As Worksheet
    
    ' すべてのシートをループ
    For Each ws In ThisWorkbook.Sheets
        ' シート全体の表示形式をリセット
        ws.Cells.NumberFormat = ""
    Next ws
End Sub

以上の方法を使用して、セル、範囲、シート、またはワークブック全体の表示形式をリセットすることができます。
これにより、セルの表示形式をデフォルトの状態に戻すことができます。必要に応じて適切な方法を選んで使用してください。

記事