📊 Excel VBA Top100
🔧

ConvertCurrency

ユーティリティ

通貨換算を行う

通貨換算を行うVBAマクロです。為替レートをシートのレートテーブルまたはWeb接続から取得し、指定した金額を別の通貨に変換します。複数通貨への一括変換や、選択範囲内のすべての金額を自動換算する処理も実装できます。VLOOKUP形式のレートテーブルを使ったオフライン換算と、Web参照を使ったリアルタイムレートへの対応の2方式が利用できます。内部ではレートテーブルをVLOOKUP形式で参照するオフライン方式と、Web経由で最新レートを取得するオンライン方式の2通りが実装可能で、業務要件に応じて選択できます。ConvertUnitsと同様の「変換系」マクロとして、経理・貿易実務の集計フローに組み込むと効果が高まります。手計算での換算ミスや電卓との数値転記ミスを根本的になくせる点が実務上の大きな価値です。

ConvertCurrency デモ

📖 使い方

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

🎯 活用シーン

  • ✓海外取引の請求書金額を円換算した列を自動生成
  • ✓複数通貨の経費精算データを一括でJPY換算してサマリー作成
  • ✓為替レートテーブルを更新するだけで全シートの換算額が自動更新
  • ✓海外子会社からの経費報告を本社の連結通貨(円)に統一換算して集計したいとき
  • ✓多通貨で見積もりを提示する必要がある輸出案件で、レート変動時にも即座に再計算したいとき

💡 実装のヒント

  • ▸レートテーブルをシートに持ちVLOOKUPで換算レートを参照します
  • ▸WorksheetFunction.VLookupで通貨コードからレートを取得できます
  • ▸小数点以下の丸め処理にはWorksheetFunction.Roundを使います
  • ▸レートの更新頻度が高い場合は、レートテーブルの最終更新日時をセルに表示しておくと、古いレートでの誤算を防げます。
  • ▸端数処理のルール(切り捨て・四捨五入)は経理基準に合わせてWorksheetFunction.Roundの引数で明確に指定してください。

💻 VBAコード

' ConvertCurrency
' -----------------
' Macro Name: ConvertCurrency
' Description: 通貨換算を行う
' Parameters: なし
' Returns: なし
' Usage: 実行すると金額と通貨の種類を選択して変換結果をクリップボードにコピー
' -----------------

Sub ConvertCurrency()
    Dim currencyType As String
    Dim inputAmount As Double
    Dim resultAmount As Double
    Dim fromCurrency As String
    Dim toCurrency As String
    Dim ws As Worksheet
    Dim outputCell As String

    On Error GoTo ErrorHandler

    currencyType = InputBox("通貨ペアを選択:" & vbCrLf & _
                "1: USD -> JPY" & vbCrLf & _
                "2: JPY -> USD" & vbCrLf & _
                "3: EUR -> JPY" & vbCrLf & _
                "4: JPY -> EUR" & vbCrLf & _
                "5: GBP -> JPY" & vbCrLf & _
                "6: JPY -> GBP", "通貨換算", "1")

    If currencyType = "" Then
        Exit Sub
    End If

    inputAmount = InputBox("金額を入力:", "通貨換算")

    If inputAmount = "" Then
        Exit Sub
    End If

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

    inputAmount = CDbl(inputAmount)

    Dim rate As Double

    Select Case currencyType
        Case "1"
            rate = 150
            fromCurrency = "USD"
            toCurrency = "JPY"
        Case "2"
            rate = 1 / 150
            fromCurrency = "JPY"
            toCurrency = "USD"
        Case "3"
            rate = 163
            fromCurrency = "EUR"
            toCurrency = "JPY"
        Case "4"
            rate = 1 / 163
            fromCurrency = "JPY"
            toCurrency = "EUR"
        Case "5"
            rate = 190
            fromCurrency = "GBP"
            toCurrency = "JPY"
        Case "6"
            rate = 1 / 190
            fromCurrency = "JPY"
            toCurrency = "GBP"
        Case Else
            MsgBox "無効な選択です。", vbExclamation
            Exit Sub
    End Select

    resultAmount = inputAmount * rate

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

    If outputCell <> "" Then
        ws.Range(outputCell).Value = resultAmount
        ws.Range(outputCell).NumberFormat = "#,##0.00"
    End If

    MsgBox inputAmount & " " & fromCurrency & " = " & Format(resultAmount, "#,##0.00") & " " & toCurrency, vbInformation

    Dim clip As Object
    Set clip = CreateObject("htmlfile").parentWindow.clipboardData
    clip.SetData "text", Format(resultAmount, "#,##0.00") & " " & toCurrency
    Exit Sub

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