Tách chuỗi dữ liệu(Tìm quy luật tách chuỗi phần 2)

Liên hệ QC

huonglien1901

GPE là ngôi nhà thứ 2 của tôi!!!
Tham gia
17/4/16
Bài viết
2,701
Được thích
2,434
Giới tính
Nam
Nghề nghiệp
Nhân viên kỹ thuật in ấn
Em chào mọi người!

Em có vấn đề nhờ mọi người hỗ trợ.

Em muốn lấy 01 phần trong 01 chuỗi lớn như file đính kèm.

Em cảm ơn mọi người nhiều!
 

File đính kèm

  • tap lam phan 2.xlsx
    12 KB · Đọc: 20
Bạn nên mô tả tính chất chuỗi cần lấy. Vì nếu không thì mỗi người tự cho là hiểu đúng theo một ý khác và viết code hoặc công thức cho ý ấy. Do người ta chỉ tung ra code và công thức mà không nói rõ họ đã viết cho trường hợp nào nên trường hợp nào bạn cũng GẬT ĐẦU mà không ý thức được là các code hoặc công thức ấy có thể cho kết quả khác nhau. Tôi sẽ cho bạn ví dụ.

Ở phần trước bạn nhận được cả code và công thức. Trước hết tôi nói rõ là tôi không kiểm tra, tôi chỉ nhìn code và công thức và đoán chúng thế nào. Bạn nên tự kiểm nghiệm. Bạn có ý thức được là code lấy tất cả các chuỗi có độ dài > 5 chữ số, còn công thức chỉ lấy các chuỗi có ĐÚNG 6, 8 hoặc 13 chữ số? Vậy nếu kết quả của bạn có thể có 7, 9, 10, 11, 12, > 14 chữ số thì code trả về kết quả còn công thức trả về chuỗi rỗng. Còn nếu kết quả có thể là chuỗi có 5 chữ số thì cả code và công thức là sai.

Có thể tôi đoán bằng mắt không chính xác vì tôi cũng chỉ nhìn lướt qua, nhưng tự bạn có thể kiểm tra. Tôi chỉ muốn nhấn mạnh là bạn có thể GẬT ĐẦU với mỗi code và công thức nhưng bạn không ý thức được là chúng được viết cho những giả thiết nào.
 
Upvote 0
Em chào mọi người!

Em có vấn đề nhờ mọi người hỗ trợ.

Em muốn lấy 01 phần trong 01 chuỗi lớn như file đính kèm.

Em cảm ơn mọi người nhiều!
Nếu cái bạn cần là tìm quy luật thì số lượng mẫu có lẽ phải cần nhiều hơn nữa
 
Upvote 0
Bạn nên mô tả tính chất chuỗi cần lấy. Vì nếu không thì mỗi người tự cho là hiểu đúng theo một ý khác và viết code hoặc công thức cho ý ấy. Do người ta chỉ tung ra code và công thức mà không nói rõ họ đã viết cho trường hợp nào nên trường hợp nào bạn cũng GẬT ĐẦU mà không ý thức được là các code hoặc công thức ấy có thể cho kết quả khác nhau. Tôi sẽ cho bạn ví dụ.

Ở phần trước bạn nhận được cả code và công thức. Trước hết tôi nói rõ là tôi không kiểm tra, tôi chỉ nhìn code và công thức và đoán chúng thế nào. Bạn nên tự kiểm nghiệm. Bạn có ý thức được là code lấy tất cả các chuỗi có độ dài > 5 chữ số, còn công thức chỉ lấy các chuỗi có ĐÚNG 6, 8 hoặc 13 chữ số? Vậy nếu kết quả của bạn có thể có 7, 9, 10, 11, 12, > 14 chữ số thì code trả về kết quả còn công thức trả về chuỗi rỗng. Còn nếu kết quả có thể là chuỗi có 5 chữ số thì cả code và công thức là sai.

Có thể tôi đoán bằng mắt không chính xác vì tôi cũng chỉ nhìn lướt qua, nhưng tự bạn có thể kiểm tra. Tôi chỉ muốn nhấn mạnh là bạn có thể GẬT ĐẦU với mỗi code và công thức nhưng bạn không ý thức được là chúng được viết cho những giả thiết nào.
Em gửi Bác file trong file em có nói quy luật tách để lấy chuỗi dữ liệu này!
Bác xem file em nếu có gì thắc mắc Bác có thể nói rõ để em chỉnh sửa dữ liệu lại.
Em có làm kết quả ví dụ minh họa.
Em cảm ơn Bác nhiều!
 

File đính kèm

  • tap lam phan 2.xlsx
    22.1 KB · Đọc: 7
Upvote 0
Em gửi Bác file trong file em có nói quy luật tách để lấy chuỗi dữ liệu này!
Bác xem file em nếu có gì thắc mắc Bác có thể nói rõ để em chỉnh sửa dữ liệu lại.
Em có làm kết quả ví dụ minh họa.
Em cảm ơn Bác nhiều!
Tôi chỉ góp ý để bạn mô tả cho những người muốn giúp bạn. Không nhất thiết là cho tôi, vì tôi bây giờ lười lắm, chủ yếu tìm những thú vui thực thôi. :D
 
Upvote 0
Tôi chỉ góp ý để bạn mô tả cho những người muốn giúp bạn. Không nhất thiết là cho tôi, vì tôi bây giờ lười lắm, chủ yếu tìm những thú vui thực thôi. :D
Em cảm ơn Bác đã nhắc nhở em.
Nếu Bác có rãnh thời gian Bác có thể hỗ trợ em vấn đề này được không?
Em cảm ơn Bác nhiều!
 
Upvote 0
Em gửi Anh file em nói quy luật để tách.
Bạn thử code dưới, kết quả điền vào cột F
Mã:
Option Explicit

Sub tach()
Dim Nguon, Kq
Dim i, j, r
Nguon = Sheet1.Range("A2", Sheet1.Range("A2").End(xlDown))
r = UBound(Nguon)
ReDim Kq(1 To r, 1 To 1)
With CreateObject("Vbscript.RegExp")
    .Pattern = "[^\n]+"
    For i = 1 To r
        j = Split(Nguon(i, 1), "-")(0)
        If .test(j) Then
            Kq(i, 1) = WorksheetFunction.Clean(.Execute(j)(0))
        End If
    Next i
   
    Sheet1.Range("F2").Resize(r, 1) = Kq
End With
End Sub
 
Upvote 0
Bạn thử code dưới, kết quả điền vào cột F
Mã:
Option Explicit

Sub tach()
Dim Nguon, Kq
Dim i, j, r
Nguon = Sheet1.Range("A2", Sheet1.Range("A2").End(xlDown))
r = UBound(Nguon)
ReDim Kq(1 To r, 1 To 1)
With CreateObject("Vbscript.RegExp")
    .Pattern = "[^\n]+"
    For i = 1 To r
        j = Split(Nguon(i, 1), "-")(0)
        If .test(j) Then
            Kq(i, 1) = WorksheetFunction.Clean(.Execute(j)(0))
        End If
    Next i
  
    Sheet1.Range("F2").Resize(r, 1) = Kq
End With
End Sub
Em cảm ơn Anh!
Có gì em test rồi em phản hồi lại cho Anh.
 
Upvote 0
Rốt cuộc thì bạn muốn tìm quy luật hay muốn cái code VBA?
Hai cái này khác nhau. Và theo như những bài bạn hỏi thì bạn dừng lại ở code chứ đâu phải "quy luật".
 
Upvote 0
Đây là cách làm của mình, mong giúp đc bạn
 

File đính kèm

  • tap lam phan 2(TNT).xlsx
    31.9 KB · Đọc: 9
Upvote 0
Rốt cuộc thì bạn muốn tìm quy luật hay muốn cái code VBA?
Hai cái này khác nhau. Và theo như những bài bạn hỏi thì bạn dừng lại ở code chứ đâu phải "quy luật".
Ý của em là thử giúp tìm quy luật làm sao để tách chuỗi đó. Nhưng ở bài này em có tìm được ra ít quy luật để tách có những chuỗi em không thể tìm ra quy luật nên em đưa lên nhờ mọi người hỗ trợ.
 
Upvote 0
Ý của em là thử giúp tìm quy luật làm sao để tách chuỗi đó. Nhưng ở bài này em có tìm được ra ít quy luật để tách có những chuỗi em không thể tìm ra quy luật nên em đưa lên nhờ mọi người hỗ trợ.
Bạn nhầm lẫn giữa quy luật và cách thức thực hiện.
Lấy 6 chữ số, 11 chữ số, vân vân là quy luật
Viết code VBA đọc chuỗi và lấy mấy cái 6 chữ số, 11 chữ số ra là thực hiện.

Quy luật thuộc về phân tích (analyse) và chuẩn hoá (normalise) yêu cầu. Code là đổi yêu cầy ấy thành cách thức (algorithm) và dịch những cách thức ấy ra ngôn ngữ VBA.
 
Upvote 0
Không biết viết VBA nhưng mò thử công thức thế này đã đủ nguyên tắc chưa nhỉ
Mã:
=IFERROR(IF(LEN(B2)-LEN(SUBSTITUTE(B2;CHAR(10);""))>0;TRIM(LEFT(SUBSTITUTE(B2;CHAR(10);REPT(" ";999));IFERROR(FIND("(";B2)-1;999)));LEFT(B2;MATCH(1;--ISNUMBER(--MID(B2&"-";ROW($1:$200);6));0)-1));B2)
Bấm CSE
 

File đính kèm

  • tap lam phan 2.xlsx
    55.3 KB · Đọc: 2
Upvote 0
Bạn thử code dưới, kết quả điền vào cột F
Mã:
Option Explicit

Sub tach()
Dim Nguon, Kq
Dim i, j, r
Nguon = Sheet1.Range("A2", Sheet1.Range("A2").End(xlDown))
r = UBound(Nguon)
ReDim Kq(1 To r, 1 To 1)
With CreateObject("Vbscript.RegExp")
    .Pattern = "[^\n]+"
    For i = 1 To r
        j = Split(Nguon(i, 1), "-")(0)
        If .test(j) Then
            Kq(i, 1) = WorksheetFunction.Clean(.Execute(j)(0))
        End If
    Next i
  
    Sheet1.Range("F2").Resize(r, 1) = Kq
End With
End Sub
Chuỗi .Pattern = "[^\n]+" hay thật
 
Upvote 0
Web KT

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

Back
Top Bottom