Tìm và lấy chuỗi ký tự sang cột mới (2 người xem)

Liên hệ QC

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

Thuy.Vuong

Thành viên mới
Tham gia
25/12/21
Bài viết
24
Được thích
0
Giới tính
Nữ
Em chào các anh chị.
Em có một vấn đề xin các anh chị giúp đỡ, em có một 1 file chứa 2 sheet là dulieu và chuoikytu
Sheet dulieu bao gồm các thông tin chứa tất cả các chuỗi ký tự cần tách ở cột A
Sheet chuoikytu bao gồm các quy luật phục vụ cho việc tách chuỗi tại sheet dulieu
ví dụ chuỗi (7PF001795-01) ở dòng A2 có 3 ký tự đầu tiền là 7PF và tổng độ dài của chuỗi là 12 kí tự, em rút gọn về cột J và K để khi tìm kiếm và tách chuỗi tuân theo quy luật này

Có 2 phần cần lấy là chuỗi CODE, và chuỗi INK
+) Đối với chuỗi code
sử dụng 3 ký tự đầu tiên tại cột J sheet chuoikytu dò tìm ở cột A sheet dulieu, nếu tìm thấy thì tiếp tục đo chiều dài của chuỗi đó, nếu khớp với chiều dài tại cột K sheet chuoikytu thì trong sheet dulieu lấy riêng chuỗi đó ra và điền sang cột mới, vì có nhiều chuỗi trong một ô nên mỗi một chuỗi được lấy ra sẽ điền sang cột mới và cách nhau một cột trống
Ví dụ cụ thể( sử dụng chuỗi 7PF tại J2 sheet chuoikytu dò tìm ở cột A sheet dulieu, khi chuỗi 7PF tìm thấy tại ô A2 sheet dulieu thì tiếp tục so sánh đồ dài của cả chuỗi này bằng 12 tại K2 sheet chuoikytu thì lấy 7PF001795-01 điền sang cột B2, vì A2 chứa nhiều chuỗi được tìm thấy cho nên khi chuỗi được lấy ra sẽ điền sang cột mới và cách nhau một cột trống.

+) Đối với chuỗi INK làm tương tự như chuỗi code
Ví dụ cụ thể( sử dụng chuỗi 9V0 tại L3 sheet chuoikytu dò tìm ở cột A sheet dulieu, khi chuỗi 9V0 tìm thấy tại ô A2 sheet dulieu thì tiếp tục so sánh đồ dài của cả chuỗi này bằng 15 tại K2 sheet chuoikytu thì lấy 9V000384-000-00 điền sang cột J2

+) hiển thì dòng tiêu đề để phân biết chuỗi đó là điền cho CODE hay điền cho INK

em nghĩ mãi không biết giải thích thế nào để a chị hiểu em cứ lấy ví dụ và gửi file đính kèm mong anh chị giúp đỡ em, cái khó là tìm bằng mắt thường thì không biết đến khi nào mới tìm cho nổi ạ
 

File đính kèm

Sheet dulieu bao gồm các thông tin chứa tất cả các chuỗi ký tự cần tách ở cột A
Sheet chuoikytu bao gồm các quy luật phục vụ cho việc tách chuỗi tại sheet dulieu
ví dụ chuỗi (7PF001795-01) ở dòng A2 có 3 ký tự đầu tiền là 7PF và tổng độ dài của chuỗi là 12 kí tự, em rút gọn về cột J và K để khi tìm kiếm và tách chuỗi tuân theo quy luật này
Có 3 câu hỏi:

1. 3 chuỗi MW0066, 6-092835-LAS-01, 7V000265-000-00 có trong A2. Tại sao trong kết quả mong đợi B2:H2 không có chúng?

2. chuỗi MW0066 và 7V000403-000-00 đều xuất hiện 2 lần trong A2. Trong kết quả sẽ liệt kê 2 lần hay chỉ 1 lần?

3. Có đảm bảo trước và sau chuỗi đều có ít nhất 1 dấu cách hay không, hay dính liền với các dữ liệu khác? Tức phải là vd. "ngày mai em đi, 7V000403-000-00" (1 dấu cách) hay có thể là "ngày mai em đi,7V000403-000-00" (dính với nhau không dấu cách)
 
Có 3 câu hỏi:

1. 3 chuỗi MW0066, 6-092835-LAS-01, 7V000265-000-00 có trong A2. Tại sao trong kết quả mong đợi B2:H2 không có chúng?

2. chuỗi MW0066 và 7V000403-000-00 đều xuất hiện 2 lần trong A2. Trong kết quả sẽ liệt kê 2 lần hay chỉ 1 lần?

3. Có đảm bảo trước và sau chuỗi đều có ít nhất 1 dấu cách hay không, hay dính liền với các dữ liệu khác? Tức phải là vd. "ngày mai em đi, 7V000403-000-00" (1 dấu cách) hay có thể là "ngày mai em đi,7V000403-000-00" (dính với nhau không dấu cách)
1. 3 chuỗi MW0066, 6-092835-LAS-01, 7V000265-000-00 có trong A2. Tại sao trong kết quả mong đợi B2:H2 không có chúng? -> dạ là do em nhìn bằng mắt không thấy để lấy được nó, chứ lẽ ra là phải có, quy tắc là cứ tìm từ trên xuống dưới chuỗi nào xuất hiện trước thì lấy trước và điền lần lượt từ trái qua phải Vùng B:H, nếu nhiều chuỗi hơn thì có thể mở rộng vùng chứa.

1. 3 chuỗi MW0066, 6-092835-LAS-01, 7V000265-000-00 có trong A2. Tại sao trong kết quả mong đợi B2:H2 không có chúng?-> nếu xuất hiện từ 2 lần trở lên thì chỉ lấy 1 lần thôi ạ

3. Có đảm bảo trước và sau chuỗi đều có ít nhất 1 dấu cách hay không, hay dính liền với các dữ liệu khác? Tức phải là vd. "ngày mai em đi, 7V000403-000-00" (1 dấu cách) hay có thể là "ngày mai em đi,7V000403-000-00" (dính với nhau không dấu cách)-> đây là dữ liệu gõ tay nên không đảm bảo được trước chuỗi sẽ luôn có dấu cách ,dấu phẩy hoặc dính liền, còn sau chuỗi thì được tách ra bởi dấu cách hoặc dấu phẩy thì mới đo được độ dài của các ký tự liền nhau là 15 hay 12 ký tự, điều thứ 3 này cũng khá phức tạp
 
3. Có đảm bảo trước và sau chuỗi đều có ít nhất 1 dấu cách hay không, hay dính liền với các dữ liệu khác? Tức phải là vd. "ngày mai em đi, 7V000403-000-00" (1 dấu cách) hay có thể là "ngày mai em đi,7V000403-000-00" (dính với nhau không dấu cách)-> đây là dữ liệu gõ tay nên không đảm bảo được trước chuỗi sẽ luôn có dấu cách ,dấu phẩy hoặc dính liền, còn sau chuỗi thì được tách ra bởi dấu cách hoặc dấu phẩy thì mới đo được độ dài của các ký tự liền nhau là 15 hay 12 ký tự, điều thứ 3 này cũng khá phức tạp
Tôi tạm giả thiết là chuỗi cần tìm chỉ chứa các ký tự a-z, A-Z, 0-9 và "-", tức các ký tự trong bảng chữ cái Anh, các chữ số và ký tự "-"
 

File đính kèm

Tôi tạm giả thiết là chuỗi cần tìm chỉ chứa các ký tự a-z, A-Z, 0-9 và "-", tức các ký tự trong bảng chữ cái Anh, các chữ số và ký tự "-"
vâng để em chạy thử xem kết quả như thế nào ạ, em cám ơn a rất nhiều
 
Tôi tạm giả thiết là chuỗi cần tìm chỉ chứa các ký tự a-z, A-Z, 0-9 và "-", tức các ký tự trong bảng chữ cái Anh, các chữ số và ký tự "-"
Tôi tạm giả thiết là chuỗi cần tìm chỉ chứa các ký tự a-z, A-Z, 0-9 và "-", tức các ký tự trong bảng chữ cái Anh, các chữ số và ký tự "-"
Sau một ngày em chạy thử thì em thấy khi thêm các chuỗi vào cột A cụ thể là ở dòng số 3 đến dòng 7 thì không thấy chuỗi được tách ra,
cũng phát sinh lúc em đặt vấn đề ở bài một thì em chỉ nghĩ đến là làm sao tách được chuỗi ra rồi đặt công thức tính tổng số lượng của chuỗi đó sau,
nhưng hiện tại mỗi lần đặt xong công thức khi chạy tiếp dữ liệu lại bị xóa hết, nên a xem có thể viết code tự động tính tổng không ạ, em có đặt tiêu đề cho các cột tính tổng từ IV1 đến IV tăng dần
 

File đính kèm

Sau một ngày em chạy thử thì em thấy khi thêm các chuỗi vào cột A cụ thể là ở dòng số 3 đến dòng 7 thì không thấy chuỗi được tách ra,
Cái này là chưa lường hết các trường hợp. Trong bài #2 tôi đòi mỗi chuỗi phải có dấu cách sau nó. Trong A3 sau chuỗi đầu là dấu phẩy, còn sau chuỗi cuối là <Kết thúc dữ liệu>. Lẽ ra việc mô tả dữ liệu, các trường hợp của dạng dữ liệu, là trách nhiệm của bạn chứ không phải của tôi.

Tôi quyết định lại với điều kiện là sau mỗi chuỗi có dạng chuỗi [a-z, A-Z, 0-9, -] là ký tự không thuộc [a-z, A-Z, 0-9, -] hoặc là kết thúc dữ liệu.

Bạn sửa ở 2 chỗ thành
Mã:
For r = 1 To lastRow1 - 1
    pattern = pattern & "|" & "\b" & chuoi(r, 1) & "[\w-]{" & chuoi(r, 2) - Len(chuoi(r, 1)) & "}(?=[^\w-]|$)"
Next r

For r = 1 To lastRow2 - 1
    pattern = pattern & "|" & "\b" & chuoi(r, 3) & "[\w-]{" & chuoi(r, 4) - Len(chuoi(r, 3)) & "}(?=[^\w-]|$)"
Next r

và test kỹ.
 
Cái này là chưa lường hết các trường hợp. Trong bài #2 tôi đòi mỗi chuỗi phải có dấu cách sau nó. Trong A3 sau chuỗi đầu là dấu phẩy, còn sau chuỗi cuối là <Kết thúc dữ liệu>. Lẽ ra việc mô tả dữ liệu, các trường hợp của dạng dữ liệu, là trách nhiệm của bạn chứ không phải của tôi.

Tôi quyết định lại với điều kiện là sau mỗi chuỗi có dạng chuỗi [a-z, A-Z, 0-9, -] là ký tự không thuộc [a-z, A-Z, 0-9, -] hoặc là kết thúc dữ liệu.

Bạn sửa ở 2 chỗ thành
Mã:
For r = 1 To lastRow1 - 1
    pattern = pattern & "|" & "\b" & chuoi(r, 1) & "[\w-]{" & chuoi(r, 2) - Len(chuoi(r, 1)) & "}(?=[^\w-]|$)"
Next r

For r = 1 To lastRow2 - 1
    pattern = pattern & "|" & "\b" & chuoi(r, 3) & "[\w-]{" & chuoi(r, 4) - Len(chuoi(r, 3)) & "}(?=[^\w-]|$)"
Next r

và test kỹ.
em xin lỗi trả lời muộn, máy tính em bị lỗi, em chạy được rồi a nhé, em cám ơn rất nhiều
 
Web KT

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

Back
Top Bottom