Tách dãy số ra khỏi chuỗi kí tự trong Excel

Liên hệ QC

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

  • VK 1.xlsx
    8.2 KB · Đọc: 20
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!. (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
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

  • VK_Giangnt95.xlsm
    15.4 KB · Đọc: 12
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

  • tach chu.xlsx
    9.6 KB · Đọc: 7
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
Web KT

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

Back
Top Bottom