Hàm đọc số thành chữ tiếng Việt cho Google Sheets (2 người xem)

Người dùng đang xem chủ đề này

Maika8008

Thành viên gạo cội
Tham gia
12/6/20
Bài viết
4,905
Được thích
5,903
Donate (Momo)
Donate
Giới tính
Nam
Hàm VND hỗ trợ cho anh em có làm việc ở Google Sheets:

JavaScript:
function VND(numcurrency) {
  var ChuSo = ["không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"];
  var DonViTien = "đồng";

  numcurrency = Math.round(numcurrency);
  if (numcurrency === 0) return "Không " + DonViTien;
  if (numcurrency > 922337203685477) {
    return "Không đổi được số lớn hơn 922.337.203.685.477";
  }

  // Tách thành các cụm 3 chữ số
  var parts = [];
  while (numcurrency > 0) {
    parts.unshift(numcurrency % 1000);
    numcurrency = Math.floor(numcurrency / 1000);
  }

  var units = ["", "nghìn", "triệu", "tỷ", "nghìn tỷ", "triệu tỷ"];
  var result = "";

  for (var i = 0; i < parts.length; i++) {
    var group = parts[i];
    var isFirstGroup = (i === 0);
    if (group === 0) continue;

    var hundred = Math.floor(group / 100);
    var ten = Math.floor((group % 100) / 10);
    var unit = group % 10;
    var str = "";

    if (hundred > 0) {
      str += ChuSo[hundred] + " trăm ";
      if (ten === 0 && unit > 0) str += "lẻ ";
    } else if (!isFirstGroup && (ten > 0 || unit > 0)) {
      str += "không trăm ";
      if (ten === 0 && unit > 0) str += "lẻ ";
    }

    if (ten > 1) {
      str += ChuSo[ten] + " mươi ";
      if (unit === 1) str += "mốt ";
      else if (unit === 5) str += "lăm ";
      else if (unit > 0) str += ChuSo[unit] + " ";
    } else if (ten === 1) {
      str += "mười ";
      if (unit === 1) str += "một ";
      else if (unit === 5) str += "lăm ";
      else if (unit > 0) str += ChuSo[unit] + " ";
    } else if (ten === 0 && unit > 0) {
      str += ChuSo[unit] + " ";
    }

    // Thêm đơn vị và dấu phẩy nếu chưa phải cụm cuối
    str = str.trim() + " " + units[parts.length - 1 - i];
    if (i < parts.length - 1) str += ",";
    result += str + " ";
  }

  result = result.trim();
  result = result.charAt(0).toUpperCase() + result.slice(1) + " " + DonViTien;
  return result;
}
 
Hàm VND này đọc không ngắt phẩy hay chấm. Không ổn lắm bác.
Ngắt để nhìn dễ định vị được các mốc nghìn, triệu, tỷ, lẻ. Nếu mà đọc vài lần mới hiểu được số thì cũng mệt.
Chưa kể được in lên giấy. Nhiều khi máy in nó xấu, nó mờ. Thì thôi đau mắt.
Thời đại AI bác ngâm cứu lên đoạn mã có phẩy chấm ngắt cho hiện đại.

Em có viết vui cái hàm SpellNumVN, nhiều thiết lập, ngâm đưa lên Google Sheets cũng đơn giản
https://www.giaiphapexcel.com/diendan/threads/160234/

Bác nhắc hàm đọc số mới nhớ, trên Excel 365 có định nghĩa dấu phân cách thập phân ngược đời trong VBA
Nó lại ngược với VBA Excel khác, kết quả phép so sánh "1.1" = 1.1 nó lại không bằng nhau. Điều này bắt buộc phải dùng chuyển đổi dấu. Gây thêm bước xử lý làm chậm mã. Đều này đã được kiểm tra kỹ lưỡng kể cả thay đổi thiết lập dấu trong System hay Option.
Nên trong VBA cần xử lý thêm vài bước thì hàm đọc số mới chuẩn hóa.
 
Lần chỉnh sửa cuối:

Bài viết mới nhất

Back
Top Bottom