EzTech

Lấy tỷ giá tự động vào Excel từ web ngân hàng bằng Power Query

2026-09-23 · Power Query & Excel

Lấy tỷ giá tự động vào Excel từ web ngân hàng bằng Power Query

Doanh nghiệp có giao dịch ngoại tệ thì gần như ngày nào cũng có người mở web ngân hàng, xem tỷ giá USD, rồi gõ tay vào file Excel. Việc mất vài phút, nhưng gõ nhầm một chữ số là sai cả dòng quy đổi, và cuối tháng không ai nhớ con số hôm đó lấy lúc mấy giờ.

Power Query trong Excel lấy được bảng tỷ giá thẳng từ trang web ngân hàng, làm sạch và đổ vào sheet. Bấm Refresh là có tỷ giá mới. Bài này hướng dẫn cách lấy tỷ giá tự động vào Excel từ trang tỷ giá của Vietcombank, dựa trên file demo mà đội ngũ EzTech dùng khi quay video hướng dẫn, kèm ba chỗ dễ sai và cách giữ lại lịch sử tỷ giá qua mỗi lần Refresh.

Tờ tiền 10 euro và 20 euro cùng vài đồng xu euro đặt chồng lên nhau
Mỗi ngoại tệ một dòng tỷ giá, và dòng đó đổi nhiều lần trong ngày. (Ảnh: StockSnap)

Ba nguồn để lấy tỷ giá tự động

Với Vietcombank, có ba chỗ lấy được bảng tỷ giá bằng Power Query. Mỗi chỗ có một điểm cần biết trước khi chọn:

NguồnDạng dữ liệuĐiểm cần biết
Trang tỷ giá trên webBảng trên trangDễ bắt đầu nhất. Tiêu đề cột và định dạng số phải làm sạch; trang đổi giao diện thì truy vấn phải sửa lại.
File XML tỷ giáXML, 20 ngoại tệCó sẵn mốc thời gian ngân hàng cập nhật. Đầu file ghi rõ chỉ nên gọi tối đa một lần mỗi 5 phút.
Dữ liệu theo ngàyJSONLấy được tỷ giá của một ngày trong quá khứ. Không phải kênh ngân hàng công bố chính thức, có thể đổi bất cứ lúc nào.

Phần lớn bài này đi theo nguồn thứ nhất, vì đó là cách file demo đang làm và cũng là cách hầu hết mọi người bắt đầu. Hai nguồn còn lại có ở phần cuối.

Các bước lấy tỷ giá từ trang web vào Excel

  1. Tạo truy vấn từ web. Data → From Web, dán địa chỉ trang tỷ giá của Vietcombank (https://www.vietcombank.com.vn/vi-VN/KHCN/Cong-cu-Tien-ich/Ty-gia), bấm OK.
  2. Chọn bảng. Cửa sổ Navigator liệt kê các bảng Power Query tìm thấy trên trang. Chọn bảng có các cột mã ngoại tệ, mua tiền mặt, mua chuyển khoản, bán, rồi bấm Transform Data.
  3. Đưa dòng đầu lên làm tiêu đề bằng Home → Use First Row as Headers, rồi đổi tên các cột cho gọn (xem chỗ sai thứ nhất bên dưới).
  4. Đổi ba cột tỷ giá sang kiểu số cho đúng (xem chỗ sai thứ hai).
  5. Thêm cột thời điểm lấy. Add Column → Custom Column, đặt tên Thời gian, công thức DateTime.LocalNow(), rồi đổi kiểu cột sang Date/Time.
  6. Lọc các ngoại tệ cần dùng. Bấm vào mũi tên ở cột mã ngoại tệ, chỉ tích những mã doanh nghiệp có giao dịch. File demo giữ lại USD, EUR và JPY.
  7. Close & Load ra một sheet riêng.
Sơ đồ các bước lấy tỷ giá tự động vào Excel bằng Power Query: lấy bảng từ trang tỷ giá, sửa tiêu đề cột, đổi số theo vùng English (United States), thêm cột thời gian, lọc USD EUR JPY, nạp ra sheet
Sáu bước từ trang web đến bảng tỷ giá trong Excel. Hai bước ở giữa là chỗ hay sai.

Ba chỗ dễ sai khi lấy tỷ giá từ web

1. Tên cột dính cả chữ của bản điện thoại

Trên trang tỷ giá, mỗi ô tiêu đề chứa hai nhãn: nhãn đầy đủ cho màn hình máy tính và nhãn rút gọn cho điện thoại. Power Query lấy cả hai, nên tên cột ra thành một chuỗi dài gồm "Mã ngoại tệ", một dấu xuống dòng, một loạt ký tự tab, rồi "Mã NT". Nhìn trong bảng thì chỉ thấy chữ bị cắt, nhưng mọi bước sau tham chiếu tới cột bằng đúng chuỗi dài đó.

Nên đổi tên cột ngay sau khi đưa dòng đầu lên làm tiêu đề, trước mọi bước khác. Khi trang đổi cách hiển thị tiêu đề, chỉ cần sửa lại một bước đổi tên này.

2. Số có dấu phẩy ngăn cách hàng nghìn

Tỷ giá trên trang ghi dạng 26,092 cho USD và 158.98 cho JPY: dấu phẩy ngăn cách hàng nghìn, dấu chấm là phần thập phân, theo kiểu tiếng Anh. Máy tính cài vùng Việt Nam hiểu ngược lại: dấu chấm là hàng nghìn, dấu phẩy là thập phân. Đổi kiểu số theo mặc định của máy thì tỷ giá JPY có thể bị đọc thành một con số lớn gấp trăm lần.

Cách chắc chắn nhất: chọn ba cột tỷ giá, bấm chuột phải → Change Type → Using Locale, chọn Decimal Number và vùng English (United States). Truy vấn khi đó chạy đúng trên mọi máy, không phụ thuộc máy người mở file cài vùng gì. Cùng loại lỗi này với ngày tháng có ở bài sửa lỗi ngày tháng trong Power Query.

Một số ô trên trang ghi dấu gạch ngang thay cho số, ở những ngoại tệ ngân hàng không niêm yết giá mua tiền mặt. Thay dấu gạch bằng null (Transform → Replace Values) trước khi đổi kiểu, nếu không ô đó sẽ báo Error.

3. Cột thời gian là giờ bấm Refresh, không phải giờ ngân hàng cập nhật

DateTime.LocalNow() ghi lại lúc máy chạy truy vấn. Trong file demo, ba lần Refresh sáng ngày 05/06/2026, một lần lúc 6:53 và hai lần lúc 6:55, cho ra ba bộ tỷ giá giống hệt nhau (USD mua tiền mặt 26.092, mua chuyển khoản 26.122, bán 26.402), vì ngân hàng chưa cập nhật lần nào trong khoảng đó.

Tỷ giá vẫn thay đổi trong ngày. Tra lại cùng ngày 05/06/2026 qua nguồn dữ liệu theo ngày, kết quả là USD mua tiền mặt 26.094, mua chuyển khoản 26.124, bán 26.404, kèm mốc cập nhật 23 giờ. Mỗi cột lệch 2 đồng so với lần lấy lúc gần 7 giờ sáng. Vì vậy, doanh nghiệp cần thống nhất lấy tỷ giá tại thời điểm nào trong ngày (đầu ngày, cuối ngày, hay lúc phát sinh giao dịch) và dùng tỷ giá mua hay bán cho loại nghiệp vụ nào, theo chính sách kế toán đang áp dụng. Power Query chỉ lo phần lấy số cho đúng và nhanh.

Giữ lịch sử tỷ giá qua mỗi lần Refresh

Mặc định, mỗi lần Refresh, Power Query xóa bảng cũ và nạp bảng mới. Muốn có bảng tỷ giá theo ngày để tra lại, file demo dùng một cách để bảng tự cộng dồn:

  1. Bảng tỷ giá sau khi nạp ra sheet là một Excel Table tên Tỷ_giá.
  2. Ở một sheet khác, ô A1 có công thức =Tỷ_giá[]. Excel đổ toàn bộ bảng vào vùng này.
  3. Một tên vùng (Formulas → Name Manager) trỏ tới =Sheet1!$A$1#. Dấu # nghĩa là cả vùng đổ, nên tên tự giãn theo số dòng.
  4. Một truy vấn thứ hai đọc tên vùng đó bằng Get Data → From Table/Range, đặt lại tên cột và kiểu dữ liệu.
  5. Truy vấn tỷ giá thêm một bước cuối: Home → Append Queries, nối truy vấn thứ hai vào.

Mỗi lần Refresh, truy vấn tỷ giá lấy các dòng mới từ web rồi nối thêm toàn bộ lịch sử đang có trên sheet. Bảng dài dần theo thời gian.

Sơ đồ vòng lưu lịch sử tỷ giá trong Excel: bảng Tỷ giá được đổ sang sheet phụ bằng công thức, tên vùng trỏ tới vùng đổ, truy vấn thứ hai đọc lại vùng đó và Append vào truy vấn tỷ giá ở lần Refresh sau
Vòng cộng dồn: bảng của lần Refresh trước được đọc lại và nối vào bảng của lần sau.

Cách này chạy được, nhưng có ba điểm phải trông:

  • Bấm Refresh nhiều lần thì có dòng trùng. Ba lần Refresh trong khoảng hai phút ở file demo sinh ra ba bộ tỷ giá y hệt nhau. Thêm một cột Ngày tách từ cột Thời gian, rồi Remove Duplicates theo Ngày, mã ngoại tệ và ba cột tỷ giá trước khi nạp. Đừng bỏ trùng chỉ theo mã và tỷ giá, vì hai ngày khác nhau có thể có cùng tỷ giá.
  • Lịch sử nằm trong chính file. Ai đó xóa dòng trên sheet, hoặc ô A1 của sheet phụ bị báo lỗi #SPILL!, thì lần Refresh sau lịch sử mất theo. Nên sao lưu file định kỳ.
  • Web lỗi thì lần đó không có dòng mới. Kiểm tra cột Thời gian: ngày nào không có dòng là ngày cần lấy bù.

Cho file tự Refresh

Vào Data → Queries & Connections, bấm chuột phải vào truy vấn tỷ giá → Properties. Hai lựa chọn hay dùng:

  • Refresh data when opening the file: mở file là có tỷ giá mới.
  • Refresh every … minutes: tự lấy lại theo chu kỳ khi file đang mở. Nếu dùng nguồn XML, đừng đặt dưới 5 phút, vì đầu file XML đã ghi giới hạn đó.

Kết hợp với cách lưu lịch sử ở trên, nên chọn một lịch cố định (ví dụ mỗi lần mở file) thay vì Refresh vài phút một lần, để bảng lịch sử không đầy dòng trùng.

Hai nguồn thay thế: XML và dữ liệu theo ngày

File XML nằm ở địa chỉ https://portal.vietcombank.com.vn/Usercontrols/TVPortal.TyGia/pXML.aspx. Dùng Data → From Web, dán địa chỉ này, Power Query nhận ra dữ liệu XML và cho chọn bảng các ngoại tệ. Ưu điểm lớn nhất là file có sẵn mốc thời gian ngân hàng cập nhật, nên cột thời gian lưu lịch sử phản ánh đúng lúc tỷ giá thay đổi. Hai việc cần làm thêm: Trim cột tên ngoại tệ vì tên có dấu cách đệm ở cuối, và đổi kiểu số bằng Using Locale English (United States) vì số ghi dạng 25,780.00.

Dữ liệu theo ngày nằm ở địa chỉ https://www.vietcombank.com.vn/api/exchangerates?date=2026-09-01, đổi phần ngày ở cuối để lấy ngày khác. Kết quả trả về 20 ngoại tệ của ngày đó. Nguồn này hợp để lấy bù những ngày bảng lịch sử bị thiếu. Vì đây không phải kênh ngân hàng công bố chính thức, đừng để quy trình chính phụ thuộc hoàn toàn vào nó.

Câu hỏi thường gặp

Excel của tôi không thấy bảng tỷ giá trong Navigator thì sao?

Trang tỷ giá dựng bảng bằng mã chạy trên trình duyệt, và không phải phiên bản Excel nào cũng đọc được kiểu trang này. Khi đó dùng nguồn XML: file XML không cần trình duyệt dựng trang nên phiên bản Excel có Power Query nào cũng đọc được. Cách kiểm tra Excel của mình có Power Query không có ở bài Excel bản nào có Power Query.

Lấy tỷ giá của ngân hàng khác được không?

Được, nếu ngân hàng đó công khai bảng tỷ giá trên web. Các bước giống hệt, chỉ khác địa chỉ trang và cách làm sạch tiêu đề cột. Nên chọn một ngân hàng làm nguồn chuẩn và ghi rõ trong file, để mọi người trong phòng cùng dùng một con số.

Đưa tỷ giá vào bảng giao dịch thế nào?

Nếu bảng giao dịch có cột ngày và mã ngoại tệ, dùng Merge Queries theo hai cột đó với bảng lịch sử tỷ giá (sau khi tách cột Thời gian thành cột ngày). Ngày nào có nhiều lần lấy thì Group By trước, giữ đúng một tỷ giá mỗi ngày theo thời điểm doanh nghiệp đã chọn. Cách Merge có ở bài Merge Queries thay VLOOKUP.

Bắt đầu từ đâu

Mở một file Excel trống, làm bảy bước ở trên với trang tỷ giá, chỉ giữ lại các ngoại tệ doanh nghiệp đang giao dịch. Khi bảng ra đúng, thêm phần lưu lịch sử và đặt lịch Refresh.

Khóa DATA FINANCE của EzTech đi từ Power Query chuyên sâu trong Excel đến báo cáo quản trị trên Power BI, dành cho người làm kế toán, tài chính. Cần dựng quy trình lấy dữ liệu tự động cho phòng kế toán thì để lại thông tin ở trang liên hệ.

Chat ZaloGọi điệnMessengerTìm đường