📊 Excel VBA Top100
🔧

ConvertUnits

ユーティリティ

単位変換を行う

単位変換を自動で行うVBAマクロです。長さ(メートル⇔フィート)、重量(キログラム⇔ポンド)、温度(摂氏⇔華氏)など様々な単位系間の変換をプログラムで実行します。WorksheetFunction.Convertを使うか独自の換算式を実装して、選択セルの値を指定の単位に変換し隣接セルに結果を出力します。製造業・物流・国際ビジネスなどで頻繁に必要となる処理を自動化できます。内部ではWorksheetFunction.Convertメソッドに元単位と変換先単位の文字コードを渡すだけで、長さ・重量・温度など幅広い単位系に対応できます。ConvertCurrencyが通貨換算に特化しているのに対し、本マクロは物理量全般をカバーする汎用ツールとして、製造・物流分野の資料作成で組み合わせて使われます。単位換算表を都度参照する必要がなくなり、作業の正確性とスピードが同時に向上します。

ConvertUnits デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 実行すると変換元の値と単位の種類を選択して変換結果をクリップボードにコピー

🎯 活用シーン

  • ✓輸入品の重量データをポンドから全自動でキログラムに変換
  • ✓建設図面の寸法をフィート・インチからミリメートルに一括変換
  • ✓温度管理データの摂氏・華氏を切り替えてグローバル対応レポートを作成
  • ✓海外工場からの仕様書に記載された寸法をメートル法に統一し、国内図面と比較しやすくしたいとき
  • ✓物流業務でヤード・ポンド法とメートル法が混在するデータを一括で標準化したいとき

💡 実装のヒント

  • ▸WorksheetFunction.Convert(値, "元単位", "変換先単位") が手軽です
  • ▸温度変換は (C * 9/5) + 32 の式でセ氏→華氏に変換できます
  • ▸単位コードはExcelのCONVERT関数のヘルプで確認できます
  • ▸Convert関数がサポートしない単位(一部の業界固有単位など)は、独自の換算係数をコードに定義して対応してください。
  • ▸変換元・変換先の単位コードを誤ると#N/Aエラーになるため、単位コードの一覧をコメントとしてコード内に残しておくと保守しやすくなります。

💻 VBAコード

' ConvertUnits
' -----------------
' Macro Name: ConvertUnits
' Description: 単位変換を行う
' Parameters: なし
' Returns: なし
' Usage: 実行すると変換元の値と単位の種類を選択して変換結果をクリップボードにコピー
' -----------------

Sub ConvertUnits()
    Dim ws As Worksheet
    Dim unitType As String
    Dim inputValue As Double
    Dim resultValue As Double
    Dim resultUnit As String
    Dim outputCell As String

    On Error GoTo ErrorHandler

    unitType = InputBox("変換種類を選択:" & vbCrLf & _
                "1: 長さ (cm <-> inch)" & vbCrLf & _
                "2: 重さ (kg <-> lb)" & vbCrLf & _
                "3: 温度 (C <-> F)" & vbCrLf & _
                "4: 容積 (L <-> gal)", "単位変換", "1")

    inputValue = InputBox("変換元の値を入力:", "単位変換")

    If inputValue = "" Then
        Exit Sub
    End If

    If Not IsNumeric(inputValue) Then
        MsgBox "数値を入力してください。", vbExclamation
        Exit Sub
    End If

    inputValue = CDbl(inputValue)

    Select Case unitType
        Case "1"
            Dim direction1 As String
            direction1 = InputBox("変換方向:" & vbCrLf & "1: cm -> inch" & vbCrLf & "2: inch -> cm", "単位変換", "1")
            If direction1 = "1" Then
                resultValue = inputValue / 2.54
                resultUnit = "inch"
            Else
                resultValue = inputValue * 2.54
                resultUnit = "cm"
            End If
        Case "2"
            Dim direction2 As String
            direction2 = InputBox("変換方向:" & vbCrLf & "1: kg -> lb" & vbCrLf & "2: lb -> kg", "単位変換", "1")
            If direction2 = "1" Then
                resultValue = inputValue * 2.20462
                resultUnit = "lb"
            Else
                resultValue = inputValue / 2.20462
                resultUnit = "kg"
            End If
        Case "3"
            Dim direction3 As String
            direction3 = InputBox("変換方向:" & vbCrLf & "1: C -> F" & vbCrLf & "2: F -> C", "単位変換", "1")
            If direction3 = "1" Then
                resultValue = inputValue * 9 / 5 + 32
                resultUnit = "F"
            Else
                resultValue = (inputValue - 32) * 5 / 9
                resultUnit = "C"
            End If
        Case "4"
            Dim direction4 As String
            direction4 = InputBox("変換方向:" & vbCrLf & "1: L -> gal" & vbCrLf & "2: gal -> L", "単位変換", "1")
            If direction4 = "1" Then
                resultValue = inputValue / 3.78541
                resultUnit = "gal"
            Else
                resultValue = inputValue * 3.78541
                resultUnit = "L"
            End If
        Case Else
            MsgBox "無効な選択です。", vbExclamation
            Exit Sub
    End Select

    Set ws = ActiveSheet
    outputCell = InputBox("結果を出力するセルアドレスを入力:", "単位変換", "A1")

    If outputCell <> "" Then
        ws.Range(outputCell).Value = resultValue
        ws.Range(outputCell).NumberFormat = "0.##"
    End If

    MsgBox "変換結果: " & Format(resultValue, "0.##") & " " & resultUnit, vbInformation

    Dim clip As Object
    Set clip = CreateObject("htmlfile").parentWindow.clipboardData
    clip.SetData "text", Format(resultValue, "0.##") & " " & resultUnit
    Exit Sub

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