Hàm VBA phân cách định dạng số
Chào ACE!
Em mới bắt đầu với VBA. Em có tạo hàm để chuyển đổi định dạng số sang chữ số có dấu phân cách hàng nghìn và phần thập phân.
Áp dụng hàm cho những ô giá trị số thông thường (như -0,1 hay 111,123 hay -100000,21234 hay 10000231…) thì được.
Tuy nhiên khi áp dụng với ô là kết quả của 1 hàm thì có trục trặc. Ví dụ như khi áp dụng với ô có giá trị như là: =9*1,1 hoặc =5*1000… thì được, nhưng khi áp dụng với =1,1*100 hay 100*1,1 thì báo lỗi value (mặc dù áp dụng với giá trị 110 chạy bình thường).
Code VBA em viết như sau. Mong nhận được sự giúp đỡ của ACE ạ! Em cảm ơn!Function TEXTNUM(gt As Variant) As String If gt < 0 Then dau = "-" Else dau = "" duong = Abs(gt) nguyen = Application.WorksheetFunction.RoundDown(duong, 0) If duong = nguyen Then ptp = "" ElseIf duong <> nguyen Then ptp = "," & mid(duong & "_", Application.WorksheetFunction.Find(",", duong & "_", 1) + 1, Application.WorksheetFunction.Find("_", duong & "_", 1) - Application.WorksheetFunction.Find(",", duong & "_", 1) - 1) End If a = nguyen b = Len(a) pn = "" Do While b > 3 pn = "." & right(a, 3) & pn b = b - 3 a = left(a, b) Loop If b <= 3 Then pn = a & pn TEXTNUM = dau & pn & ptp End FunctionHàm text không chuyển đổi linh hoạt được phần thập phân. Mỗi 1 số lại phải áp dụng 1 hàm text khác nhau (ví dụ 1000000000 thì xài text("#.###"), 1,1 thì xài text("#,#"), 2000,22 thì xài text("#.###,##"), do vậy rất rườm rà mà với biến số thay đổi thì lại phải đổi hàm text).
Vậy bạn thử thay nguyen = Application.WorksheetFunction.RoundDown(duong, 0) bằng
On Error Resume Next
nguyen = Val(Left(gt, Application.WorksheetFunction.Find(",", gt)))
If Err.Number Then nguyen = gt
www.giaiphapexcel.com/diendan/threads/h%C3%A0m-vba-ph%C3%A2n-c%C3%A1ch-%C4%91%E1%BB%8Bnh-d%E1%BA%A1ng-s%E1%BB%91.167725/#post-1119302
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Định dạng trực tiếp thì hơi khó chứ dùng hàm thì muốn viết sao cũng được hết.
Nếu máy bạn thiết lập như vậy thì công thức sửa dấu chấm thành dấu phẩy và ngược lại. Công thức như sau:
Trong VBA cũng vậy thôi có khác gì đâu bạn.
Em ở bên định giá nên sử dụng nhiều kiểu dữ liệu (giá trị tài sản lớn, diện tích không nguyên hay tỉ lệ %…). Cơ bản nhiều loại dữ liệu nên mới muốn làm Function để xài cho tiện vì công việc thôi bác.
Liên quan tới rất nhiều giấy tờ, hợp đồng nên cần sự chính xác cao.
Có rồi bác