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

📖 使い方
- VBAエディタを開く(Alt + F11)
- モジュールを挿入(挿入 > モジュール)
- 下記VBAコードをコピー&ペースト
- ブック上で実行(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