Nhờ giúp đỡ về VBA hàm tương tự như VLOOKUP

Liên hệ QC

khungvonline1

Thành viên mới
Tham gia
23/10/09
Bài viết
5
Được thích
0
Dạ là như thế này ạ:

Giả sử e có file excel gồm 2 sheet: nhap, data
trong data E có các dữ liệu sau: mã sp, trọng lượng, chiều ( dài, rộng, cao)
E muốn tạo 1 form gồm 2 textbox là "mã sp", và "số lần nhập" và khi mình nhập mã sản phẩm vô textbox "mã sp" và số lần lập lặp lại vô "số lần nhập" thì sẽ tự động tìm mã sp so sánh mã sp của sheet data, nếu tìm thấy mã sp trong sheet data sẽ tự động nhập các dòng "trọng lượng", "dài, rộng, cao" ứng với mã sp đó và nhập vào các cột tương ứng ở sheet "nhap", và ở phần số lần nhập nếu mình nhập số 10 thì nhập 10 dòng như thế, và tương tự với mã sp tiếp theo. Và với mã sp tiếp theo thì ở sheet "nhap" sẽ nối tiếp các dòng ở phía dưới chứ ko phải là nhập đề lên dữ liệu ở mã sp trước.
Nếu là excel bình thường thì dùng hàm vlookup, những e ko biết vba thì dùng hàm gì cho hợp lý và tối ưu nhất ạ, e gà vba mong các bro chỉ giáo với ạ, chân thành cám ơn, e có đính kèm file mẫu.
Như góp ý của Bro snow25 thì e đã sửa lại file có thêm form và ví dụ như sau
ví dụ ở form e nhập mã sp là A và số lần nhập là 5 thì ở sheet "nhap" sẽ phải hiển thị tương ứng là A2 đến A6 = 10, E2 đến E6=1, F2 đến F6=2, G2 đến G6=3. và khi em nhập mã sp tiếp theo ví dụ mã sp C và số lần nhập là 2 thì dữ liệu tương ứng với A7 đến A8 =12 tương tự với E, F, G.
 

File đính kèm

  • vba excel1.xlsm
    18.6 KB · Đọc: 14
Lần chỉnh sửa cuối:
Dạ là như thế này ạ:

Giả sử e có file excel gồm 2 sheet: nhap, data
trong data E có các dữ liệu sau: mã sp, trọng lượng, chiều ( dài, rộng, cao)
E muốn tạo 1 form gồm 2 textbox là "mã sp", và "số lần nhập" và khi mình nhập mã sản phẩm vô textbox "mã sp" và số lần lập lặp lại vô "số lần nhập" thì sẽ tự động tìm mã sp so sánh mã sp của sheet data, nếu tìm thấy mã sp trong sheet data sẽ tự động nhập các dòng "trọng lượng", "dài, rộng, cao" ứng với mã sp đó và nhập vào các cột tương ứng ở sheet "nhap", và ở phần số lần nhập nếu mình nhập số 10 thì nhập 10 dòng như thế, và tương tự với mã sp tiếp theo. Và với mã sp tiếp theo thì ở sheet "nhap" sẽ nối tiếp các dòng ở phía dưới chứ ko phải là nhập đề lên dữ liệu ở mã sp trước.
Nếu là excel bình thường thì dùng hàm vlookup, những e ko biết vba thì dùng hàm gì cho hợp lý và tối ưu nhất ạ, e gà vba mong các bro chỉ giáo với ạ, chân thành cám ơn, e có đính kèm file mẫu.
Ít ra bạn cũng phải có cái form bạn làm rồi chứ.Và cho cái ví dụ cụ thể ra.
 
Upvote 0
Dạ là như thế này ạ:

Giả sử e có file excel gồm 2 sheet: nhap, data
trong data E có các dữ liệu sau: mã sp, trọng lượng, chiều ( dài, rộng, cao)
E muốn tạo 1 form gồm 2 textbox là "mã sp", và "số lần nhập" và khi mình nhập mã sản phẩm vô textbox "mã sp" và số lần lập lặp lại vô "số lần nhập" thì sẽ tự động tìm mã sp so sánh mã sp của sheet data, nếu tìm thấy mã sp trong sheet data sẽ tự động nhập các dòng "trọng lượng", "dài, rộng, cao" ứng với mã sp đó và nhập vào các cột tương ứng ở sheet "nhap", và ở phần số lần nhập nếu mình nhập số 10 thì nhập 10 dòng như thế, và tương tự với mã sp tiếp theo. Và với mã sp tiếp theo thì ở sheet "nhap" sẽ nối tiếp các dòng ở phía dưới chứ ko phải là nhập đề lên dữ liệu ở mã sp trước.
Nếu là excel bình thường thì dùng hàm vlookup, những e ko biết vba thì dùng hàm gì cho hợp lý và tối ưu nhất ạ, e gà vba mong các bro chỉ giáo với ạ, chân thành cám ơn, e có đính kèm file mẫu.
Như góp ý của Bro snow25 thì e đã sửa lại file có thêm form và ví dụ như sau
ví dụ ở form e nhập mã sp là A và số lần nhập là 5 thì ở sheet "nhap" sẽ phải hiển thị tương ứng là A2 đến A6 = 10, E2 đến E6=1, F2 đến F6=2, G2 đến G6=3. và khi em nhập mã sp tiếp theo ví dụ mã sp C và số lần nhập là 2 thì dữ liệu tương ứng với A7 đến A8 =12 tương tự với E, F, G.
Bạn thử code này nhé.
Mã:
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
            Dim arr, lr As Long, kq, i As Long, a As Long, dk As String, k As Long
            With Sheets("data")
                lr = .Range("A" & Rows.Count).End(xlUp).Row
                arr = .Range("A2:E" & lr).Value
            End With
            dk = TextBox1.Value
            a = TextBox2.Value
            ReDim kq(1 To a, 1 To 7)
            For i = 1 To UBound(arr)
                If dk = arr(i, 1) Then
                    For k = 1 To a
                        kq(k, 1) = arr(i, 2)
                        kq(k, 5) = arr(i, 3)
                        kq(k, 6) = arr(i, 4)
                        kq(k, 7) = arr(i, 5)
                    Next k
                    GoTo xong
                End If
           Next i
xong:
           With Sheets("nhap")
                lr = .Range("A" & Rows.Count).End(xlUp).Row + 1
                If k Then .Range("A" & lr).Resize(k - 1, 7).Value = kq
           End With
End Sub
 
Upvote 0
Bạn thử code này nhé.
Mã:
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
            Dim arr, lr As Long, kq, i As Long, a As Long, dk As String, k As Long
            With Sheets("data")
                lr = .Range("A" & Rows.Count).End(xlUp).Row
                arr = .Range("A2:E" & lr).Value
            End With
            dk = TextBox1.Value
            a = TextBox2.Value
            ReDim kq(1 To a, 1 To 7)
            For i = 1 To UBound(arr)
                If dk = arr(i, 1) Then
                    For k = 1 To a
                        kq(k, 1) = arr(i, 2)
                        kq(k, 5) = arr(i, 3)
                        kq(k, 6) = arr(i, 4)
                        kq(k, 7) = arr(i, 5)
                    Next k
                    GoTo xong
                End If
           Next i
xong:
           With Sheets("nhap")
                lr = .Range("A" & Rows.Count).End(xlUp).Row + 1
                If k Then .Range("A" & lr).Resize(k - 1, 7).Value = kq
           End With
End Sub
Code chạy được, đúng như mong muốn của e, cảm ơn bro rất rất nhiều.
 
Upvote 0
Web KT
Back
Top Bottom