Xử lý dữ liệu data ngân hàng do tìm theo ký tự nhận biết trong nội dung sao kê

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

anhhunghtv

Thành viên mới
Tham gia
1/3/19
Bài viết
5
Được thích
5
Xin các cao nhân GPE hỗ trợ trường hợp này giúp em với ạ:
Em có 1 file dữ liệu ngân hàng cần bóc tách tiền về theo nội dung sao kê ngân hàng, có file danh mục nhận biết.
- Dò tìm tất cả dấu hiệu nhận biết có trong cột E ở sheet DATA theo sheet Danh muc tương ứng.
- Trả về kết quả nếu có chuỗi ký tự trùng tương ứng với sheet danh mục
- Chuỗi ký tự nhận biết sẽ phân biệt chữ hoa thường, dấu cách, ko hạn chế ký tự…
- Chuỗi ký tự nhận biết ở cột E nó sẽ ở vị trí bất kỳ
- Em ví dụ 1 vài kết quả như file.
Hiện tại em phải xử lý tay khá mất time, Em cũng có tìm một số bài trên diễn đàn nhưng cũng chưa đúng theo ý em, vì dữ liệu em khá nhiều dòng cần code xử lý nhanh tránh bị treo ạ. em đính kèm theo file.
Em cám ơn GPE rất nhiều!
 

File đính kèm

  • Xử lý Data ngân hàng.xlsm
    236.1 KB · Đọc: 54
Không phải là cao nhân hay thấp nhân hay gì gì đó có được không?
Chắc là được đó các hạ, trong này luật đâu có cấm, khi xưa tiểu tử Trương Vô Kỵ tuổi trẻ tài cao đương đầu hàng trăm cao nhân tóc bạc râu dài phải run tay rụng rún đấy thôi.

Phỏng dịch ra tiếng Việt: mất "tí mẹ".
Xì bam, chụp mũ, bẻ cong con chữ khép vào tội gì vậy?
 
Upvote 0
Xin các cao nhân GPE hỗ trợ trường hợp này giúp em với ạ:
Em có 1 file dữ liệu ngân hàng cần bóc tách tiền về theo nội dung sao kê ngân hàng, có file danh mục nhận biết.
- Dò tìm tất cả dấu hiệu nhận biết có trong cột E ở sheet DATA theo sheet Danh muc tương ứng.
- Trả về kết quả nếu có chuỗi ký tự trùng tương ứng với sheet danh mục
- Chuỗi ký tự nhận biết sẽ phân biệt chữ hoa thường, dấu cách, ko hạn chế ký tự…
- Chuỗi ký tự nhận biết ở cột E nó sẽ ở vị trí bất kỳ
- Em ví dụ 1 vài kết quả như file.
Hiện tại em phải xử lý tay khá mất time, Em cũng có tìm một số bài trên diễn đàn nhưng cũng chưa đúng theo ý em, vì dữ liệu em khá nhiều dòng cần code xử lý nhanh tránh bị treo ạ. em đính kèm theo file.
Em cám ơn GPE rất nhiều!
Các hạ thử công thức cùi mía này xem sao nha:
Cách dùng công thức, không dùng code VBA:
=IFERROR(INDEX(INDIRECT("DanhMuc!D2:D"&COUNTA(DanhMuc!$D:$D)),MATCH(1,--(IFERROR( FIND(INDIRECT("DanhMuc!D2:D"&COUNTA(DanhMuc!$D:$D)),Data!$E2,1),0)>0),0)), "<< Not found >>")


Cách dùng VBA Code:
CSS:
Function sFind(sRange As Range, cFind As Range) As String
'CFind là ô có chuỗi chứa nhiều thông tin, trong đó có dấu hiệu nhận biết
'sRange là cột chứa các phần tử dấu hiệu cần dùng để dò tìm trong chuỗi cFind
Dim iR As Long
For iR = 1 To sRange.Rows.Count
If InStr(1, cFind, sRange.Cells(iR, 1)) > 0 Then
sFind = sRange.Cells(iR, 1).Value
End If
Next iR
If Len(sFind) = 0 Then sFind = "<<Not found>>"
End Function

PHP:
Cú pháp ví dụ:
=sFind(DanhMuc!$D$2:$D$724,$E2)
 
Lần chỉnh sửa cuối:
Upvote 0
Các hạ thử công thức cùi mía này xem sao nha:
Cách dùng công thức, không dùng code VBA:
=IFERROR(INDEX(INDIRECT("DanhMuc!D2:D"&COUNTA(DanhMuc!$D:$D)),MATCH(1,--(IFERROR( FIND(INDIRECT("DanhMuc!D2:D"&COUNTA(DanhMuc!$D:$D)),Data!$E2,1),0)>0),0)), "<< Not found >>")


Cách dùng VBA Code:
CSS:
Function sFind(sRange As Range, cFind As Range) As String
'CFind là ô có chuỗi chứa nhiều thông tin, trong đó có dấu hiệu nhận biết
'sRange là cột chứa các phần tử dấu hiệu cần dùng để dò tìm trong chuỗi cFind
Dim iR As Long
For iR = 1 To sRange.Rows.Count
If InStr(1, cFind, sRange.Cells(iR, 1)) > 0 Then
sFind = sRange.Cells(iR, 1).Value
End If
Next iR
If Len(sFind) = 0 Then sFind = "<<Not found>>"
End Function

PHP:
Cú pháp ví dụ:
=sFind(DanhMuc!$D$2:$D$724,$E2)
Cảm ơn anh Châu Bá Thông. Trong trường hợp 1 ô có chứa 2 thông tin dò tìm theo bảng Danh mục thì sẽ trả kết quả đầu tiên tìm thấy đúng không anh?
 
Upvote 0
@anhhunghtv Tôi thấy trong sheet data có 2 cột bôi vàng, phải chăng bạn muốn có kết quả ở cả 2 cột này ?
Có thể liên hệ tôi để biết thêm chi tiết qua số zalo để dưới nickname
 

File đính kèm

  • Screenshot (105).png
    Screenshot (105).png
    401 KB · Đọc: 27
Upvote 0
Các hạ thử công thức cùi mía này xem sao nha:
Cách dùng công thức, không dùng code VBA:
=IFERROR(INDEX(INDIRECT("DanhMuc!D2:D"&COUNTA(DanhMuc!$D:$D)),MATCH(1,--(IFERROR( FIND(INDIRECT("DanhMuc!D2:D"&COUNTA(DanhMuc!$D:$D)),Data!$E2,1),0)>0),0)), "<< Not found >>")


Cách dùng VBA Code:
CSS:
Function sFind(sRange As Range, cFind As Range) As String
'CFind là ô có chuỗi chứa nhiều thông tin, trong đó có dấu hiệu nhận biết
'sRange là cột chứa các phần tử dấu hiệu cần dùng để dò tìm trong chuỗi cFind
Dim iR As Long
For iR = 1 To sRange.Rows.Count
If InStr(1, cFind, sRange.Cells(iR, 1)) > 0 Then
sFind = sRange.Cells(iR, 1).Value
End If
Next iR
If Len(sFind) = 0 Then sFind = "<<Not found>>"
End Function

PHP:
Cú pháp ví dụ:
=sFind(DanhMuc!$D$2:$D$724,$E2)
Em rất cảm ơn bác, phần VBA thì em hiểu rồi riêng phần công thức mà ko dùng VBA bác có thể giải thích giùm em công thức bác làm được không ạ?
=IFERROR(INDEX(INDIRECT("DanhMuc!D2:D"&COUNTA(DanhMuc!$D:$D)),MATCH(1,--(IFERROR( FIND(INDIRECT("DanhMuc!D2:D"&COUNTA(DanhMuc!$D:$D)),Data!$E2,1),0)>0),0)), "<< Not found >>")
 
Upvote 0
Xin các cao nhân GPE hỗ trợ trường hợp này giúp em với ạ:
Em có 1 file dữ liệu ngân hàng cần bóc tách tiền về theo nội dung sao kê ngân hàng, có file danh mục nhận biết.
- Dò tìm tất cả dấu hiệu nhận biết có trong cột E ở sheet DATA theo sheet Danh muc tương ứng.
- Trả về kết quả nếu có chuỗi ký tự trùng tương ứng với sheet danh mục
- Chuỗi ký tự nhận biết sẽ phân biệt chữ hoa thường, dấu cách, ko hạn chế ký tự…
- Chuỗi ký tự nhận biết ở cột E nó sẽ ở vị trí bất kỳ
- Em ví dụ 1 vài kết quả như file.
Hiện tại em phải xử lý tay khá mất time, Em cũng có tìm một số bài trên diễn đàn nhưng cũng chưa đúng theo ý em, vì dữ liệu em khá nhiều dòng cần code xử lý nhanh tránh bị treo ạ. em đính kèm theo file.
Em cám ơn GPE rất nhiều!
Nhìn file dữ liệu toàn "MTV TM VA XNK VIETTEL", nên hỏi chút b ở bên VTP ah.
Sang bên VTT hỏi A Long.BD quy trình nộp tiền bán hàng để xem cách bên đấy quản lý công nợ thời gian thực "real time" nhé.
Theo mình được biết cách đây 5 năm VTT đã áp dụng viettel pay để xử lý việc quản lý công nợ. Nhờ đó mà thay đổi được từ cách làm thủ công như bạn đang hỏi sang quản lý real time rồi
 
Upvote 0
Em rất cảm ơn bác, phần VBA thì em hiểu rồi riêng phần công thức mà ko dùng VBA bác có thể giải thích giùm em công thức bác làm được không ạ?
=IFERROR(INDEX(INDIRECT("DanhMuc!D2:D"&COUNTA(DanhMuc!$D:$D)),MATCH(1,--(IFERROR( FIND(INDIRECT("DanhMuc!D2:D"&COUNTA(DanhMuc!$D:$D)),Data!$E2,1),0)>0),0)), "<< Not found >>")

Chào bằng hữu:

Cái indirect này là màu mè hoa lá cành cho vui để giới hạn mảng index tương ứng với số dòng bên danh mục nhận biết. Nếu mình biết trước số dòng thì chỉ cần dùng DanhMuc!D2:DXXX là dc.
INDIRECT("DanhMuc!D2:D"&COUNTA(Danhmuc!$D:$D)
Giả sử đặt 1 name có tên DMNhanBiet = DanhMuc!D2:D800
Công thức sẽ được viết gọn lại như sau:
=IFERROR(INDEX(DMNhanBiet,MATCH(1,--(IFERROR(FIND(DMNhanBiet,Data!$E2,1),0)>0),0)),"<< Not found >>")

IFERROR(FIND(DMNhanBiet,Data!$E2,1),0)
==> Trả về 1 mảng có các phần từ là các vị trí tìm được, hoặc trả về 0 nếu tìm không thấy, của từng phần từ của DMNhanBiet trong chuỗi Data!E2. Sau đó đem danh sách này so sánh với số 0 để trả về 1 mảng chỉ có 0 và 1 (trong đó 0 là không tìm thấy, 1 là có tìm thấy phần tử trong danh mục nhận biết)


--(IFERROR(FIND(DMNhanBiet,Data!$E2,1),0)>0)
hai dấu -- là để biến các giá trị true, false thành số 1, và số 0 tương ứng. Không thích dùng --, thì dùng 1*, lão thấy cái nào cũng được.
--
(IFERROR(FIND(DMNhanBiet,Data!$E2,1),0)>0), hay 1*(IFERROR(FIND(DMNhanBiet,Data!$E2,1),0)>0) đều được, nhưng -- nó mang phong cách bí hiểm hơn. nhiều khi dùng 4 dấu trừ cũng được, ----(IFERROR(FIND(DMNhanBiet,Data!$E2,1),0)>0)


MATCH(1,--(IFERROR(FIND(DMNhanBiet,Data!$E2,1),0)>0),0)
==> trả về thứ tự của phần tử đầu tiên tìm được m của kết quả hàm Find (...)
INDEX(DMNhanBiet,MATCH(1,--(IFERROR(FIND(DMNhanBiet,Data!$E2,1),0)>0),0))
để trả về giá trị tìm được trong danh mục nhận biết.
 
Lần chỉnh sửa cuối:
Upvote 0
Chào bằng hữu:

Cái indirect này là màu mè hoa lá cành cho vui để giới hạn mảng index tương ứng với số dòng bên danh mục nhận biết. Nếu mình biết trước số dòng thì chỉ cần dùng DanhMuc!D2:DXXX là dc.

Giả sử đặt 1 name có tên DMNhanBiet = DanhMuc!D2:D800
Công thức sẽ được viết gọn lại như sau:



==> Trả về 1 mảng có các phần từ là các vị trí tìm được, hoặc trả về 0 nếu tìm không thấy, của từng phần từ của DMNhanBiet trong chuỗi Data!E2. Sau đó đem danh sách này so sánh với số 0 để trả về 1 mảng chỉ có 0 và 1 (trong đó 0 là không tìm thấy, 1 là có tìm thấy phần tử trong danh mục nhận biết)



hai dấu
-- là để biến các giá trị true, false thành số 1, và số 0 tương ứng. Không thích dùng --, thì dùng 1*, lão thấy cái nào cũng được.
--
(IFERROR(FIND(DMNhanBiet,Data!$E2,1),0)>0), hay 1*(IFERROR(FIND(DMNhanBiet,Data!$E2,1),0)>0) đều được, nhưng -- nó mang phong cách bí hiểm hơn. nhiều khi dùng 4 dấu trừ cũng được, ----(IFERROR(FIND(DMNhanBiet,Data!$E2,1),0)>0)

==> trả về thứ tự của phần tử đầu tiên tìm được m của kết quả hàm Find (...)
Dùng hàm Lookup ngắn gọn hơn.
Mã:
=IFERROR(LOOKUP(,-SEARCH(DanhMuc!$D$2:$D$724,Data!E2),DanhMuc!$D$2:$D$724),"")
 
Upvote 0
Upvote 0
Web KT

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

Back
Top Bottom