tranhungdao12a3
Thành viên tiêu biểu
- Tham gia
- 29/11/07
- Bài viết
- 427
- Được thích
- 402
Trong cột A có nhiều chuỗi số nhưng chỉ tách chuỗi có 12 số ra thôi. Dòng nào không có thì bỏ qua:
VBA cũng được anh, anh Befaint đã giải bằng công thức rồi. Nhưng đó chỉ là 1 cách giải, còn nếu anh làm bằng VBA hay cách khác thì giải cho mọi người cùng xem. Có nhiều cách giải để có anh em tham khảo với, chứ chỉ giới hạn một cách giải.......thì mọi người đâu có học hỏi được nhiều. Em cũng thích đọc bài viết nào mà có nhiều cách giải, nhiều đáp án.Có cho dùng hàm tự tạo không? Hahaha ...
.
=IFERROR(FILTERXML("<m><n>"&SUBSTITUTE(TRIM(CONCAT(TEXT(MID(A2,SEQUENCE(,LEN(A2)),1),"0;;0; ")))," ","</n><n>")&"</n></m>","//n[string-length()=12]"),"")
Tham khảo cách không dùn công thức.Chào các anh chị!
Em có vấn đề nhờ anh chị giúp công thức:
Em cần tách chuỗi số dài 12 số trong chuỗi cột A sang cột B.
Trong cột A có nhiều chuỗi số nhưng chỉ tách chuỗi có 12 số ra thôi. Dòng nào không có thì bỏ qua:
View attachment 279062
Em cảm ơn!
Dòng 29 chuỗi có 11 số.Tham khảo cách không dùn công thức.
Copy số tài khoản ở A5, A6 sang C5, C6
trỏ chuột ở C7-->ấn Ctrl+E (Flash Fill).
View attachment 279070
Nó không phân biệt số và chuỗi, nên là:If Len(Tmp(J)) = 12 Then
If tmp(j) like "############" thenNó không phân biệt số và chuỗi, nên là:
If tmp(j) like "############" then
.
Được bạn, dùng công thức hay VBA, Power query,... gì cũng được bạn nhé!Có cho dùng hàm tự tạo không? Hahaha ...
.
Được bạn, dùng công thức hay VBA, Power query,... gì cũng được bạn nhé!
Public Function TachSo(ByVal s As String, ByVal n As Long) As String
'n: chieu dai cua so
Dim i As Long, v As Variant, tmp As String
For i = 1 To Len(s)
If Mid(s, i, 1) Like "#" = False Then Mid(s, i, 1) = " "
Next i
For Each v In Split(Application.Trim(s), " ")
If Len(v) = n Then tmp = tmp & ", " & v
Next v
If Len(tmp) > 0 Then TachSo = VBA.Mid(tmp, 3)
End Function
Bạn cần xác định thêm các trường hợp có thể có xảy ra, ví như:Chào các anh chị!
Em có vấn đề nhờ anh chị giúp công thức:
Em cần tách chuỗi số dài 12 số trong chuỗi cột A sang cột B.
Trong cột A có nhiều chuỗi số nhưng chỉ tách chuỗi có 12 số ra thôi. Dòng nào không có thì bỏ qua:
View attachment 279062
Em cảm ơn!
Không có xuất hiện 2 lần đâu anh, chỉ 1 lần duy nhất thôi ạNhiều hơn 1 thì sao? Chỉ lấy 1 đầu tiên?
Cái này nếu VBA thì dùng Regex là đúng chỗ dùng nhất.
1. TK có thể có số 0 bắt đầuBạn cần xác định thêm các trường hợp có thể có xảy ra, ví như:
Bạn càng làm rõ, thì lập công thức càng chính xác hơn.
- Có hay không số TK có số 0 đầu như 000123456789, hay 010100089000?
- Chuỗi số do sự cố nhập liệu có hơn 12 số, như 1905170192600?
- Có hay không dữ liệu có 2 hoặc nhiều chuỗi số cùng có 12 số?
Thân
Cảm ơn anh đã giúp đỡ, kết quả chạy tốt rồi anh!Function LayChuoiSo(s As String, n As Long) As String
' returns the first numeric string of exactly n digits
' if such exists in string s
' otherwise, returns blank
Dim matches
With CreateObject("VBScript.RegExp")
.Pattern = "(^|[^\d])([\d]{" & n & "})($|[^\d])"
.Global = True
If .test(s) Then
Set matches = .Execute(s)
LayChuoiSo = matches(0).submatches(1)
End If
End With
End Function
Nếu máy cũ rích thì nên chỉnh cái Regex thành biến Static. Giúp cho máy khỏi phải dựng ojbect mỗi lượt hàm chạy (1000 dòng thì nó lên 1000 lần)
Nhưng nếu máy không cũ lắm thì hệ thống Windows hỗ trợ Script rất tốt. Regex sẽ được cached rất hiệu quả cho nên không cần code giữ lại.