Bạn thường lấy dữ liệu từ nguồn ngoài, chẳng hạn từ Internet, trong đó có dữ liệu số xen lẫn chữ như: “1,254.00VND” hoặc “USD 2,500.00”, thậm chí còn phức tạp hơn.
Và cũng có khi bạn đã nhập liệu hỗn hợp text và số không theo quy luật nào để có thể lấy riêng số ra bằng các hàm tách chuỗi thông thường.
Dùng 1 hàm tự tạo viết bằng VBA, bạn có thể trích xuất riêng phần số ra, dù cho chuỗi có kiểu dạng gì đi nữa.

Bạn hãy nhấn Alt-F11 để vào cửa sổ VBA, insert 1 module và dán đoạn code sau vào:

PHP Code:
Function ExtractNumber(rCell As Range
Dim lCount As Long 
Dim sText 
As String 
Dim lNum 
As String 
sText 
rCell 
For lCount Len(sTextTo 1 Step -
If IsNumeric(Mid(sTextlCount1)) Then 
lNum 
Mid(sTextlCount1) & lNum 
End 
If 
Next lCount 
ExtractNumber 
CLng(lNum
End Function 
Vào lại Excel, trong ô B1 gõ dữ liệu số xen lẫn text tuỳ ý, trong ô kế bên C1 gõ công thức:
=ExtractNumber(B1)
Ta sẽ có kết quả như hình:

[Excel] Trích xuất dữ liệu số trong 1 chuỗi bằng VBA


Bổ sung:

Vẫn còn chút vấn đề: nếu dữ liệu là số thập phân như ô B5, hoặc dữ liệu gồm 2 nhóm số riêng biệt trở lên như ô B4, kết quả sẽ không như ý muốn.

1. Để giải quyết vấn đề số thập phân, ptm0412 có 1 hàm khác:


PHP Code:
Function CtoN(Mystr As StringOptional Dautp As String) As Double 
Dim Kqng
KqtpNeg  As DoubleKqtam As String 
Dim Sotp 
As DoubleLe As Byte 
Neg 

Le 

For 1 To Len(Mystr
    
tam Mid(Mystri1
    
Select Case tam 
        
Case 0 To 9 
            Kqtam 
Kqtam tam 
        
Case "-" 
            
Neg = -
        
Case Dautp 
            Kqng 
Kqtam 
            Le 

            Mystr 
Right(MystrLen(Mystr) - i
            
Kqtp CtoN(Mystr
            
Sotp Kqtp 10 ^ (-Len(Kqtp)) 
        
End Select 
Next i 
Select 
Case Le 
Case 
CtoN 
IIf(Kqtam ""0Kqtam
Case 

CtoN 
Kqng Sotp 
End Select 
CtoN 
CtoN Neg 
End 
Function 
Ghi chú:- Khi sử dụng hàm này, bạn sẽ thêm vào hàm 1 tham số cho biết dấu thập phân là dấu nào, “,” hay “.”. Thí dụ =CtoN(“USD 14255.20”,”.”), và nếu bạn biết chắc là số nguyên thì không cần thêm.
- Hàm này đọc được cả số âm nếu ký hiệu số âm là dấu trừ và đứng trước số.

[Excel] Trích xuất dữ liệu số trong 1 chuỗi bằng VBA
2. Để giải quyết vấn đề nhiều nhóm số khác nhau trong chuỗi, Ptm0412 cũng có 1 hàm:

PHP Code:
 Function CtoNPlus(Mystr As Stringsttchuoi As ByteOptional Dautp As String) As Double 
Newstr 
Mystr 
For 1 To sttchuoi 
If Len(Newstr) < 2 Then Exit For 
CtoNPlus CtoN1st(NewstrDautp
Next i 
Newstr 
"" 
End Function 
PHP Code:
Function CtoN1st(ByVal Mystr As StringOptional Dautp As String) As Double 
Dim Kqng
KqtpNeg  As DoubleKqtam As String 
Dim Sotp 
As DoubleLe As ByteNewStr2 As String 
Neg 

Le 

For 1 To Len(Mystr
    
tam Mid(Mystri1
    
Select Case tam 
        
Case 0 To 9 
            Kqtam 
Kqtam tam 
        
If IsNumeric(Mid(Mystr11)) = False And 
        Mid
(Mystr11) <> "," And Mid(Mystr11) <> "." Then 
      Newstr 
Right(MystrLen(Mystr) - i

        Exit For 
        
End If 
        Case 
"-" 
            
Neg = -
        
Case Dautp 
            Kqng 
Kqtam 
            Le 

            NewStr2 
Right(MystrLen(Mystr) - i
            
Kqtp CtoN1st(NewStr2
            
Sotp Kqtp 10 ^ (-Len(Kqtp)) 

        
End Select 
Next i 
Select 
Case Le 
Case 
CtoN1st 
IIf(Kqtam ""0Kqtam
Case 


CtoN1st 
Kqng Sotp 
End Select 
CtoN1st 
CtoN1st Neg 
End 
Function 
Cú pháp hàm: CtoNPlus(Mystr , sttchuoi, [Dautp])
Sttchuoi là số thứ tự nhóm số trong chuỗi, Dautp là ký tự dấu phân cách thập phân.


[Excel] Trích xuất dữ liệu số trong 1 chuỗi bằng VBA


View more latest threads same category: