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