Đính kèm file cho nhiều dữ liệu thêm đi bạn, để lường được hết trường hợpChào mọi người ạ!. Mọi người giúp e với ạ, em muốn tách dãy số "158-176" ra khỏi chuỗi kí tự "VK TRẮNG VIỀN G RỘNG (ĐUÔI 6) 158-176 logo SH đen" . Mong mọi người giúp đỡ ạ. E cảm ơn!
Vâng anh nhé, e thêm file vào r ạ. Mong anh giúp đỡ ạĐính kèm file cho nhiều dữ liệu thêm đi bạn, để lường được hết trường hợp
Vâng anh ạ, e có gửi kèm file ý. Có nhiều trường hợp hơn ạKết quả
Mã:158-176
Cảm ơn anh ạ, e có sửa thành file "VK 1" rồi ạ
Cảm ơn anh ạ, e có sửa thành file "VK 1" rồi ạ
Dạ, em cảm ơn. E có sửa file "VK" thành "VK 1" rồi ạ. Anh xem lại giúp e ạVâng anh nhé, e thêm file vào r ạ. Mong anh giúp đỡ ạ
Quá thiếu tính nhất quán trong các mã số và yêu cầu vẫn còn mơ hồ, cụ thể:Vâng anh nhé, e thêm file vào r ạ. Mong anh giúp đỡ ạ
Chốt bác ơi, đoán nữa đau đầu lắm
\d{1,}\s*-\s*\d{1,}|\d{3,}
Khoai nữa thì đem về nhà luộc ăn luôn đêTí nữa chủ thớt lại lên bảo là cái phần sau của dữ liệu nó khoai hơn lấy không được.thế là cái biểu thức chính quy lại phải đổi![]()
Bài này có bạn với hai bác @befaint @be09 .cả ba người thừa sức giải quyết chỉ là chủ thớt không đưa hết dữ liệu để phòng trường hợp không ngờ , yêu cầu thì mơ hồ nữa.Nên làm mọi người thấy lười suy đoán thôiKhoai nữa thì đem về nhà luộc ăn luôn đê
Thế thì xem xin rút luiLuộc mần chi. Đem lùi tro xong cả bọn nhóm vào mọt phòng đóng của lại đấu "nội gia chân khí".
Vâng ý ạ, bên e có quá nhiều mã mà nhân viên nhập liệu lại nhập mỗi loại 1 kiểu giờ lọc ra số phát ốm anh ạ. Anh giúp lọc ra mấy trường hợp e gửi như file "VK 1" được ko ạ. E cảm ơn!Quá thiếu tính nhất quán trong các mã số và yêu cầu vẫn còn mơ hồ, cụ thể:
- Chỉ lấy các mã có dấu gạch ngang như 138-148 hay lấy bất kỳ mã nào có ký tự số?
=> dòng "VK TRẮNG VIỀN G (THÔNG DỤNG) 158 - 168" lại tồn tại khoảng trắng trong mã 158 - 168
- Với "Vung kính trắng C 158 logo SH đen" thì lấy C 158 hay chỉ 158? (có khoảng trắng giữa C và 158)
=> Rồi với "Vung kính trắng C252, 2 lỗ logo SH mama" thì lấy C252 hay 252? (không có khoảng trắng giữa C và 252)
Chốt lọc ra kết quả như file "VK 1" ạChốt bác ơi, đoán nữa đau đầu lắm
Mã:\d{1,}\s*-\s*\d{1,}|\d{3,}
Dạ, ra các dãy số lần lượt là 138-148, 198- 216, 238 - 256, 212,158 ạ
Thì mít và sầu riêng cao hơn khoại một bậc (ngwoif Bắc có lẽ không biết ăn sầu riêng và hột của nó)Luyện "chân khí" thì dùng hạt mít luộc mới hiệu quả chứ anh.![]()
Dạ, e cảm ơn ạ!Chốt bác ơi, đoán nữa đau đầu lắm
Mã:\d{1,}\s*-\s*\d{1,}|\d{3,}
Bạn thử code này, =tach(A2)Chào mọi người ạ!. Mọi người giúp e với ạ, em muốn tách dãy số "158-176" ra khỏi chuỗi kí tự "VK TRẮNG VIỀN G RỘNG (ĐUÔI 6) 158-176 logo SH đen" . Mong mọi người giúp đỡ ạ. E cảm ơn!. (E có sửa lại file "VK" thành "VK 1" ạ)
Function tach(ByVal str As String) As String
Static reg As Object
If reg Is Nothing Then Set reg = CreateObject("vbscript.regexp")
reg.Pattern = "\d+(?:\s*-?\s*)\d+"
If reg.test(str) Then tach = reg.Execute(str)(0)
End Function
Đã sữa lại,tôi quên mất tưởng đang dùng DimThêm cái này vào nếu không lần nào cũng dựng reg lại mặc dù dùng 'Static'.
If reg is nothing then set ...
....................Chào mọi người ạ!. Mọi người giúp e với ạ, em muốn tách dãy số "158-176" ra khỏi chuỗi kí tự "VK TRẮNG VIỀN G RỘNG (ĐUÔI 6) 158-176 logo SH đen" . Mong mọi người giúp đỡ ạ. E cảm ơn!. (E có sửa lại file "VK" thành "VK 1" ạ)
Option Explicit
Sub tach()
Dim Nguon
Dim tam
Dim i, j, k
Dim kq
Nguon = Sheet1.Range("A2:A5")
k = UBound(Nguon)
ReDim kq(1 To k, 1 To 1)
For i = 1 To k
tam = Split(Nguon(i, 1))
For j = UBound(tam) To 0 Step -1
If IsNumeric(Right(tam(j), 1)) Then
kq(i, 1) = tam(j)
Exit For
End If
Next j
For j = 1 To Len(kq(i, 1))
If IsNumeric(Mid(kq(i, 1), j, 1)) Then
kq(i, 1) = Mid(kq(i, 1), j, Len(kq(i, 1)))
Exit For
End If
Next j
Next i
Sheet1.Range("D2").Resize(k, 1) = kq
End Sub
Đã sửa lần 2If Not reg Is Nothing
Chưa đúng kìa![]()
Dạ, em cảm ơn anh nhéThêm cái này vào nếu không lần nào cũng dựng reg lại mặc dù dùng 'Static'.
If reg is nothing then set ...
Dạ, em cảm ơn anh nhéThêm cái này vào nếu không lần nào cũng dựng reg lại mặc dù dùng 'Static'.
If reg is nothing then set ...
Dựng reg liên tục thì tốn ram hay chậm tốc độ thế bác Befaint?Thêm cái này vào nếu không lần nào cũng dựng reg lại mặc dù dùng 'Static'.
If reg is nothing then set ...
Đã lỡ sì-ta-tịt rồi thì nhét luôn cái chỗ pattern vào. Tội gì mỗi lần chạy lại phải gán chuỗi.Thêm cái này vào nếu không lần nào cũng dựng reg lại mặc dù dùng 'Static'.
If reg is nothing then set ...
- Khai báo dạng Static thì biến lưu trữ trên bộ nhớ cho tới khi thoát ứng dụng/ hoặc chương trình lăn ra ngỏm.Dựng reg liên tục thì tốn ram hay chậm tốc độ thế bác Befaint?
Sub TachSo()
Dim KQ As String, Nguon As String, c3 As String
Dim i As Long, iR As Long
Dim SArr, DArr
SArr = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
ReDim DArr(1 To UBound(SArr), 1 To 1)
For iR = 1 To UBound(SArr)
For i = 1 To Len(SArr(iR, 1)) - 2
c3 = Mid(SArr(iR, 1), i, 3)
If IsNumeric(c3) And IsNumeric(Left(c3, 1)) Then
KQ = KQ & c3
If i > 2 Then
If Mid(SArr(iR, 1), i - 1, 1) = "-" Or Mid(SArr(iR, 1), i - 2, 2) = "- " Then
KQ = Left(KQ, 3) & "-" & Right(KQ, 3)
End If
End If
i = i + 3
End If
Next
DArr(iR, 1) = KQ
KQ = ""
Next
Range("C1").Resize(UBound(SArr), 1).Value = DArr
End Sub
D, e cảm ơn anh nhé....................
Mã:Option Explicit Sub tach() Dim Nguon Dim tam Dim i, j, k Dim kq Nguon = Sheet1.Range("A2:A5") k = UBound(Nguon) ReDim kq(1 To k, 1 To 1) For i = 1 To k tam = Split(Nguon(i, 1)) For j = UBound(tam) To 0 Step -1 If IsNumeric(Right(tam(j), 1)) Then kq(i, 1) = tam(j) Exit For End If Next j For j = 1 To Len(kq(i, 1)) If IsNumeric(Mid(kq(i, 1), j, 1)) Then kq(i, 1) = Mid(kq(i, 1), j, Len(kq(i, 1))) Exit For End If Next j Next i Sheet1.Range("D2").Resize(k, 1) = kq End Sub
Dạ, hi. E cảm ơn anh nhéThử code nhà quê của tôi nhé:
Rich (BB code):Sub TachSo() Dim KQ As String, Nguon As String, c3 As String Dim i As Long, iR As Long Dim SArr, DArr SArr = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row) ReDim DArr(1 To UBound(SArr), 1 To 1) For iR = 1 To UBound(SArr) For i = 1 To Len(SArr(iR, 1)) - 2 c3 = Mid(SArr(iR, 1), i, 3) If IsNumeric(c3) And IsNumeric(Left(c3, 1)) Then KQ = KQ & c3 If i > 2 Then If Mid(SArr(iR, 1), i - 1, 1) = "-" Or Mid(SArr(iR, 1), i - 2, 2) = "- " Then KQ = Left(KQ, 3) & "-" & Right(KQ, 3) End If End If i = i + 3 End If Next DArr(iR, 1) = KQ KQ = "" Next Range("C1").Resize(UBound(SArr), 1).Value = DArr End Sub
Khối dữ liệu như trong file VK lúc đầu như thế này
View attachment 249564
Cảm ơn gì bạn?D, e cảm ơn anh nhé
Bài đã được tự động gộp:
Dạ, hi. E cảm ơn anh nhé
Vâng ạ, e sẽ rút kinh nghiệm ạCảm ơn gì bạn?
Luôn luôn phải mô tả dạng dữ liệu. Trước hết phải phát biểu bằng lời cái cần lấy, sau đó cho khoảng chục ví dụ. Nếu chỉ tung ví dụ mà không phát biểu bằng lời thì cũng chả đủ, có cho 1000 ví dụ cũng thế thôi.
Do bạn không mô tả dạng dữ liệu và không phát biểu bằng lời kết quả mong đợi mà bạn chỉ cho ví dụ:
A5 = Vung kính trắng 2 lỗ C172 logo SH mama
Mong đợi B5 = 172
Vậy có câu hỏi: có trường hợp
A5 = Vung kính trắng 23 lỗ C172 logo SH mama
không? Nếu có thì mong đợi là 23 hay 172, hay cái khác hoàn toàn?
Tại sao cái gọi là "phát biểu bằng lời" quan trọng đến thế? Vì nếu không có nó thì không ai hiểu ý hoặc mỗi người hiểu một kiểu. Tôi cho ví dụ. Giả sử có dữ liệu:
A5 = Vung kính trắng 23 lỗ C172 logo SH mama
Trong chủ đề có 3 code A, B và C.
- nếu mong đợi 23 thì code A đúng, B và C sai.
- nếu mong đợi 172 thì B đúng, A và C sai.
- nếu mong đợi "23 172" thì code C đúng, A và B sai.
Thử :Chào các anh chị
Anh chị giúp em với ạ, em muốn tách một dãy chữ số bắt đầu từ chữ "Bill" cho đến khoảng trắng đầu tiên.
Em gửi file đính kèm nhờ mọi người hướng dẫn công thức giúp
=MID(SUBSTITUTE(TRIM(RIGHT(A2,LEN(A2)-SEARCH("Bill",A2)-3))," ",REPT(" ",100)),1,100)
Cám ơn cao thủ đã giúp đỡ emMID(SUBSTITUTE(TRIM(RIGHT(A2,LEN(A2)-SEARCH("Bill",A2)-3))," ",REPT(" ",100)),1,100)