Tách dãy số ra khỏi chuỗi kí tự trong Excel (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

giangnt95

Thành viên mới
Tham gia
29/5/19
Bài viết
39
Được thích
1
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" ạ)
 

File đính kèm

Lần chỉnh sửa cuối:
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!
Đính kèm file cho nhiều dữ liệu thêm đi bạn, để lường được hết trường hợp
 
Upvote 0
Kết quả
Mã:
158-176
Vâng anh ạ, e có gửi kèm file ý. Có nhiều trường hợp hơn ạ
Bài đã được tự động gộp:

Vậy kết quả mình mong muốn là gì?

Mình viết kết quả mơ ước vào cột B đi.

View attachment 249553
Cảm ơn anh ạ, e có sửa thành file "VK 1" rồi ạ
Bài đã được tự động gộp:

Vậy kết quả mình mong muốn là gì?

Mình viết kết quả mơ ước vào cột B đi.

View attachment 249553
Cảm ơn anh ạ, e có sửa thành file "VK 1" rồi ạ
Vâng anh nhé, e thêm file vào r ạ. Mong anh giúp đỡ ạ
Dạ, em cảm ơn. E có sửa file "VK" thành "VK 1" rồi ạ. Anh xem lại giúp e ạ
 
Upvote 0
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ể:

- 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)
 
Upvote 0
Khoai nữa thì đem về nhà luộc ăn luôn đê
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ôi
Bài đã được tự động gộp:

Luộ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í".
Thế thì xem xin rút lui
 
Upvote 0
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)
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!
Bài đã được tự động gộp:

Chốt bác ơi, đoán nữa đau đầu lắm :D
Mã:
\d{1,}\s*-\s*\d{1,}|\d{3,}
Chốt lọc ra kết quả như file "VK 1" ạ
Vậy mấy dòng màu vàng kia ra sao mình?

View attachment 249556
Dạ, ra các dãy số lần lượt là 138-148, 198- 216, 238 - 256, 212,158 ạ
 
Upvote 0
Luyện "chân khí" thì dùng hạt mít luộc mới hiệu quả chứ anh. :p
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ó)
Nhưng luộc và lùi tro thì bạn thử so sánh đi. Lùi tro nó vỡ tinh bột ra, bùi hơn luộc nhiều.

Trờ chơi trẻ con: xù xì hột mít lùi tro; ăn no té đ...
 
Upvote 0
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" ạ)
Bạn thử code này, =tach(A2)

Mã:
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
 
Lần chỉnh sửa cuối:
Upvote 0
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" ạ)
....................
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
 
Upvote 0
Upvote 0
Upvote 0
Dựng reg liên tục thì tốn ram hay chậm tốc độ thế bác Befaint?
- 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.
- Mỗi lần gọi hàm phải dựng lại đối tượng nên mệt.
Đại khái thế á. Còn lý thuyết thì hỏi anh ngay phía trên. :)
 
Upvote 0
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
1605673880613.png
 

File đính kèm

Upvote 0
....................
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, e cảm ơn anh nhé
Bài đã được tự động gộp:

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
Dạ, hi. E cảm ơn anh nhé
 
Upvote 0
D, e cảm ơn anh nhé
Bài đã được tự động gộp:


Dạ, hi. E cảm ơn anh nhé
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.
 
Upvote 0
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.
Vâng ạ, e sẽ rút kinh nghiệm ạ
 
Upvote 0
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
 

File đính kèm

Upvote 0
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
Thử :
Mã:
=MID(SUBSTITUTE(TRIM(RIGHT(A2,LEN(A2)-SEARCH("Bill",A2)-3))," ",REPT(" ",100)),1,100)
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom