Xin Giúp Đỡ Code VBA hoặc Công Thức Tìm kiếm dữ liệu

Liên hệ QC

tuantu315

Thành viên hoạt động
Tham gia
30/9/13
Bài viết
141
Được thích
38
Như Tiêu Đề xin Anh/Chị diễn đàn giúp em công thức hoặc Code VBA để lấy dữ liệu từ sheets "X-HANG" sang sheet In HD
Với ĐK nhập ID Đơn Hàng ở sheet"In HD" sẽ kiếm được Tên hàng hoá sp ...vv... ở sheet "X-hang"
Em có thử dùng công thức và code để nhưng đang vướng mắc chưa ra được kết quả
- Đầu tiên em dùng công thức Index và match để tim kết quả từ Sô id
- Sau đó dùng Code lặp vòng For để lấy mã hàng rồi từ mã hàng dùng index match tìm các thông số còn lại
vấn đề gặp phải code VBA lấy tất cả mã hàng hiện đang có bên sheet "X-hang" chứ không lấy dc theo đúng ID đơn hàng.

Xin giúp đỡ em trong trường hợp này phải làm sao em bí cách rồi!!! Em xin cám ơn rất nhiều
 

File đính kèm

  • Book3.xlsm
    68.6 KB · Đọc: 9
Diều đầu tiên mình muốn thảo luận với bạn, đó là cấu trúc trang tính 'X-Hang" của bạn:
1./ Trong tên trang tính ta hoàn toàn không nên xài kí tự '-'; Nên xài, nếu cần thiết là '_'
2./ Mổi fiếu xuất của bạn đang chừa 4 dòng, là: Tiền hàng Thuế Chiết khấu Tổng P.trả; Theo mình, những dòng này nên chuyển ghi thành các cột
2.1. Bạn nên có trang tính hay bảng (Table) danh mục khách hàng, gồm các trường
[Mã KH], [Tên người mua hàng], [Số Đ. thoại], [Địa chỉ], [Thuế xuất], [Ngày sinh],. . . . .
Trường quan trọng nhất là trường mình đã tô đậm; Trường [Ngày sinh] để bạn sẽ chăm sóc thượng đế của bạn tốt hơn.
2.2. Một khi bạn đã có 2.1. thì các trường sau [Mã KH] nêu trên không cần thiết có mặt trong trang CSDL 'x_Hang' của bạn.
Khi nào cần chúng xuất hiện ta tra từ bảng danh mục mà lấy ra.
2.3. Nếu bạn chuyển trường [PTTT] lên trước trường [Mã HH], thì bạn thấy CSDL của bạn có 2 fần; Đó là fần chung & fần chi tiết.
Cũng có người làm cách này: Người ta tách 2 f ần này thành 2 trang tính (hay 2 bảng) khác nhau; & giữa chúng liên hệ với nhâu qua fiếu xuất hàng
([ID Đơn hàng])
Như vậy, ứng với 1 dòng bên bảng 'chung' ta có thể có nhiều dòng bên bảng 'ChiTiet'
2.4. Nếu không như mục 2.3, ta fải điền đầy đủ thông tin cho fẩn 'Chung' của CSDL của bạn: Có nghĩa là các cột
[ID đơn hàng], [Số hóa đơn], [Ngày hóa đơn], [Mã KH],. . . . không ô nào trống
3. Nếu để như bạn cũng thực hiện theo iêu cầu của bạn trong bài đăng không fải là không được; Người giúp trực tiếp bạn không fải là mình;
Mình sẽ xin chỉ gợi hướng dẫn vài điểm như sau:

a./ Xác dịnh dòng cuối chứa dữ liệu; Cách tốt nhất cho CSDL của bạn nên là fương thức Find("*",. . .) & gán số liệu này vô biến
b./ Thực hiện tìm kiếm trên cột [ID Đơn hàng]
C./ Nếu tìm thấy thì chép dữ liệu các ô trống bên dưới của nó cho đến khi gặp 1 ID Đơn hàng mói hay gặp dòng cuối chứa trong tham biến ta thực hiện mục a. nêu trên.

Chúc bạn thành công!
 
Upvote 0
Diều đầu tiên mình muốn thảo luận với bạn, đó là cấu trúc trang tính 'X-Hang" của bạn:
1./ Trong tên trang tính ta hoàn toàn không nên xài kí tự '-'; Nên xài, nếu cần thiết là '_'
2./ Mổi fiếu xuất của bạn đang chừa 4 dòng, là: Tiền hàng Thuế Chiết khấu Tổng P.trả; Theo mình, những dòng này nên chuyển ghi thành các cột
2.1. Bạn nên có trang tính hay bảng (Table) danh mục khách hàng, gồm các trường
[Mã KH], [Tên người mua hàng], [Số Đ. thoại], [Địa chỉ], [Thuế xuất], [Ngày sinh],. . . . .
Trường quan trọng nhất là trường mình đã tô đậm; Trường [Ngày sinh] để bạn sẽ chăm sóc thượng đế của bạn tốt hơn.
2.2. Một khi bạn đã có 2.1. thì các trường sau [Mã KH] nêu trên không cần thiết có mặt trong trang CSDL 'x_Hang' của bạn.
Khi nào cần chúng xuất hiện ta tra từ bảng danh mục mà lấy ra.
2.3. Nếu bạn chuyển trường [PTTT] lên trước trường [Mã HH], thì bạn thấy CSDL của bạn có 2 fần; Đó là fần chung & fần chi tiết.
Cũng có người làm cách này: Người ta tách 2 f ần này thành 2 trang tính (hay 2 bảng) khác nhau; & giữa chúng liên hệ với nhâu qua fiếu xuất hàng
([ID Đơn hàng])
Như vậy, ứng với 1 dòng bên bảng 'chung' ta có thể có nhiều dòng bên bảng 'ChiTiet'
2.4. Nếu không như mục 2.3, ta fải điền đầy đủ thông tin cho fẩn 'Chung' của CSDL của bạn: Có nghĩa là các cột
[ID đơn hàng], [Số hóa đơn], [Ngày hóa đơn], [Mã KH],. . . . không ô nào trống
3. Nếu để như bạn cũng thực hiện theo iêu cầu của bạn trong bài đăng không fải là không được; Người giúp trực tiếp bạn không fải là mình;
Mình sẽ xin chỉ gợi hướng dẫn vài điểm như sau:

a./ Xác dịnh dòng cuối chứa dữ liệu; Cách tốt nhất cho CSDL của bạn nên là fương thức Find("*",. . .) & gán số liệu này vô biến
b./ Thực hiện tìm kiếm trên cột [ID Đơn hàng]
C./ Nếu tìm thấy thì chép dữ liệu các ô trống bên dưới của nó cho đến khi gặp 1 ID Đơn hàng mói hay gặp dòng cuối chứa trong tham biến ta thực hiện mục a. nêu trên.

Chúc bạn thành công!
Cám ơn anh dùm thời gian của mình để góp ý cho em thực ra Sheet X-hang là được tổng hợp của các sheets khác, nó như dạng nhật ký để xem lại. Và việc sắp xếp lại nó lôi theo phải sữa toàn bộ code ... cách góp ý của anh rất hay em sẽ nghiên cứu thêm.
+ Hiện tại những phần khác em đã hoàn thành chỉ vướng mắc 1 điều như ở trên hy vọng anh có thể giúp em
 
Upvote 0
Cám ơn anh dùm thời gian của mình để góp ý cho em thực ra Sheet X-hang là được tổng hợp của các sheets khác, nó như dạng nhật ký để xem lại. Và việc sắp xếp lại nó lôi theo phải sữa toàn bộ code ... cách góp ý của anh rất hay em sẽ nghiên cứu thêm.
+ Hiện tại những phần khác em đã hoàn thành chỉ vướng mắc 1 điều như ở trên hy vọng anh có thể giúp em
Tổng hợp của các sheet khác có thể có đến bao nhiêu dòng? 100.000 dòng không?
Nếu có thể chỉ đến dóng 100.000 thì các công thức của bạn chỉ sử dụng vùng dữ liệu đến dòng 100.000 thôi.
Công thức của bạn: ví dụ ô P6 bạn dùng "C:C" hay "B:B" là cả cột 1.048.576 dòng có làm phiền cái máy tính của bạn không?
PHP:
=IFERROR(INDEX(XuatHang!C:C;MATCH(P5;XuatHang!B:B;0);0);"")
Sheet In_HD có khi nào sử dụng 1 hóa đơn hơn 20 dòng hàng hóa không?
Trong file tôi chỉ dùng đến 20 dòng, nếu bạn muốn có thể mở rộng thêm.
 

File đính kèm

  • InHoaDon.xlsm
    62 KB · Đọc: 25
Upvote 0
Như Tiêu Đề xin Anh/Chị diễn đàn giúp em công thức hoặc Code VBA để lấy dữ liệu từ sheets "X-HANG" sang sheet In HD
Với ĐK nhập ID Đơn Hàng ở sheet"In HD" sẽ kiếm được Tên hàng hoá sp ...vv... ở sheet "X-hang"
Em có thử dùng công thức và code để nhưng đang vướng mắc chưa ra được kết quả
- Đầu tiên em dùng công thức Index và match để tim kết quả từ Sô id
- Sau đó dùng Code lặp vòng For để lấy mã hàng rồi từ mã hàng dùng index match tìm các thông số còn lại
vấn đề gặp phải code VBA lấy tất cả mã hàng hiện đang có bên sheet "X-hang" chứ không lấy dc theo đúng ID đơn hàng.

Xin giúp đỡ em trong trường hợp này phải làm sao em bí cách rồi!!! Em xin cám ơn rất nhiều
Góp ý cho bạn:
1/ Nên có 1 sheet danh mục hàng hóa để dùng nó tra nhanh vào sheet Hóa đơn.
2/ Nên dùng sheet Hóa đơn để tra hàng hóa và khi in hóa đơn xong thì dùng nó để lưu vào sheet X-HANG (theo cách của bạn là làm ngược).
3/ Muốn in lại hóa đơn nào thì có thể dựa vào số hóa đơn hoặc ID đơn hàng để truy vấn ngược lại.
4/ sheet X-HANG các loại này: Tiền hàng, Thuế, Chiết khấu, Tổng P.trả nên có cột riêng để việc tổng hợp báo cáo được thuận lợi hơn.
 
Upvote 0
Góp ý cho bạn:
1/ Nên có 1 sheet danh mục hàng hóa để dùng nó tra nhanh vào sheet Hóa đơn.
2/ Nên dùng sheet Hóa đơn để tra hàng hóa và khi in hóa đơn xong thì dùng nó để lưu vào sheet X-HANG (theo cách của bạn là làm ngược).
3/ Muốn in lại hóa đơn nào thì có thể dựa vào số hóa đơn hoặc ID đơn hàng để truy vấn ngược lại.
4/ sheet X-HANG các loại này: Tiền hàng, Thuế, Chiết khấu, Tổng P.trả nên có cột riêng để việc tổng hợp báo cáo được thuận lợi hơn.
Cám ơn anh Be đã góp ý sau khi được anh Ba tê giúp các vấn đề của em xem như đã xong...
1. Sau khi hoàn thành File e sẽ chia sẽ file của mình để nếu ai cần thì sẽ sử dụng. Nếu a có thời gian mong anh giúp đỡ xem việc sắp xếp dữ liệu đã hợp lý chưa vì file em tích hơp luôn phần scan barcode. Em cám ơn
Bài đã được tự động gộp:

Tổng hợp của các sheet khác có thể có đến bao nhiêu dòng? 100.000 dòng không?
Nếu có thể chỉ đến dóng 100.000 thì các công thức của bạn chỉ sử dụng vùng dữ liệu đến dòng 100.000 thôi.
Công thức của bạn: ví dụ ô P6 bạn dùng "C:C" hay "B:B" là cả cột 1.048.576 dòng có làm phiền cái máy tính của bạn không?
PHP:
=IFERROR(INDEX(XuatHang!C:C;MATCH(P5;XuatHang!B:B;0);0);"")
Sheet In_HD có khi nào sử dụng 1 hóa đơn hơn 20 dòng hàng hóa không?
Trong file tôi chỉ dùng đến 20 dòng, nếu bạn muốn có thể mở rộng thêm.
Cám ơn anh Ba Tê đã giúp đỡ code của anh, em sẽ tinh chĩnh lại để phù hợp với file của em... Chúc anh nhiều sức khỏe.
 
Upvote 0
Cám ơn anh Be đã góp ý sau khi được anh Ba tê giúp các vấn đề của em xem như đã xong...
1. Sau khi hoàn thành File e sẽ chia sẽ file của mình để nếu ai cần thì sẽ sử dụng. Nếu a có thời gian mong anh giúp đỡ xem việc sắp xếp dữ liệu đã hợp lý chưa vì file em tích hơp luôn phần scan barcode. Em cám ơn.
Cám ơn anh Ba Tê đã giúp đỡ code của anh, em sẽ tinh chĩnh lại để phù hợp với file của em... Chúc anh nhiều sức khỏe.
Bạn có thể tham khảo cách làm trong File ở Link sau (tương tự như nội dung tôi góp ý):
https://www.giaiphapexcel.com/diendan/threads/theo-dõi-và-truy-vấn-đơn-thuốc-nơi-phòng-khám-bệnh.126073/
 
Upvote 0
Xem thêm file này lúc rỗi
 

File đính kèm

  • GPE.rar
    27.9 KB · Đọc: 21
Upvote 0
Web KT
Back
Top Bottom