Giúp xử lý dữ liệu dạng số (1 người xem)

Liên hệ QC

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

tuansando

Thành viên chính thức
Tham gia
9/8/11
Bài viết
96
Được thích
43
chào các bạn.

mình có 1 macro để xử lý dữ liệu và đang cần 1 đoạn mã xử lý dữ liệu dạng số như sau:

có 1 cell sẽ nhập số được format dạng vietnamese: -1.234,12 (#.##0,00)

số này có giá trị thay đổi (vì được nhập vào mà)

mình cần tách số nhập vào chia 2 phần
phần 1: phần nguyên của số đó
phần 2: phần thập phân của số đó.

lưu ý: số nhập vào có giá trị thay đổi, tối đa 12 ký số, có thể có phần thập phân hoặc không.

cảm ơn các bạn.
 
Lần chỉnh sửa cuối:
Hàm TRUNC để lấy phần nguyên cú pháp =TRUNC( số)
Hàm MOD để lấy phần thập phân cú pháp = MOD ( số, 1)
 
trong vba không cho dùng 2 hàm này thì phải.

em làm như này

dim thapphan as byte

thapphan = mod(so,1) (lúc chạy báo lỗi ngay dòng này)
Trong VBA không có hàm MOD, chỉ có toán tử Mod
Ví dụ
123 Mod 2 tương đương với hàm MOD(123, 2) trong Excel
------------
Nói thêm: Bạn Dim thapphan as byte e rằng không ổn ---> Chắc ăn nên Dim thapphan as Long
 
hình như bạn hiểu nhầm ý mình.

có 1 cell sẽ nhập số được format dạng vietnamese: -1.234,12 (#.##0,00)

số này có giá trị thay đổi (vì được nhập vào mà)

mình cần tách số nhập vào chia 2 phần
phần 1: phần nguyên của số đó
phần 2: phần thập phân của số đó.

vd só đó là: 1.234,56

mình càn tách 2 phần:

phần nguyên: 1234
phần thập phân: 56

vậy đó. và phải dùng bằng vba.
 
hình như bạn hiểu nhầm ý mình.

vd só đó là: 1.234,56
mình càn tách 2 phần:
phần nguyên: 1234
phần thập phân: 56
vậy đó. và phải dùng bằng vba.
Nếu bạn đảm bảo rằng các số đều định dạng 2 chữ số thập phân thì có thể sử dụng code như sau:
- Phần nguyên: Nguyen = Int(So)
- Phần thập phân: Phan = (So - Nguyen) * 100
 
Nếu bạn đảm bảo rằng các số đều định dạng 2 chữ số thập phân thì có thể sử dụng code như sau:
- Phần nguyên: Nguyen = Int(So)
- Phần thập phân: Phan = (So - Nguyen) * 100

Nên biết rằng VB gặp rắc rối với vụ tính phần nguyên và thập phân
Sẽ có lúc sai sót khi làm phép trừ So - INT(So)...
Ngoài ra, ta biết số thập phân dài bao nhiêu mà nhân
Vậy nên cách chắc ăn nhất là dùng phương pháp xử lý chuổi, tách lấy từ dấu thập phân trở về sau
 
số nhập vào thì có 1-2 ký số phần thập phân chứ không phải lúc nào cũng là 2. bạn giúp mình cách xử lý chuỗi cũng được.
 
số nhập vào thì có 1-2 ký số phần thập phân chứ không phải lúc nào cũng là 2. bạn giúp mình cách xử lý chuỗi cũng được.
Bạn nhập số vào ô A1, định dạng nếu cần thiết, sau đó chạy thử code sau xem sao:
PHP:
Sub Test()
    Dim Sep As String
    Sep = Application.DecimalSeparator
    [A2] = Left([A1], InStr([A1], Sep) - 1)
    [A3] = Mid([A1], InStr([A1], Sep) + 1, Len([A1]))
End Sub
 
Lần chỉnh sửa cuối:
có đc hay ko đó.

vì số nhập vào có độ dài bất kỳ <=12
 
không ổn.

không thấy chạy.
 
có đc hay ko đó.

vì số nhập vào có độ dài bất kỳ <=12
không ổn.

không thấy chạy.
Đang định nghiên cứu giải pháp cho bạn nhưng phải dừng lại một xíu đã, góp ý với bạn một xíu đã, rồi chúng ta bàn tiếp:
Bạn thử xem lại cách viết bài của bạn đi nhé. Trong khi người khác thì cố gắng tìm giải pháp để giải quyết vấn đề cho bạn thì bạn chỉ trả lời bằng những câu cộc lốc như vậy, thậm chí chẳng thèm trích dẫn rằng mình đang trả lời cho ai nữa, bạn thấy như vậy có đáng không?! Tôi thật sự thấy bất bình về điều đó đấy.
Xin góp ý thẳng thắn với bạn rằng: Nếu bạn còn viết bài một cách vô trách nhiệm như vậy thì tôi tin chắc rằng chẳng có ai muốn giúp đỡ bạn nữa đâu.
 
lúc trước đang dùng máy ở ngoài, không có bộ gõ.

vừa trả lời bài cảu bạn xong, load lại không thầy phần trả lời đâu nữa.

nên viết tiếp mấy câu nữa.

thành thật !$@!!!$@!!
 
lúc trước đang dùng máy ở ngoài, không có bộ gõ.

vừa trả lời bài cảu bạn xong, load lại không thầy phần trả lời đâu nữa.

nên viết tiếp mấy câu nữa.

thành thật !$@!!!$@!!
OK. Vậy thì chúng ta lại bàn tiếp: Trong code ở bài #10, nếu nhập vào số nguyên thì code "tèo". Thôi thì sửa lại như vầy cho chắc:
PHP:
Sub Test()
    Dim Sep As String
    Sep = Application.DecimalSeparator
    If InStr([A1], Sep) = 0 Then
        [A2] = [A1]: [A3] = 0
    Else
        [A2] = Left([A1], InStr([A1], Sep) - 1)
        [A3] = Mid([A1], InStr([A1], Sep) + 1, Len([A1]))
    End If
End Sub
Bạn chạy thử code và cho ý kiến nhé.
 
Web KT

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

Back
Top Bottom