Giúp em hàm VBA tách số thập phân ra khỏi chuỗi?

Liên hệ QC

Duong_VBA

Thành viên chính thức
Tham gia
10/11/07
Bài viết
89
Được thích
26
Nhờ các bác chỉ giúp hàm VBA tách số thập phân trong 1 chuỗi ví dụ: "3,4 5 5,6 8 m 0,5" vào các cột tương ứng là: 3,4 - 5 - 5,6 - 8 - 10- 0,5. Với quy ước m là 10, giữa các số có ít nhất 1 dấu cách và nếu nhập"3, 4 5 5,6 8 m 0,5" hoặc "3,4 5 5,6 8 m 0 ,5" thì báo sai vì sau dấu thập phân có dấu cách. Các bác xem file đính kèm (Em nghĩ khi không có dấu cách thì không thể tách được theo đúng ý)
Cảm ơn!
 

File đính kèm

  • Tach_so_thap_phan.xls
    16.5 KB · Đọc: 31
Lần chỉnh sửa cuối:
Nhờ các bác chỉ giúp hàm VBA tách số thập phân trong 1 chuỗi ví dụ: "3,4 5 5,6 8 m 0,5" vào các cột tương ứng là: 3,4 - 5 - 5,6 - 8 - 10- 0,5. Với quy ước m là 10, giữa các số có ít nhất 1 dấu cách và nếu nhập"3, 4 5 5,6 8 m 0,5" hoặc "3,4 5 5,6 8 m 0 ,5" thì báo sai vì sau dấu thập phân có dấu cách. Các bác xem file đính kèm (Em nghĩ khi không có dấu cách thì không thể tách được theo đúng ý)
Cảm ơn!

Không cần VBA để giải quyết vấn để của bạn đâu! Bạn dùng công cụ Text to column của excel (Vào Data/Text to column)! Vọc thử vài ví dụ là ra ngay!
 
Upvote 0
Text to column không làm được bạc ạ! Vì cột đã cố định (Bảng điểm) và chữ m nó không hiểu là 10, khi gõ sai dấu thập phân nó cũng cứ tách....
 
Upvote 0
Nhờ các bác chỉ giúp hàm VBA tách số thập phân trong 1 chuỗi ví dụ: "3,4 5 5,6 8 m 0,5" vào các cột tương ứng là: 3,4 - 5 - 5,6 - 8 - 10- 0,5. Với quy ước m là 10, giữa các số có ít nhất 1 dấu cách và nếu nhập"3, 4 5 5,6 8 m 0,5" hoặc "3,4 5 5,6 8 m 0 ,5" thì báo sai vì sau dấu thập phân có dấu cách. Các bác xem file đính kèm (Em nghĩ khi không có dấu cách thì không thể tách được theo đúng ý)
Cảm ơn!

Mình thấy nếu không có dấu cách như bạn nói thì vẫn có thể tách được đúng ý, trong Text to columns cho phép chúng ta đặt vị trí phân cách vào bất kỳ vị trí nào trong chuỗi.
 
Upvote 0
Text to column không làm được bạc ạ! Vì cột đã cố định (Bảng điểm) và chữ m nó không hiểu là 10, khi gõ sai dấu thập phân nó cũng cứ tách....

1. Ctrl+H, tìm tất cả các chuỗi " ," rồi đổi thành "," và ", " đổi thành ","
2. Sau đó dùng Text to Column.

Còn chữ m thì đơn giản rồi! Tìm tất cả chữ "m" và thay bằng 10 là xong (Ctrl+H)!
 
Lần chỉnh sửa cuối:
Upvote 0
Muốn dùng VBA thì bạn làm dùng code sau:
PHP:
Function tach(so As String, Optional vitri As Integer = 1)
Dim mang() As String
so = Replace(so, ",", Application.International(xlDecimalSeparator)) 
mang() = Split(so, " ")
ReDim Preserve mang(0 To 3)
tach = Val(IIf(mang(vitri - 1) = "m", 10, mang(vitri - 1)))
End Function
Nhưng có 1 điều kiện là bạn phải tách riêng từng số ra bằng 1 dấu cách. Chứ nếu cái có cái không thì làm không được đâu.
Thân.
 

File đính kèm

  • Tach_so_thap_phan.xls
    28 KB · Đọc: 48
Lần chỉnh sửa cuối:
Upvote 0
Muốn dùng VBA thì bạn làm dùng code sau:
PHP:
Function tach(so As String, Optional vitri As Integer = 1)
Dim mang() As String
so = Replace(so, ",", ".")
mang() = Split(so, " ")
ReDim Preserve mang(0 To 3)
tach = Val(IIf(mang(vitri - 1) = "m", 10, mang(vitri - 1)))
End Function
Nhưng có 1 điều kiện là bạn phải tách riêng từng số ra bằng 1 dấu cách. Chứ nếu cái có cái không thì làm không được đâu.
Thân.
Ấy... Cái này:
so = Replace(so, ",", ".")
không ổn à nha! Sao bạn biết chắc rằng trên máy người ta xài dấu thập phân là dấu chấm!
Chắc ăn phải là
so = Replace(so, ",", Application.International(xlDecimalSeparator))
 
Upvote 0
+Thêm cái này để dù có bao dấu cách cũng được.
so = Application.WorksheetFunction.Trim(so)
+ Ở hàm trên phải tách riêng từng số ra bằng 1 dấu cách. Các bác xem có cách nào cho trường hợp số nguyên nhập liên nhau không có dấu cách (để nhanh) mà vẫn tách đúng không?
 
Upvote 0
Trường hợp điểm số là: 10 2 0 5 thì hiển thị thế nào? có phải "m2 5". Và điểm 0 5.5 2 1 thì hiển thị " 5,5 21"?
 
Lần chỉnh sửa cuối:
Upvote 0
+Thêm cái này để dù có bao dấu cách cũng được.
so = Application.WorksheetFunction.Trim(so)
+ Ở hàm trên phải tách riêng từng số ra bằng 1 dấu cách. Các bác xem có cách nào cho trường hợp số nguyên nhập liên nhau không có dấu cách (để nhanh) mà vẫn tách đúng không?
Nếu trong chuổi có 1 nhóm số được nhập liên tiếp nhau (không có dấu cách) thì xem cái này:
Tách số không dùng vòng lập
Còn với bài toán trên thì đúng là cần phải dùng TRIM
Mã:
so = WorksheetFunction.Trim(Replace(so, ",", Application.International(xlDecimalSeparator)))
 
Upvote 0
Cái TRIM chỉ dùng để cho việc ghi thừa khoảng cách thôi chứ đâu có tác dụng nhiều đâu!
PHP:
Function tach(so As String, Optional vitri As Integer = 1)
Dim mang() As String
so = Trim(Replace(so, ",", Application.International(xlDecimalSeparator)))
i = InStr(1, so, Application.International(xlDecimalSeparator))
Select Case i
Case Is <> 0:
    mang() = Split(so, " ")
    ReDim Preserve mang(0 To 3)
    tach = Val(IIf(mang(vitri - 1) = "m", 10, mang(vitri - 1)))
Case Is = 0:
    ReDim Preserve mang(0 To 3)
    For i = 1 To 4
        mang(i - 1) = Mid(so, i, 1)
    Next
    tach = Val(IIf(mang(vitri - 1) = "m", 10, mang(vitri - 1)))
End Select
End Function
Em viết code như vầy đề sử lý trường hợp viết liền nè!
Thân.
 

File đính kèm

  • Tach_so_thap_phan01.xls
    30 KB · Đọc: 48
Upvote 0
Cảm ơn bác Po_Pikachu.
Trường hợp cuối nhập 5,5 7,5 7 8,5 (Có các dấu cách) khi mở file của bác thì tách đúng nhưng khi Click kép vào ô nó chỉ còn phần nguyên là: 5 7 7 và 8 tại sao vậy bác. Bác chỉ giúp trường hợp có cả 2 loại số thập phân và nguyên xếp liền nhau nhé!
 
Upvote 0
Cái này thì bác thử định dạng lại là General trong Format Cells xem. Có thể do định dạng không phù hợp thôi.

Còn đây là file bổ sung thêm phần viết liền không dấu cách nè!
Thân.
 

File đính kèm

  • Tach_so_thap_phan02.xls
    29.5 KB · Đọc: 40
Lần chỉnh sửa cuối:
Upvote 0
Bạn có thể dùng cái này của mình thì làm xong dễ thôi mà
 

File đính kèm

  • Tien ich Excel.rar
    539 KB · Đọc: 88
Lần chỉnh sửa cuối:
Upvote 0
Thì bạn phải đưa cách lên chứ!
Cứ đưa lên thoải mái đi. Chúng ta cùng học hỏi lẩn nhau.
Thân.
 
Upvote 0
Nhờ mọi người giúp đỡ VBA tách số thập phân ra khỏi chuổi VD ô A1 là P4.5 giờ tách thành 4.5
 
Upvote 0
Tương tự tách vậy giúp em cái này với.. Xin cảm ơn
 

File đính kèm

  • Tach ngay.xlsm
    15.2 KB · Đọc: 13
Upvote 0
Cảm ơn bạn mình làm được rồi dùng TextToColumns:
Set ws = ThisWorkbook.Sheets("Tong Hop")
ws.Columns(5).Copy
ws.Columns(9).PasteSpecial xlPasteValues
lR = Worksheets("Tong Hop").Cells(Rows.Count, 1).End(xlUp).Row
'lR = ws.Cells(.Rows.Count, "I").End(xlUp).Row
'lR = Excel.WorksheetFunction.CountA(ws.Range("I:I"))
For i = 1 To lR
ws.Cells(i, 9).Value = Excel.WorksheetFunction.Substitute(ws.Cells(i, 9).Value, " ", "")

If Right(ws.Cells(i, 9).Value, 1) = ";" Then
ws.Cells(i, 9).Value = Left(ws.Cells(i, 9).Value, Len(ws.Cells(i, 9).Value) - 1)
End If
Next
'TextToColumns
ws.Range("I1:I20").TextToColumns Destination:=ws.Range("I1:I20"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, _
Tab:=True, Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)), _
DecimalSeparator:=";", ThousandsSeparator:=",", TrailingMinusNumbers:=False
 
Upvote 0
Web KT
Back
Top Bottom