例文を使って繰り返し業務を時短

【マクロ・VBA】指定した範囲の表示形式を文字列や標準に変換する

エクセル、マクロ、VBAで表示形式を変更する方法 VBA

表示形式の変換する方法とは

VBAは、数値や文字列などのデータ型を他のデータ型に変換することができます。

  1. NumberFormatプロパティを使用する方法
    • 数字の表示形式を小数点以下2桁や0.00%などパーセンテージの表記、¥#,##0など、通貨表記に変換することができます。
  2. Format関数を使用する方法
    • 文字列に対して特定の表示形式を適用するために使用されます。
  3. 整数型変数を文字列に変換してフォーマットする方法
  4. Format関数を使用して、日付や時刻をフォーマットする方法

選択したセル範囲の表示形式を変換するコード

Sub 表示形式を変換する() 
    Dim iRow            As Long     '// 行位置
    Dim iCol            As Long     '// 列位置
    Dim iRowMax         As Long     '// 行数
    Dim iColMax         As Long     '// 列数
    Dim sFormatBefore   As String   '// 現在表示形式
    Dim sFormatAfter    As String   '// 変換後表示形式
    
    '// 現在の表示形式を取得
    sFormatBefore = ActiveCell.NumberFormatLocal
    
    '// 標準の場合は文字列に変換
    If (sFormatBefore = "G/標準") Then
        sFormatAfter = "@"
    '// 文字列の場合は標準に変換
    ElseIf (sFormatBefore = "@") Then
        sFormatAfter = "G/標準"
    End If
    
    '// 変換後の表示形式を設定
    Selection.NumberFormatLocal = sFormatAfter
    
    '// 表示形式が文字列以外はここで処理を終了する
    If (sFormatAfter <> "@") Then
        Exit Sub
    End If
    
    '// 行位置、列位置、行数、列数を取得
    iRow = Selection.Row
    iCol = Selection.Column
    iRowMax = iRow + Selection.Rows.Count - 1
    iColMax = iCol + Selection.Columns.Count - 1
    
    '// 選択セル範囲を列ごとにループ
    For iCol = iCol To iColMax
        If (Range(Cells(iRow, iCol), Cells(iRowMax, iCol)).Text <> "") Then
            '// 区切り位置設定
            Call Range(Cells(iRow, iCol), Cells(iRowMax, iCol)).TextToColumns
            'Range("C3").Formula = "=INDEX(F3:F8, MATCH(B3, E3:E8))"
        End If
    Next
    
MsgBox "完了"
End Sub

解説

  • ActiveCellプロパティを使って現在のアクティブなセルの表示形式を取得します。NumberFormatLocalプロパティを使うことで、選択したセル範囲の表示形式が取得できます。
  • If...Then...ElseIf...End If文を使って条件分岐を行い、現在の表示形式が「G/標準」の場合は変換後の表示形式を「@」に設定し、現在の表示形式が「@」の場合は変換後の表示形式を「G/標準」に設定します。
  • 選択範囲の表示形式が文字列の場合、各セルの内容を区切って複数の列に分割する処理を行います。選択範囲の表示形式が文字列でない場合は、処理を終了します。
  • 次に、選択範囲の行位置、列位置、行数、列数を取得し、選択範囲内の各列についてループを行います。
  • 各列に対して、その列に含まれるデータが空でない場合は、TextToColumns メソッドを使用して、各セルの内容を区切り位置で分割します。分割されたデータは、複数の列に配置されます。

コメント

タイトルとURLをコピーしました