📊 Excel VBA Top100
🔄

ConvertTextToNumbers

データ処理

選択範囲のテキスト形式の数値を数値型に変換します

セルに文字列として保存されている数値データを、Excelが計算に使える本物の数値形式に一括変換するマクロです。他のシステムからインポートしたデータやCSV読み込み後によく発生する「数値のはずなのにSUM関数が0になる」問題を解決します。選択範囲内のすべての文字列数値を自動検出して数値型に変換するため、一つひとつ手動で「データ→テキストから列へ」を実行する手間が省けます。データクレンジング作業を大幅に効率化できます。内部ではセルの値を確実に数値へ変換する処理を行うため、表示形式を変えるだけでは直らない「見た目は数字なのに計算できない」セルも正しく変換されます。緑の三角形のエラーインジケーターを1つずつクリックして直す作業と比べ、数百セルでも数秒で完了します。CSVインポート直後の定番処理として、ImportCSVとセットで覚えておくと効果的です。

ConvertTextToNumbers デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 変換したい範囲を選択してから ConvertTextToNumbers を実行します

🎯 活用シーン

  • ✓基幹システムからエクスポートしたCSVファイルの数値が文字列として読み込まれ、集計できないトラブルを解決したいとき
  • ✓Webスクレイピングや外部ツールで取得したデータをExcelで計算に使えるようにしたいとき
  • ✓他の担当者が作成したファイルで数値が正しく認識されておらず、SUM関数が正しく動作しない問題を修正したいとき
  • ✓会計ソフトから出力した金額データが文字列扱いになっており、月次集計の前に一括で数値化したいとき
  • ✓コピー&ペーストで集めた複数ファイルの数値データを、ピボットテーブルで集計できる状態に整えたいとき

💡 実装のヒント

  • ▸変換したいセル範囲を選択してから実行してください。選択範囲内の文字列数値のみが対象となり、テキストはそのまま保持されます。
  • ▸セルの左上に緑の三角マーク(エラーインジケーター)が表示されている数値セルは、このマクロで一括解消できます。
  • ▸変換後は必ずSUM関数などで合計値を確認し、変換が正しく行われたかチェックすることをお勧めします。
  • ▸変換対象は選択範囲内のみです。列全体を選択して実行すれば、列ごと一括で数値化できます。
  • ▸日付らしき文字列は意図しない数値(シリアル値)に変わる場合があるため、日付列は範囲から外して実行してください。

💻 VBAコード

' ConvertTextToNumbers
' -----------------
' Macro Name: ConvertTextToNumbers
' Description: 選択範囲のテキスト形式の数値を数値型に変換します
' Parameters: なし
' Returns: なし
' Usage: 変換したい範囲を選択してから ConvertTextToNumbers を実行します
' -----------------

Sub ConvertTextToNumbers()
    On Error GoTo ErrorHandler

    Dim rng As Range
    Dim cell As Range
    Dim convertedCount As Long

    If TypeName(Selection) <> "Range" Then
        MsgBox "セル範囲を選択してから実行してください", vbCritical, "エラー"
        Exit Sub
    End If

    Set rng = Selection
    convertedCount = 0

    For Each cell In rng
        If Not IsEmpty(cell) And IsNumeric(cell.Value) Then
            cell.Value = CDbl(cell.Value)
            convertedCount = convertedCount + 1
        End If
    Next cell

    MsgBox convertedCount & " セルを数値に変換しました", vbInformation, "完了"

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub