跳到主要內容跳到頁尾

多種幣別一起換成台幣:用 MAP 逐列查匯率與換算

5 分鐘閱讀Lv.3 中級摘要與日期

用 MAP 同時讀取金額與幣別,把 USD、JPY、TWD 等資料換成台幣估值。TWD 直接用 1,區分空列、缺欄、錯誤幣碼與非數值金額,並說明動態匯率、四捨五入及歷史記帳的界線。

發布 更新

文章目錄

一份清單同時有美元、日圓與台幣,金額不能直接加總。我會先保留原始金額與幣別,再逐列列出「每一單位外幣可換多少台幣」,最後才換算。

這篇延伸方格子 MAP 舊文的匯率案例。這次把匯率和金額拆兩欄,錯誤時看得出是哪一步,也讓原本就是台幣的列直接乘 1。

這是一份依目前可取得匯率更新的估值表,適合練習或觀察,不是歷史成交記帳、銀行結匯或交易報價表。需要保存實際支出時,另存成交日、實際匯率、費用與來源,不能讓今天的新匯率回頭改寫舊帳。

準備金額與幣別

在空白工作表的 A1 貼這份合成資料。保留第 7 列的空金額、第 8 列的空幣別與第 9 列的全空列;第 10 列「文字」刻意不是數字。

貼到 A1,金額是數值,幣別是文字代碼
金額	幣別
50	USD
500	JPY
100	TWD
0	TWD
20	ZZZ
JPY
12	
	
文字	USD

USD 是美元、JPY 是日圓、TWD 是新台幣。ZZZ 是故意放的無效代碼,不能因為看起來是三個字母就認定有資料。金額 0 是有效數值,和空白不同。

在 C1 寫「每 1 單位換 TWD」、D1 寫「台幣估值」,先清空 C2:D10,讓兩條公式各自往下展開。

第一條 MAP:每列取得匯率

C2 貼這條:

Google 試算表公式
fx

幣碼先清一般空格並轉大寫;TWD 為 1,其餘查外幣兌台幣

=MAP( B2:B10, LAMBDA( code, LET( ccy, UPPER(TRIM(code)), IF( ccy="", "", IF( ccy="TWD", 1, IFERROR( GOOGLEFINANCE("CURRENCY:"&ccy&"TWD"), "匯率不可用" ) ) ) ) ) )

MAP 每次拿到一格幣碼,讓 LAMBDA 逐列處理。UPPER(TRIM(code)) 把一般首尾空格與大小寫整理好,因此 usd 可以組成 CURRENCY:USDTWD;它不是完整的 Unicode 清理,複製來的怪空格仍要另查。

三種分支各有用途:

  • 幣別空白就不查資料,回空字串。
  • 幣別是 TWD 就回數字 1,不必查台幣兌台幣。
  • 其他代碼組成 CURRENCY: 加來源幣別與 TWD;查不到或服務出錯,回「匯率不可用」。

這個提示不只代表打錯字,也可能是服務、連線或標的支援問題。不要把它替換成 0,否則加總時會把無法估值的支出當成零。

想先熟悉單一幣別的寫法,可以看 GOOGLEFINANCE 匯率與股價。

第二條 MAP:金額、幣別、匯率一起讀

D2 貼這條。三個範圍都是第 2 到第 10 列,不能少選一列:

Google 試算表公式
fx

逐列核對欄位與型態,有有效數值匯率才換算成兩位小數

=MAP( A2:A10, B2:B10, C2:C10, LAMBDA( amount, code, fx, LET( ccy, UPPER(TRIM(code)), IF( AND(amount="", ccy=""), "", IF( OR(amount="", ccy=""), "缺金額或幣別", IF( NOT(ISNUMBER(amount)), "金額非數值", IF( NOT(ISNUMBER(fx)), "匯率不可用", ROUND(amount*fx, 2) ) ) ) ) ) ) )

這次 MAP 同時讀三欄。amount、code、fx 依序對應金額、幣別、匯率,每一列各自跑一次 AND/OR 條件,不會把整欄合成一個條件結果。LAMBDA 與 LET 基礎有這些名稱的寫法。

先檢查欄位,再檢查金額型態,最後才乘匯率。文字形式的「100」即使看起來像數字,也應先查明來源並轉成數值,這裡不偷偷代轉。

結果怎麼核對?

匯率會隨時間變動(GOOGLEFINANCE 的報價最多延遲 20 分鐘),不能寫死成教學答案。外部資料載入完成後,依當下 C 欄核對:

列原始資料D 欄應有的結果
250 USD50*C2 四捨五入至兩位小數;C2 應為可用匯率
3500 JPY500*C3 四捨五入至兩位小數;C3 應為可用匯率
4100 TWD100,C4 為 1
50 TWD0,保留有效的零金額
620 ZZZ匯率不可用
7空金額、JPY缺金額或幣別
812、空幣別缺金額或幣別
9全空列空白
10文字、USD金額非數值

如果 C2 仍在載入,先等待並確認外部資料狀態,再判斷公式結果。若回錯誤,先看 C 欄,不要只看最後的台幣金額。

估值表的幾個界線

GOOGLEFINANCE 官方文件提醒,資料來源與支援不完整,資訊可能延遲最多 20 分鐘,提供的是資訊用途;專業使用另有授權限制。這不保證每個貨幣對都能查到,也不是銀行買入/賣出含手續費的成交價。

GOOGLEFINANCE 是 Google 試算表的函式,Excel 沒有同名函式;用 Excel 的同事要改用股票/貨幣資料類型或 STOCKHISTORY(需付費的 Microsoft 365)。

這份公式沒有傳日期,所以是會隨資料更新的當前估值。歷史資料有不同的展開格式與限制,不能直接在本式末尾加日期,就以為仍會逐列回單一匯率。保留帳務快照時,要連原始金額、匯率與取得時間一起貼成值,並確認來源符合用途。

ROUND(...,2) 改的是數值;若要顯示成 100.00,再把儲存格數字格式設為兩位小數。每列取兩位小數是本篇的計算規則,不代表所有帳務都應逐筆四捨五入。逐筆先取小數再加總,可能和先加總再取小數不同;請按用途訂規則,參考 四捨五入函式。

大量重複幣別時,本式每一列都各自查一次匯率,沒有先做共用匯率表。先用小量資料確認;若同一幣別很多列,下一步可將「每種幣別只查一次」獨立成表,再查找匯率。不要把無限整欄查詢當成免費且穩定的服務。

1

確認這是台幣,不呼叫外幣換算

把 A2 改成 50、B2 改成 twd。C2 與 D2 應是多少?若幣碼改成 ZZZ,為什麼不該回 0?

我是喜特先生,Mr. Sheet,我們下個教學見!

分享:
#MAP#匯率換算#多幣別#GOOGLEFINANCE
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。