Tạo List tìm kiếm cho mã hàng hóa

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Chào cả nhà !!!
Em có File này nhờ mọi người giúp em với!
Yêu cầu:
– Bên Sheet "Xuất Kho" khi nhập dữ liệu vào cột F thì tự động tìm kiếm ra những ký tự có trong List tại cột G trong sheet "Bang Ma Hang Hoa"
– Ví Dụ: Nhập bánh thì trong list xuất hiện những chữ ô có chữ bánh, Hoặc nhập 360 thì xuất hiện những ô có chứa 360, Hoặc nhập 288 thì xuất hiện những ô có chứa 288 …
Em xin cám ơn cả nhà!!!

Tôi có vài thắc mắc:

1) Có nhất thiết phải có cột "Chọn mã hàng" hay không? Bởi chỉ cần nhập vào mã hàng tại cột "Mã hàng" thì tự nhiên nó sẽ tính dựa trên mã hàng này. Tôi nghĩ nên bỏ đi.

2) Bạn muốn dùng List hay lập trình bằng ComboBox?

Em muốn tạo lits và tự động tìm kiếm những điều kiện như em đã nêu trên…
có thể viết bằng code…Tại vì trong mã hàng của em có rất nhiều mã hàng, nên phải tạo tìm kiếm như vậy.

1) Thay vì dùng List validation, cái này nó chỉ hiển thị đúng 1 cột, mất công phải viết nhiều code, thì tôi lại dùng ComboBox, nó vừa hiển thị được nhiều cột vừa tạo được các sự kiện để tìm kiếm theo key mà bạn gõ vào nó.

2) Tôi đã bỏ cột Chọn mã hàng vì nó không cần thiết

3) Tôi cũng Trim(Mã hàng) để chúng không có khoảng trắng đằng sau ở cột Mã hàng (cột B của sheet Bang Ma Hang Hoa).

4) Bạn tự chỉnh sửa lại công thức tại sheet In Toa

5) Tại cột Mã hàng (cột F, Xuat Kho) tôi có đặt 1 checkbox, nếu nó được check thì sẽ tìm theo Tên Hàng, còn không thì nó tìm theo Mã Hàng.

6) Nói chung, có gì thắc mắc thì bạn hỏi tiếp.

Thủ tục tạo mảng dữ liệu trong Standard Module:

Public pubArrList
Public pubUBound As Long

Sub ArrCreate()
    Dim HangCuoi As Long
    Dim ShBangMa As Worksheet

Set ShBangMa = Sheets("Bang Ma Hang Hoa")
    HangCuoi = ShBangMa.Range("B" & Rows.Count).End(xlUp).Row

pubArrList = ShBangMa.Range("B2:D" & HangCuoi)
    pubUBound = UBound(pubArrList)
End Sub

Thủ tục sự kiện trong Sheet Module:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    With ComboBox1
        If Selection.Count = 1 And Target.Row > 2 And Target.Column = 6 Then
            If Not IsArray(pubArrList) Then
                Call ArrCreate
                .List = pubArrList
            End If
            .Visible = False
            .Text = ""
            If .ListCount < pubUBound Then
                .List = pubArrList
            End If
            .Top = Target.Top
            .Left = Target.Left
            .Height = Target.Height
            .Width = Target.Width
            .Visible = True
            .Activate
        Else
            If .Visible = True Then
                .Visible = False
            End If
        End If
    End With
End Sub

Private Sub ComboBox1_Change()
    With ComboBox1
        If .MatchFound Then
            ActiveCell.Value = .Value
            ActiveCell.Offset(, 1) = .List(, 1)
            ActiveCell.Offset(, 2) = .List(, 2)
        End If
    End With
End Sub

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
        ActiveCell.Offset(1).Select
    End If
End Sub

Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If Not IsArray(pubArrList) Then Exit Sub
    Select Case KeyCode
    Case 9, 13, 37 To 40
    Case Else
        If ComboBox1 > "" Then ComboBox1.DropDown

Dim StrItem As String
        Dim n As Long, r As Long
        Dim c As Byte, col As Byte
        Dim GetRows(), ArrFilter()

col = IIf(CheckBox1, 2, 1)

StrItem = "*" & UCase(ComboBox1) & "*"

For r = 1 To pubUBound
            If UCase(pubArrList(r, col)) Like StrItem Then
                n = n + 1
                ReDim Preserve GetRows(1 To n)
                GetRows(n) = r
            End If
        Next

If n > 0 Then
            ReDim ArrFilter(1 To n, 1 To 3)
            For c = 1 To 3
                For r = 1 To n
                    ArrFilter(r, c) = pubArrList(GetRows(r), c)
                Next
            Next
            ComboBox1.List = ArrFilter
        Else
            ComboBox1.List = Array()
        End If
    End Select
End Sub

Để tìm theo Mã Số:

Sau khi bỏ check, tôi chọn một ô nào đó để nó hiện CBB lên và gõ vào chữ M thì các mã có chứa M hiện ra.

4009

Để tìm theo Tên Hàng:

Tôi check vào đó và gõ vào từ khóa có liên quan đến tên hàng trong CBB.

4008www.giaiphapexcel.com/diendan/threads/t%E1%BA%A1o-list-t%C3%ACm-ki%E1%BA%BFm-cho-m%C3%A3-h%C3%A0ng-h%C3%B3a.94417/

Khóa học Power PI – Ứng dung trong Nhân sự
Khóa học SprinGO phù hợp

Khóa học Power PI – Ứng dung trong Nhân sự

TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...

Xem khóa học
★★★★★ 5 ★ 1 👤 10 ▥ 0
Quảng cáo

Bạn nên đọc

Bình luận

Quảng cáo

Cũ vẫn chất

Xem thêm