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