Hướng dẫn cách tự xây dựng công thức đọc số tiền bằng chữ trong excel từ A đến Z

Đọc số tiền thành chữ là một trong số những chủ đề rất được quan tâm trên Excel. Trong hầu hết các loại giao dịch: hợp đồng, hóa đơn… đều yêu cầu phải đọc số tiền bằng chữ. Trong những bài viết trước đây của Học Excel Online, chúng ta đã biết tới cách sử dụng Add-in trong Excel để làm việc này. Còn trong bài viết này, chúng ta sẽ biết thêm một cách làm khác: Sử dụng hàm, công thức trong Excel để đọc số tiền thành chữ. Hãy cùng tìm hiểu ngay nào.

Đây là kết quả chúng ta sẽ đạt được:

Tải về file mẫu tại địa chỉ: http://bit.ly/2Upapa1

Sự phức tạp của việc đọc số tiền bằng chữ theo tiếng việt

Trước khi đi vào tìm hiểu cách làm, xin phép được nhắc lại một số vấn đề khiến cho việc đọc số tiền bằng chữ lại “khó“, khiến nhiều người không làm được:

  • Số tiền có thể lớn, lên tới hàng tỷ, nghìn tỷ, thậm chí lớn hơn nữa. Do đó việc phân tách cách thành phần tỷ / triệu / nghìn / trăm khiến không thể dùng 1 công thức mà đạt được ngay. Phải phối hợp nhiều công thức khác nhau, mỗi nhóm lại có logic khác nhau.
  • Phiên âm có sự thay đổi không đồng nhất giữa các địa phương. Những từ như “bảy/ bẩy”, “nghìn / ngàn”, “linh / lẻ” đôi khi có thể dùng mỗi nơi một khác, nhưng đều đúng. Do đó cần có sự biến đổi linh hoạt các từ này để phù hợp với nhu cầu sử dụng.
  • Số tiền chẵn và lẻ sẽ có đuôi kết thúc khác nhau. Với tiền chẵn sẽ có kết thúc là “đồng chẵn”, còn tiền lẻ chỉ kết thúc với “đồng”. Do đó việc tùy biến phần kết thúc cũng khiến vấn đề trở nên phức tạp khi xác định khi nào là lẻ, khi nào là chẵn (trong khi các cách đọc của tiền USD không quy định việc này)
  • Trong chính những từ như “một / mốt”, “bốn / tư”, “năm / lăm” lại thay đổi trong những hoàn cảnh nhất định. Việc xác định khi nào dùng từ nào đòi hỏi phải biện luận logic phức tạp hơn nhiều so với cách đọc trực tiếp từng số.
  • Ngoài ra còn một phần mở rộng nữa là khi đọc số tiền ngoại tệ theo cách tiếng việt có thể khác với cách đọc của nước ngoài (tiếng anh). Do đó cần lưu ý khi thay đổi cách đọc với các loại ngoại tệ

Với những vấn đề phức tạp trên, chúng ta sẽ thực hiện việc xây dựng hàm đọc số tiền bằng chữ theo từng bước để tránh nhầm lẫn.

Các bước xây dựng hàm đọc số bằng chữ tiếng việt

Trong phạm vi bài viết này, chúng ta sẽ tìm hiểu cách đọc số tới hàng trăm tỷ (gồm 12 chữ số). Những số từ hàng nghìn tỷ trở lên các bạn tự phát triển tiếp theo ý tưởng của bài viết.

Chuyển số bất kỳ về dạng số có trên 12 chữ số

Bản chất của 1 con số là không có số 0 ở trước (hoặc có thì cũng không có ý nghĩa gì). Tuy nhiên khi muốn phân tách thứ tự của từng vị trí các số ra tương ứng từng chữ số, chúng ta lại cần phải chuyển con số về dạng có đủ 12 chữ số, nếu số đó nhỏ hơn hàng trăm tỷ thì phải thêm số 0 ở trước.

Phương pháp đơn giản để chuyển 1 số về dạng số có trên 12 chữ số là cộng số đó với 10 mũ 12 (một số có 12 chữ số 0 ở phía sau)

Ví dụ:

Số 10.010.001.010 là số có 11 chữ số. Khi đem số này cộng với 10^12 ta có kết quả là: 1.010.010.001.010

Nếu lấy 12 chữ số từ phải qua trái thì ta có kết quả 010.010.001.010. Số này về bản chất giống với số ban đầu với 11 chữ số, nhưng có thêm số 0 ở trước để phản ánh đúng từng con số trong các chữ số.

Tách từng chữ số ra 12 vị trí

Từ cột C đến cột N, chúng ta có 12 số tương ứng từ 1 đến 12 (dòng 2) giúp nhận biết từng vị trí các chữ số.

Tương ứng với các cột này, tại dòng 3 chúng ta sẽ dùng hàm để tách từng vị trí các chữ số trong dãy số ở ô B2 như sau:

Sử dụng hàm MID để tách từng vị trí trong dãy số, trong đó:

  • Text: là dãy số ở ô B2. Khi viết công thức chúng ta chú ý cố định tham chiếu ô B2
  • Start_num: là bắt đầu từ ký tự thứ mấy. Vì dãy số ở ô B2 có 13 ký tự, trong khi chúng ta chỉ lấy 12 ký tự bên phải, tức là lệch so với ký tự bắt đầu 1 chữ số. Do đó Start_num sẽ bằng số tương ứng ở dòng 2 + 1
  • Num_char: là số ký tự cần lấy. Ở đây chúng ta chỉ lấy duy nhất 1 ký tự tương ứng với vị trí chữ số cần tách.

Tuy nhiên hàm MID chỉ trả về dữ liệu là dạng text. Do đó chúng ta kết hợp thêm hàm VALUE để chuyển kết quả về dữ liệu dạng Number (tránh xung đột về bản chất dữ liệu)

C3=MID($B$2,C2+1,1)

Từ C3:N3 chúng ta sao chép công thức từ C3 sang phải (thao tác Fill Right, phím tắt Ctrl+R)

Kết quả chúng ta có được từng vị trí các con số tương ứng như sau:

Hàm đọc từng vị trí bằng chữ

Vì các vị trí có thể bao gồm các số từ 0 đến 9, trong đó số 0 lại có cách đọc rất đặc biệt, phụ thuộc vào trước đó có số nào khác 0 không, nên khi đọc số ra chữ chúng ta phải xét 2 phần:

  • Phần phía bên trái tính từ vị trí đó trở đi
  • Số tại vị trí đó

Các hàm sẽ viết ở dòng 5 (dòng 4 phục vụ cho mục đích chuyển đổi các từ mang yếu tố địa phương để tùy biến cách đọc cho phù hợp)

Đọc vị trí hàng trăm tỷ

Tại vị trí này là vị trí đầu tiên trong chuỗi 12 chữ số, do đó không xét phần bên trái mà xét ngay tại vị trí đó là ô C3

  • Nếu  C3=0 thì trả về giá trị rỗng, tức không đọc gì cả
  • Nếu C3 khác 0 thì sẽ đọc từ một đến chín, kèm theo đơn vị là “trăm” (hàng trăm tỷ)

Hàm tại C5 được viết như sau:

IF(C3=0,””,CHOOSE(C3,”một”,”hai”,”ba”,”bốn”,”năm”,”sáu”,”bảy”,”tám”,”chín”)&” trăm”)

Trong đó:

  • Hàm IF để xét logic tại C3 có bằng 0 hay không.
  • Hàm CHOOSE để lấy tương ứng vị trí số ở C3 với các từ phiên âm bằng chữ của số đó. Các từ phiên âm bằng chữ đặt trong dấu nháy kép vì là dữ liệu dạng text.
  • Nối hàm CHOOSE với từ “trăm” bởi dấu &, trước từ “trăm” có thêm dấu cách là ” trăm” để tạo khoảng cách giữa từ phiên âm với đơn vị. Toàn bộ phần này đặt trong mệnh đề value_if_false của hàm IF. Do đó phía sau mệnh đề này sẽ đóng ngoặc để kết thúc hàm IF.

Đọc vị trí hàng chục tỷ

Các trường hợp logic có thể xảy ra với vị trí này bao gồm:

  • Phần từ vị trí hàng chục tỷ trở về bên trái (từ C3:D3) có vị trí nào có số liệu không, hay nói cách khác là so sánh tổng C3:D3 có =0 hay không. Nếu =0 thì tức là không có nội dung gì. Khi đó sẽ không cần đọc vị trí này, kết quả là rỗng.
  • Nếu logic trên là sai, tức là có thể có 1 trong 2 vị trí ở hàng trăm tỷ hoặc chục tỷ (hoặc cả 2) thì sẽ xét chi tiết hơn, bao gồm:

1. Hàng chục tỷ và hàng tỷ không có con số nào (đều bằng 0) thì sẽ không đọc phần hàng chục tỷ (dù có số hàng trăm tỷ thì chỉ đọc hàng trăm, không đọc hàng chục)

2. Hàng chục tỷ = 0 nhưng hàng tỷ thì có (khác 0) thì sẽ đọc theo phiên âm được chọn ở D4, là “linh” hoặc “lẻ” (tức là có hàng trăm, có hàng đơn vị nhưng không có hàng chục thì sẽ đọc hàng chục là linh/lẻ tùy theo tiếng địa phương)

Công thức tại ô D5 được viết như sau:

D5=IF(SUM(C3:D3)=0,””,IF(AND(D3=0,E3=0),””,IF(AND(D3=0,E3<>0),D4,CHOOSE(D3,”mười”,”hai mươi”,”ba mươi”,”bốn mươi”,”năm mươi”,”sáu mươi”,”bảy mươi”,”tám mươi”,”chín mươi”))))

Chú ý: Hàng đơn vị khi đọc các con số bằng chữ sẽ khác với hàng trăm ở những vị trí:

  • 1 đọc là mười thay vì một, không phải đọc là mươi mà là mười
  • từ 2 đến 9 đọc có kèm theo chữ mươi chứ không phải toàn bộ ghép với chữ mươi như với hàng trăm (đoạn &” trăm”).

Tại vị trí D4 thiết lập danh sách chọn theo Data Validation/List:

Có thể thấy công thức xét nhiều hàm IF hơn, bởi logic phức tạp hơn. Trong một số logic có sử dụng thêm hàm SUM, hàm AND để xét đồng thời các vị trí.

Đọc vị trí hàng tỷ (hàng đơn vị)

Các trường hợp logic có thể xảy ra với vị trí này bao gồm:

  • Phần từ vị trí hàng tỷ trở về bên trái (từ C3:E3) có vị trí nào có số liệu không, hay nói cách khác là so sánh tổng C3:E3 có =0 hay không. Nếu =0 thì tức là không có nội dung gì. Khi đó sẽ không cần đọc vị trí này, kết quả là rỗng.
  • Nếu logic trên là sai, tức là có thể có 1 trong 3 vị trí thì sẽ xét chi tiết hơn, bao gồm:

1. Tại vị trí hàng tỷ = 0 và trước đó có số >0 thì chỉ đọc là “tỷ” mà không thèm theo phần đọc chữ số. Có thể phiên âm là “tỷ” hay “tỉ” tùy theo tiếng địa phương. Vậy có thể thiết lập data validation / list chọn tại ô E4 để lấy theo vị trí E4

2. Không đúng theo logic 1 thì tức là tại vị trí E3 có con số. Khi đó việc đọc số ở E3 ra chữ phụ thuộc theo chữ số ở phía trước nó (hàng chục). Chú ý sẽ đọc khác ở vị trí số 1 và số 5 như sau:

Nếu có phần hàng chục thì hàng đơn vị đọc là 1=mốt và 5=lăm

Nếu không có phần hàng chục thì hàng đơn vị đọc là 1=một và 5=năm

Lưu ý: Ngoài ra có thể tùy biến ở vị trí số 4 đọc là “bốn” hay “” tùy theo cách đọc từng địa phương. Có thể tạo danh sách chọn riêng cho từ này và tham chiếu ở vị trí “bốn” cho giá trị được chọn đó.

Công thức tại ô E5 được viết như sau:

E5=IF(SUM(C3:E3)=0,””,IF(AND(SUM(C3:D3)>0,E3=0),” “&E4,CHOOSE(E3,IF(D3>0,”mốt”,”một”),”hai”,”ba”,”bốn”,IF(D3>0,”lăm”,”năm”),”sáu”,”bảy”,”tám”,”chín”)&” “&E4))

Như vậy chúng ta đã đọc xong phần hàng tỷ. Kết quả như sau:

Nội dung bài viết đã dài, mời các bạn xem tiếp nội dung ở phần 2 của bài viết này tại địa chỉ:

Hướng dẫn cách tự xây dựng công thức đọc số tiền bằng chữ trong excel – Phần 2

Cảm ơn các bạn đã chú ý theo dõi!

Tham khảo:

Add-in đọc số thành chữ từ Học Excel Online