Chào các bác.
Em có code tách từng số trong chuỗi nhưng bị lỗi trường hợp số có dấu "."
Eụ thể với dòng "Ống gió tôn dày 0.58, kt 700x150" em dùng lệnh "=CtoNPlus(A1;1)" thì ra kết quả là 58700. Em mong muốn kết quả là 0.58
Em dùng lệnh "=CtoNPlus(A1;2)" thì ra kết quả là 150. Em mong muốn kết quả là 700.
Có bác nào am hiểu về đoạn mã này thì sửa lại giúp em với.
Em xin cảm ơn.
Code:
Public Newstr As String
Function CtoN(Mystr As String, Optional Dautp As String) As Double
Dim Kqng, Kqtp, Neg As Double, Kqtam As String
Dim Sotp As Double, Le As Byte
Neg = 1
Le = 0
For i = 1 To Len(Mystr)
tam = Mid(Mystr, i, 1)
Select Case tam
Case 0 To 9
Kqtam = Kqtam & tam
Case "-"
Neg = -1
Case Dautp
Kqng = Kqtam
Le = 1
Mystr = Right(Mystr, Len(Mystr) - i)
Kqtp = CtoN(Mystr)
Sotp = Kqtp * 10 ^ (-Len(Kqtp))
End Select
Next i
Select Case Le
Case 0
CtoN = IIf(Kqtam = "", 0, Kqtam)
Case 1
CtoN = Kqng + Sotp
End Select
CtoN = CtoN * Neg
End Function
Function CtoN1st(ByVal Mystr As String, Optional Dautp As String) As Double
Dim Kqng, Kqtp, Neg As Double, Kqtam As String
Dim Sotp As Double, Le As Byte, NewStr2 As String
Neg = 1
Le = 0
For i = 1 To Len(Mystr)
tam = Mid(Mystr, i, 1)
Select Case tam
Case 0 To 9
Kqtam = Kqtam & tam
If IsNumeric(Mid(Mystr, i + 1, 1)) = False And _
Mid(Mystr, i + 1, 1) <> "," And Mid(Mystr, i + 1, 1) <> "." Then
Newstr = Right(Mystr, Len(Mystr) - i)
Exit For
End If
Case "-"
Neg = -1
Case Dautp
Kqng = Kqtam
Le = 1
NewStr2 = Right(Mystr, Len(Mystr) - i)
Kqtp = CtoN1st(NewStr2)
Sotp = Kqtp * 10 ^ (-Len(Kqtp))
End Select
Next i
Select Case Le
Case 0
CtoN1st = IIf(Kqtam = "", 0, Kqtam)
Case 1
CtoN1st = Kqng + Sotp
End Select
CtoN1st = CtoN1st * Neg
End Function
Function CtoNPlus(Mystr As String, sttchuoi As Byte, Optional Dautp As String) As Double
Newstr = Mystr
For i = 1 To sttchuoi
If Len(Newstr) < 2 Then Exit For
CtoNPlus = CtoN1st(Newstr, Dautp)
Next i
Newstr = ""
End Function
Em có code tách từng số trong chuỗi nhưng bị lỗi trường hợp số có dấu "."
Eụ thể với dòng "Ống gió tôn dày 0.58, kt 700x150" em dùng lệnh "=CtoNPlus(A1;1)" thì ra kết quả là 58700. Em mong muốn kết quả là 0.58
Em dùng lệnh "=CtoNPlus(A1;2)" thì ra kết quả là 150. Em mong muốn kết quả là 700.
Có bác nào am hiểu về đoạn mã này thì sửa lại giúp em với.
Em xin cảm ơn.
Code:
Public Newstr As String
Function CtoN(Mystr As String, Optional Dautp As String) As Double
Dim Kqng, Kqtp, Neg As Double, Kqtam As String
Dim Sotp As Double, Le As Byte
Neg = 1
Le = 0
For i = 1 To Len(Mystr)
tam = Mid(Mystr, i, 1)
Select Case tam
Case 0 To 9
Kqtam = Kqtam & tam
Case "-"
Neg = -1
Case Dautp
Kqng = Kqtam
Le = 1
Mystr = Right(Mystr, Len(Mystr) - i)
Kqtp = CtoN(Mystr)
Sotp = Kqtp * 10 ^ (-Len(Kqtp))
End Select
Next i
Select Case Le
Case 0
CtoN = IIf(Kqtam = "", 0, Kqtam)
Case 1
CtoN = Kqng + Sotp
End Select
CtoN = CtoN * Neg
End Function
Function CtoN1st(ByVal Mystr As String, Optional Dautp As String) As Double
Dim Kqng, Kqtp, Neg As Double, Kqtam As String
Dim Sotp As Double, Le As Byte, NewStr2 As String
Neg = 1
Le = 0
For i = 1 To Len(Mystr)
tam = Mid(Mystr, i, 1)
Select Case tam
Case 0 To 9
Kqtam = Kqtam & tam
If IsNumeric(Mid(Mystr, i + 1, 1)) = False And _
Mid(Mystr, i + 1, 1) <> "," And Mid(Mystr, i + 1, 1) <> "." Then
Newstr = Right(Mystr, Len(Mystr) - i)
Exit For
End If
Case "-"
Neg = -1
Case Dautp
Kqng = Kqtam
Le = 1
NewStr2 = Right(Mystr, Len(Mystr) - i)
Kqtp = CtoN1st(NewStr2)
Sotp = Kqtp * 10 ^ (-Len(Kqtp))
End Select
Next i
Select Case Le
Case 0
CtoN1st = IIf(Kqtam = "", 0, Kqtam)
Case 1
CtoN1st = Kqng + Sotp
End Select
CtoN1st = CtoN1st * Neg
End Function
Function CtoNPlus(Mystr As String, sttchuoi As Byte, Optional Dautp As String) As Double
Newstr = Mystr
For i = 1 To sttchuoi
If Len(Newstr) < 2 Then Exit For
CtoNPlus = CtoN1st(Newstr, Dautp)
Next i
Newstr = ""
End Function