Không cần phải duyệt hết chuỗi. Sử dụng 1 biến đếm để đếm số chuỗi số liên tục và chỉ duyệt đến hết chuỗi số cần lấy. -
30
Không cần phải duyệt hết chuỗi. Sử dụng 1 biến đếm để đếm số chuỗi số liên tục và chỉ duyệt đến hết chuỗi số cần lấy.
Dạ. Cám ơn Anh rất nhiều. Em sửa lại như thế này có được không ạ PHP:
Function ExtractNumber(ByVal txt As String, ByVal N As Long) As Double
Dim I As Long, strTemp As String, atmp, Str As String
txt = Replace(txt, ",", ".")
For I = 1 To Len(txt)
Select Case Asc(Mid(txt, I, 1))
Case 40 To 57, 94
strTemp = strTemp & Mid(txt, I, 1)
Case Else
strTemp = strTemp & " "
End Select
Str = Application.Trim(strTemp)
atmp = Split(Str, " ")
If UBound(atmp) > N - 1 Then Exit For
Next I
If Len(Str) Then ExtractNumber = Val(Split(Str, " ")(N - 1))
End Function -
31
Dạ. Cám ơn Anh rất nhiều. Em sửa lại như thế này có được không ạ
PHP: Function ExtractNumber(ByVal txt As String, ByVal N As Long) As Double
Dim I As Long, strTemp As String, atmp, Str As String
txt = Replace(txt, ",", ".")
For I = 1 To Len(txt)
Select Case Asc(Mid(txt, I, 1))
Case 40 To 57, 94
strTemp = strTemp & Mid(txt, I, 1)
Case Else
strTemp = strTemp & " "
End Select
Str = Application.Trim(strTemp)
atmp = Split(Str, " ")
If UBound(atmp) > N - 1 Then Exit For
Next I
If Len(Str) Then ExtractNumber = Val(Split(Str, " ")(N - 1))
End Function
Đây là 1 cách, bạn tham khảo. Mã:
Option Explicit
Sub TachSo()
Dim SArr, Res
Dim i
SArr = Sheet1.Range("b11", Sheet1.Range("b65000").End(xlUp))
ReDim Res(1 To UBound(SArr), 1 To 2)
With CreateObject("VbScript.RegExp")
.Global = True
.IgnoreCase = True
.Pattern = "\D+(\d+)[x](\d+).*"
For i = 1 To UBound(SArr)
If .test(SArr(i, 1)) Then
Res(i, 1) = .Replace(SArr(i, 1), "$1")
Res(i, 2) = .Replace(SArr(i, 1), "$2")
End If
Next i
End With
With Sheet1
.Range("c11", "d" & UBound(Res) + 10).ClearContents
.Range("c11", "d" & UBound(Res) + 10) = Res
End With
End Sub
1 -
32
Đây là 1 cách, bạn tham khảo.
Mã: Option Explicit
Sub TachSo()
Dim SArr, Res
Dim i
SArr = Sheet1.Range("b11", Sheet1.Range("b65000").End(xlUp))
ReDim Res(1 To UBound(SArr), 1 To 2)
With CreateObject("VbScript.RegExp")
.Global = True
.IgnoreCase = True
.Pattern = "\D+(\d+)x.*"
For i = 1 To UBound(SArr)
If .test(SArr(i, 1)) Then
Res(i, 1) = .Replace(SArr(i, 1), "$1")
Res(i, 2) = .Replace(SArr(i, 1), "$2")
End If
Next i
End With
With Sheet1
.Range("c11", "d" & UBound(Res) + 10).ClearContents
.Range("c11", "d" & UBound(Res) + 10) = Res
End With
End Sub
1Cái Code này nó coi dấu "." hoặc dấu "," là kiểu chuỗi ạ
Ví dụ chuỗi tại ô A1 là: AA123.35bbb235
+ ExtractNumber(A1,1) =123
+ ExtractNumber(A1,2)=35
+ ExtractNumber(A1,3)=235 Chủ bài 30:Bạn cố gắng quá độ cho nên code bị lỏng.
1. Thử số 1,234.5 xem
2. Thử vấn đề tôi nói ở bài 26 xem -
34
Cái Code này nó coi dấu "." hoặc dấu "," là kiểu chuỗi ạ
Ví dụ chuỗi tại ô A1 là: AA123.35bbb235
+ ExtractNumber(A1,1) =123
+ ExtractNumber(A1,2)=35
+ ExtractNumber(A1,3)=235
Tôi làm theo dữ liệu bài 1 mà. Nếu muốn số thập phân thì sửa lại như sau: Mã:
Option Explicit
Sub TachSo()
Dim SArr, Res
Dim i
SArr = Sheet1.Range("b11", Sheet1.Range("b65000").End(xlUp))
ReDim Res(1 To UBound(SArr), 1 To 2)
With CreateObject("VbScript.RegExp")
.Global = True
.IgnoreCase = True
.Pattern = "\D+(\d+)[x](\d+).*"
For i = 1 To UBound(SArr)
If .test(SArr(i, 1)) Then
Res(i, 1) = .Replace(SArr(i, 1), "$1")
Res(i, 2) = .Replace(SArr(i, 1), "$2")
End If
Next i
End With
With Sheet1
.Range("c11", "d" & UBound(Res) + 10).ClearContents
.Range("c11", "d" & UBound(Res) + 10) = Res
End With
End Sub
3 -
35
Tôi làm theo dữ liệu bài 1 mà. Nếu muốn số thập phân thì sửa lại như sau:
Mã: Option Explicit
Sub TachSo()
Dim SArr, Res
Dim i
SArr = Sheet1.Range("b11", Sheet1.Range("b65000").End(xlUp))
ReDim Res(1 To UBound(SArr), 1 To 2)
With CreateObject("VbScript.RegExp")
.Global = True
.IgnoreCase = True
.Pattern = "\D+(\d+)x.*"
For i = 1 To UBound(SArr)
If .test(SArr(i, 1)) Then
Res(i, 1) = .Replace(SArr(i, 1), "$1")
Res(i, 2) = .Replace(SArr(i, 1), "$2")
End If
Next i
End With
With Sheet1
.Range("c11", "d" & UBound(Res) + 10).ClearContents
.Range("c11", "d" & UBound(Res) + 10) = Res
End With
End Sub
3Hay là mình tìm cái dấu thập phân bằng lệnh này ạ: Application.DecimalSeparator Em là thành viên mới tham gia và thấy VBA thật quan trọng và tuyệt vời và đang muốn học để mở rộng kiến thức! mong các anh chị chỉ bảo địa điểm có thể dăng ký học từ cơ bản được không ạ. em ở gò vấp có địa điểm nào gần đây dạy ngoài giờ không các anh chị! -
37
Hay là mình tìm cái dấu thập phân bằng lệnh này ạ: Application.DecimalSeparator
Giả sử bạn đưa code đó vào file, dùng công thức trên sheet sau đó chuyển file cho người khác họ mở trên máy có thiết lập khác thì điều gì sẽ xảy ra? |