Nhờ viết VBA thay hàm vlookup

Liên hệ QC

Nam168

Thành viên chính thức
Tham gia
11/4/22
Bài viết
81
Được thích
5
Giới tính
Nữ
Dạ em chào các anh chị trong diễn đàn!
Em có một số khó khăn khi nhập và sắp xếp dữ liệu nên xin nhờ anh chị giúp em một số vấn đề sau ạ:

1/ Tại sheet “Danh Sach” em đang dùng công thức phép tính ở cột H và dùng hàm vlookup tại cột B tham chiếu từ sheet “DSSP- SỐ THÙNG” ở cột B,C. Vì “Danh Sach” tổng hợp dữ liệu cả năm có thể lên đến vài ngàn dòng nên em nghĩ cách em đang làm có thể file sẽ bị nặng nên nhờ anh chị viết giùm em VBA thay cho những công thức em đang áp dụng với ạ.

2/ Với còn 1 thao tác em đang thực hiện ở sheet “ THẺ KHO” là tại cột G em lấy dữ liệu ở cột D của sheet “Danh Sach” filter Lot từ giá trị nhỏ nhất đến lớn nhất trong thùng rồi nhập tay, không biết các anh chị có cách nào tham chiếu giữa 2 thông tin này mà không cần lọc rồi nhập tay giúp em được hông ạ.

3/ Cột H ở sheet “THẺ KHO” em sẽ nhập tay, làm sao khi em nhập dữ liệu ở cột này thì bên sheet “Danh Sach” cột J cũng tự động copy dữ liệu theo.

Mong các anh chị giúp em
Em cảm ơn !
 

File đính kèm

  • FILE DANH SÁCH MẪU LƯU TP .xlsm
    47.1 KB · Đọc: 27
Em cảm ơn anh, file đã chạy đúng rồi ạ :)

Hướng dẫn em định dạng thế nào được không anh
Bạn mở cửa sổ VBE ra (Alt+F11), nhấn đúp vào Sheet4 (TheKho) sẽ hiện ra hình, tìm đến dòng giống dòng tô xanh trong hình:
Mã:
Target.Offset(0, 1) = Format(Minif(Rng, RngTc, DK), "0######") & "-" & Format(Maxif(Rng, RngTc, DK), "0######")
thì hiểu. Đây là trường hợp Nếu Số LOT chỉ có 7 ký tự và có số 0 ở đầu, nhiều hơn 7 thì bạn thêm dấu # vào phía sau.
P/S: Minif và MaxIf là 2 hạm tự tạo của bạn nào đó trên diễn đàn này (tôi không nhớ tên)tôi có cải tạo chút út.
Trong file tôi gửi cho bạn đã tính đến cả trường hợp bạn thay đổi (tên SP, hoặc Mã SP) ở cột B,C của Sh DSSP-SoThung thì Những giá trị ở cột B,C của sh DanhSach có liên quan cũng thay đổitương ứng. Bạn thử thay đổi 1 vài trường hợp và kiểm tra lại xem có đúng không.
 

File đính kèm

  • Screenshot (56).png
    Screenshot (56).png
    277.6 KB · Đọc: 19
Lần chỉnh sửa cuối:
Upvote 0
Trong file tôi gửi cho bạn đã tính đến cả trường hợp bạn thay đổi (tên SP, hoặc Mã SP) ở cột B,C của Sh DSSP-SoThung thì Những giá trị ở cột B,C của sh DanhSach có liên quan cũng thay đổitương ứng. Bạn thử thay đổi 1 vài trường hợp và kiểm tra lại xem có đúng không.
Oh cái này anh cũng làm luôn ạ, cảm ơn anh em sẽ thử ạ :)
 
Upvote 0
4/ Nhập thêm hoặc thay đổi cột B, C/Sh DSSP-SoThung và kiểm tra lại cột B, C/Sh Danh Sach xem có thay đổi gì không.
Cảm ơn anh, em đã thử thay đổi thông tin ở cột B, C/sh DSSP-sothung thì những nơi tham chiếu đều thay đổi theo ạ.
Anh @HUONGHCKT có thể chỉnh giống như này mà đối với cột G (số thùng) giúp em được không ạ. À còn 1 vấn đề nữa là cột G-số thùng khi thêm ký tự dạng text thì khi qua sh THEKHO không chạy như lúc dạng số ạ (em có kèm file bên dưới)

Anh @HUONGHCKT có thể cho em xin sđt được không ạ :)
 

File đính kèm

  • FILE DANH SÁCH MẪU LƯU TP .xlsm
    60.9 KB · Đọc: 5
Upvote 0
Cảm ơn anh, em đã thử thay đổi thông tin ở cột B, C/sh DSSP-sothung thì những nơi tham chiếu đều thay đổi theo ạ.
Anh @HUONGHCKT có thể chỉnh giống như này mà đối với cột G (số thùng) giúp em được không ạ. À còn 1 vấn đề nữa là cột G-số thùng khi thêm ký tự dạng text thì khi qua sh THEKHO không chạy như lúc dạng số ạ (em có kèm file bên dưới)

Anh @HUONGHCKT có thể cho em xin sđt được không ạ :)
Của bạn đây.
Đã sửa lại kiểu biến Điều kiện của Hàm Minif và maxif.
Số thùng (F7:F...của Sh TheKho) có là duy nhất không bạn? Bạn thử gõ gì đó vào các ô G7:G.../Sh TheKho và quay lại Sh DanhSach xem ở Cột J (từ J12: J...) có thay đổi gì không? Tôi tin là số kệ đã được tự động điền vào đúng với số thùng tương ứng như bên Sh TheKho
 

File đính kèm

  • FILE DANH SÁCH MẪU LƯU TP .xlsm
    60.8 KB · Đọc: 12
Upvote 0
Cảm ơn anh, em đã thử thay đổi thông tin ở cột B, C/sh DSSP-sothung thì những nơi tham chiếu đều thay đổi theo ạ.
Anh @HUONGHCKT có thể chỉnh giống như này mà đối với cột G (số thùng) giúp em được không ạ.
Anh ơi chỉnh thêm giúp em chỗ này luôn với ạ. Cảm ơn anh
 
Upvote 0
Anh ơi chỉnh thêm giúp em chỗ này luôn với ạ. Cảm ơn anh
Bạn xem file . Không biết có đúng ý không.
Bạn thay đổi 1 ô nào đó của cột G/Sh DSSP-SoThung và enter==> sau đó kiểm tra lại bên Sh DanhSach (cột I) và Bên Sh THEKHO (cột F) xem có thay đổi gì không.
Phần này tôi sử dụng lại code của anh Batman1.
 

File đính kèm

  • FILE DANH SÁCH MẪU LƯU TP .xlsm
    62.3 KB · Đọc: 18
Upvote 0
Bạn xem file . Không biết có đúng ý không.
Bạn thay đổi 1 ô nào đó của cột G/Sh DSSP-SoThung và enter==> sau đó kiểm tra lại bên Sh DanhSach (cột I) và Bên Sh THEKHO (cột F) xem có thay đổi gì không.
Phần này tôi sử dụng lại code của anh Batman1.
Cảm ơn anh, file đã đúng theo ý của em rồi ạ :)
 
Upvote 0
Bạn xem file . Không biết có đúng ý không.
Bạn thay đổi 1 ô nào đó của cột G/Sh DSSP-SoThung và enter==> sau đó kiểm tra lại bên Sh DanhSach (cột I) và Bên Sh THEKHO (cột F) xem có thay đổi gì không.
Phần này tôi sử dụng lại code của anh Batman1.
ANH @HUONGHCKT file em chạy đang gặp vấn đề sau ạ:
1/ khi thêm dữ liệu cột B,C sh "DSSP-Sothung" thì dữ liệu này tự động sao chép qua cột B, C của sh "Danh Sach"
2/ khi thêm hàng ở cột G sh " DSSP-Sothung" thì phải enter tới 2 lần mới xuống dòng và không xóa được hàng ở cột G này
3/ Sau khi em thêm hàng và xóa hàng ở cột B,C sh " DSSP-Sothung" thì báo lỗi, em bấm "end" thì sh "THEKHO" khi em chọn thùng không còn tham chiếu qua sh "Danh Sach" để lấy LOT SP và tham chiếu KỆ được nữa ạ
Nhờ anh xem lại file giúp em với ạ
Em cảm ơn anh
 

File đính kèm

  • FILE DANH SÁCH MẪU LƯU TP (4).xlsm
    58.5 KB · Đọc: 1
Upvote 0
ANH @HUONGHCKT file em chạy đang gặp vấn đề sau ạ:
1/ khi thêm dữ liệu cột B,C sh "DSSP-Sothung" thì dữ liệu này tự động sao chép qua cột B, C của sh "Danh Sach"
2/ khi thêm hàng ở cột G sh " DSSP-Sothung" thì phải enter tới 2 lần mới xuống dòng và không xóa được hàng ở cột G này
3/ Sau khi em thêm hàng và xóa hàng ở cột B,C sh " DSSP-Sothung" thì báo lỗi, em bấm "end" thì sh "THEKHO" khi em chọn thùng không còn tham chiếu qua sh "Danh Sach" để lấy LOT SP và tham chiếu KỆ được nữa ạ
Nhờ anh xem lại file giúp em với ạ
Em cảm ơn anh
Bạn xem lại file:
1/ Đã sửa lại code (vẫn lấy đoạn code của anh @batman1) để bắt sự kiện ở 2 cột B và C/Sh DSSP-SoThung.
2/Tôi cũng không hiểu. Nhưng có lẽ do bạn đặt nó là 1 Table (Table3). Xóa dữ liệu trong Table thì được chứ xóa 1 hoặc 1 số hàng trong Table thì không được thì phải. Nếu phải enter 2 lần thì cũng có vấn đề gì to tát gì đâu.
Mà cũng nhân đây hỏi bạn: Bạn đặt nhiều Table ấy để làm gì nhỉ (trong khi có cái Table chỉ có 1 cột và rất ít hàng)? có cần thiết không? Bởi vì Data Validation cũng lấy cái Table3 này để làm List trong khi cái Data Validation này chỉ cần làm một cái namerange động là được.
Theo tôi nếu các Table không cần thiết thì nên xóa bỏ để nhẹ file
3/ Đã sửa lại code
 

File đính kèm

  • FILE DANH SÁCH MẪU LƯU TP (4).xlsm
    58.3 KB · Đọc: 16
Upvote 0
anh @HUONGHCKT, em vừa mở file đã báo lỗi thế này rồi ạ
Do Cái Table ấy thừa 2 dòng không có dữ liệu
Bạn OK, rồi vào sheet DSSP-SoThung và xử lý với cái Table sao cho dòng cuối có dữ liệu cũng là dòng cuối của table.
Và để chắc chắn hơn bạn thay đoạn code trong code Add_Dic
Mã:
....
For i = 1 To UBound(arr, 1)
If arr(i, 2) <> Empty Then
       Temp = arr(i, 2)
       Dic.Add (Temp), i
    For j = 1 To 2
        aResult(i, j) = arr(i, j)
    Next j
End If
Next i
End Sub
Thành
Mã:
....
For i = 1 To UBound(arr, 1)
If arr(i, 2) <> Empty Then
       Temp = arr(i, 2)
       Dic.Add (Temp), i
    For j = 1 To 2
        aResult(i, j) = arr(i, j)
    Next j
End If
Next i
End Sub
Tức là thêm If arr(i, 2) <> Empty Then vào sau For i=1 to Ubound(arr,1) và thêm end if trước Next i
và chạy lại code Add_Dic
 
Upvote 0
Do Cái Table ấy thừa 2 dòng không có dữ liệu
Bạn OK, rồi vào sheet DSSP-SoThung và xử lý với cái Table sao cho dòng cuối có dữ liệu cũng là dòng cuối của table.
Và để chắc chắn hơn bạn thay đoạn code trong code Add_Dic
Mã:
....
For i = 1 To UBound(arr, 1)
If arr(i, 2) <> Empty Then
       Temp = arr(i, 2)
       Dic.Add (Temp), i
    For j = 1 To 2
        aResult(i, j) = arr(i, j)
    Next j
End If
Next i
End Sub
Thành
Mã:
....
For i = 1 To UBound(arr, 1)
If arr(i, 2) <> Empty Then
       Temp = arr(i, 2)
       Dic.Add (Temp), i
    For j = 1 To 2
        aResult(i, j) = arr(i, j)
    Next j
End If
Next i
End Sub
Tức là thêm If arr(i, 2) <> Empty Then vào sau For i=1 to Ubound(arr,1) và thêm end if trước Next i
và chạy lại code Add_Dic
em đã sửa lại rồi ạ
Bạn OK, rồi vào sheet DSSP-SoThung và xử lý với cái Table sao cho dòng cuối có dữ liệu cũng là dòng cuối của table.
Nhưng em vẫn thắc mắc sao lại không xóa được các hàng thừa trong 2 bảng ở sh "DSSP-sothung" vì em cũng không đặt tên bảng gì hết mà, giờ em vẫn để trống không được ạ, tại dữ liệu hiện tại không cần bổ sung gì hết
 
Upvote 0
em đã sửa lại rồi ạ

Nhưng em vẫn thắc mắc sao lại không xóa được các hàng thừa trong 2 bảng ở sh "DSSP-sothung" vì em cũng không đặt tên bảng gì hết mà, giờ em vẫn để trống không được ạ, tại dữ liệu hiện tại không cần bổ sung gì hết
Bạn thay rồi và chạy code thế nào? Người viết code thường nhiều khi nhác test (do không muốn tải file xuống....). Tôi đã nói rồi Những cái Table ấy nếu không liên quan đến tính toán công thức gì đó thì nên gỡ bỏ.
Còn xóa những hàng không có dữ liệu của Table thì tôi xóa thế này: mở Sh có Table có dòng trống, nhìn xuống dưới Table ấy bên góc phải có các hình nhỏ hình _| đưa chuột vào đó và kéo lên trên đến vị trí mon g muốn. Còn nếu không được bạn thử tìm kiếm cách xóa TableRange trên google chắc là có rất nhiều.
Chúc bạn thành công
 
Upvote 0
Bạn thay rồi và chạy code thế nào
Cảm ơn anh, hiện tại file hết hiện lỗi rồi ạ
Còn xóa những hàng không có dữ liệu của Table thì tôi xóa thế này: mở Sh có Table có dòng trống, nhìn xuống dưới Table ấy bên góc phải có các hình nhỏ hình _| đưa chuột vào đó và kéo lên trên đến vị trí mon g muốn. Còn nếu không được bạn thử tìm kiếm cách xóa TableRange trên google chắc là có rất nhiều.
Em sẽ thử tìm cách ạ
Chúc anh ngày mới vui vẻ :)
 
Upvote 0
Web KT

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

Back
Top Bottom