Google Sheets
Google Sheets มีฟังก์ชัน GOOGLEFINANCE สำหรับอัตราแลกเปลี่ยน ซึ่งเพียงพอสำหรับการแปลงค่าเงินคร่าวๆ แต่มีข้อจำกัดเรื่องแหล่งที่มา เพราะเป็นอัตราตลาดรวมที่ไม่ระบุชื่อซึ่งคุณตรวจสอบหรือเลือกเองไม่ได้ Frankfurter คำนวณอัตราเฉลี่ยจากธนาคารกลางที่คุณตรวจสอบได้ และเมื่อจำเป็นต้องระบุแหล่งที่มาให้ชัดเจน คุณก็ล็อกหน่วยงานเดียวได้ เช่น อัตราอ้างอิง ECB สำหรับภาษีมูลค่าเพิ่มในสหภาพยุโรป, NBP ของโปแลนด์ หรือ PTAX ของบราซิล ข้อมูลย้อนหลังของแหล่งข้อมูลที่ล็อกไว้จะคงอยู่ตามที่ประกาศจริง สูตรด้านล่างสามารถนำไปวางแทนที่ GOOGLEFINANCE ได้ทันที
เริ่มต้นอย่างรวดเร็ว
ไม่ต้องตั้งค่าและไม่ต้องใช้ API key ดึงอัตราแลกเปลี่ยนล่าสุดลงในเซลล์ด้วย IMPORTDATA และ CSV endpoint:
=IMPORTDATA("https://api.frankfurter.dev/v2/rates.csv?base=usd"es=eur") Sheets จะสร้างตารางขนาดเล็กที่มีคอลัมน์ date,base,quote,rate โดยคอลัมน์ date จะแสดงเป็นตัวเลขลำดับวันที่ ให้เลือกคอลัมน์แล้วไปที่ รูปแบบ > ตัวเลข > วันที่ (Format > Number > Date) เพื่อแสดงผลเป็นวันที่ หากต้องการดึงหลายสกุลเงินปลายทางพร้อมกัน ให้คั่นด้วยจุลภาค:
=IMPORTDATA("https://api.frankfurter.dev/v2/rates.csv?base=usd"es=eur,gbp,jpy")การแปลงจำนวนเงิน
IMPORTDATA ส่งคืนเฉพาะอัตราแลกเปลี่ยน ไม่ใช่ยอดเงินที่แปลงแล้ว ให้นำจำนวนเงินไปคูณกับเซลล์อัตราแลกเปลี่ยนที่นำเข้า หรือใช้ฟังก์ชันกำหนดเองด้านล่างเพื่อเรียกใช้งานจบในคำสั่งเดียว
ฟังก์ชันกำหนดเอง
หากต้องการสร้างฟังก์ชัน =FRANKFURTER() ไว้ใช้ซ้ำ ให้เพิ่ม Apps Script สั้นๆ โดยในชีตของคุณไปที่ ส่วนขยาย > Apps Script (Extensions > Apps Script) วางโค้ดนี้แล้วบันทึก:
/**
* Converts an amount between currencies, at today's rate or on a date.
* @customfunction
*/
function FRANKFURTER(amount, from, to, date) {
let url = `https://api.frankfurter.dev/v2/rate/${from}/${to}`;
if (date) {
const tz = SpreadsheetApp.getActive().getSpreadsheetTimeZone();
url += `?date=${Utilities.formatDate(date, tz, "yyyy-MM-dd")}`;
}
const data = JSON.parse(UrlFetchApp.fetch(url).getContentText());
return amount * data.rate;
}จากนั้นเรียกใช้จากเซลล์ใดก็ได้:
=FRANKFURTER(100, "usd", "eur")ส่งวันที่เข้าไปเพื่อใช้อัตราแลกเปลี่ยนย้อนหลัง:
=FRANKFURTER(100, "usd", "eur", DATE(2020, 1, 2))การล็อกแหล่งข้อมูลทางการ
โดยค่าเริ่มต้นคุณจะได้รับอัตราเฉลี่ยรวมจากทุกแหล่งข้อมูล เพิ่ม providers เพื่อล็อกหน่วยงานเดียว ซึ่งสำคัญสำหรับงานภาษีและบัญชี เพราะหลายประเทศกำหนดให้ใช้อัตราที่ประกาศโดยธนาคารกลางของประเทศตนเองเมื่อแปลงยอดเงินตราต่างประเทศ
=IMPORTDATA("https://api.frankfurter.dev/v2/rates.csv?base=usd"es=eur&providers=ecb")ECB- อัตราอ้างอิงของธนาคารกลางยุโรป มาตรฐานสำหรับภาษีมูลค่าเพิ่มและศุลกากรในสหภาพยุโรป
NBP- ธนาคารแห่งชาติโปแลนด์ (Narodowy Bank Polski) สำหรับการคำนวณภาษีมูลค่าเพิ่มและภาษีเงินได้นิติบุคคลของโปแลนด์
CNB- อัตราประกาศของธนาคารแห่งชาติเช็ก ใช้สำหรับงานบัญชีและภาษีในสาธารณรัฐเช็ก
BCB- อัตรา PTAX ของธนาคารกลางบราซิล (Banco Central do Brasil) มาตรฐานอ้างอิงสำหรับสัญญาและภาษีในบราซิล
BANXICO- อัตรา FIX ของธนาคารกลางเม็กซิโก (Banco de México) สำหรับการชำระภาระผูกพันสกุลดอลลาร์สหรัฐ
ดูแหล่งข้อมูลทั้งหมด แหล่งข้อมูลที่ล็อกไว้จะอัปเดตตามตารางเวลาประกาศของหน่วยงานนั้นเอง อัตราล่าสุดจึงอาจตามหลังอัตราเฉลี่ยรวมอยู่หนึ่งวัน
ข้อมูลอนุกรมเวลาย้อนหลัง
ใช้ from เพื่อกำหนดช่วงวันที่ และใช้ group=month เพื่อยุบรวมเป็นเดือนละหนึ่งแถวพร้อมนำไปสร้างกราฟ ทั้งนี้ ข้อมูลย้อนหลังแบบอัตราเฉลี่ยรวมอาจขยับเล็กน้อยเมื่อมีข้อมูลใหม่เข้ามา ดังนั้นควรล็อกแหล่งข้อมูลเมื่อต้องการให้ตัวเลขคงที่
=IMPORTDATA("https://api.frankfurter.dev/v2/rates.csv?from=1949-12-01&base=usd"es=gbp&providers=bbk&group=month") คิวรีนี้ดึงข้อมูลดอลลาร์สหรัฐเทียบกับปอนด์สเตอร์ลิงย้อนกลับไปถึงปี 1949 จากคลังข้อมูลของธนาคารกลางเยอรมนี (Deutsche Bundesbank) คุณจะเห็นอัตราผูกค่าเงินที่ $2.80 คงที่ต่อเนื่องหลายปีก่อนจะยุติลงในปี 1967 ข้อมูลย้อนหลังลึกๆ มาจากอัตราประกาศที่แฟรงก์เฟิร์ตของ Bundesbank ทั้งดอลลาร์เทียบกับมาร์กเยอรมันตั้งแต่ปี 1948 และคู่เงินดอลลาร์อื่นๆ ส่วนใหญ่ในช่วงปี 1949 ถึง 1970 จากนั้นธนาคารกลางยุโรปจึงรับช่วงต่อตั้งแต่ปี 1999 ดังนั้นหากต้องการอนุกรมเวลายุคปัจจุบันแบบต่อเนื่อง ให้ใช้อัตราเฉลี่ยรวมเริ่มต้นหรือระบุ providers=ecb