Как искать указанный столбец? - PullRequest
1 голос
/ 09 февраля 2020

Я хочу искать данные на основе номера столбца "C".

Option Explicit

Private Sub TextBox1_Change()
Me.TextBox1 = Format(StrConv(Me.TextBox1, vbUpperCase))

Dim sh As Worksheet
Set sh = Sheets("Sheet2")

Dim i As Long
Dim x As Long
Dim p As Long

Me.ListBox1.Clear

'Display Header

Me.ListBox1.AddItem "Product Name"
Me.ListBox1.List(ListBox1.ListCount - 1, 1) = "HSN Code"
Me.ListBox1.List(ListBox1.ListCount - 1, 2) = "Quantity"
Me.ListBox1.List(ListBox1.ListCount - 1, 3) = "Rate"
Me.ListBox1.List(ListBox1.ListCount - 1, 4) = "GST"
Me.ListBox1.List(ListBox1.ListCount - 1, 5) = "Total"

Me.ListBox1.Selected(0) = True

For i = 2 To sh.Range("B" & Rows.Count).End(xlUp).Row
For x = 1 To Len(sh.Cells(i, 2))
p = Me.TextBox1.TextLength

If UCase(Mid(sh.Cells(i, 2), x, p)) = Me.TextBox1 And Me.TextBox1 <> "" Then

With ListBox1

.AddItem sh.Cells(i, 2)
.List(ListBox1.ListCount - 1, 1) = sh.Cells(i, 3)
.List(ListBox1.ListCount - 1, 2) = sh.Cells(i, 4)
.List(ListBox1.ListCount - 1, 3) = sh.Cells(i, 5)
.List(ListBox1.ListCount - 1, 4) = sh.Cells(i, 6)
.List(ListBox1.ListCount - 1, 5) = sh.Cells(i, 7)
End With

End If
Next x
Next i

End Sub

На основе первого столбца "B" Отображается результат.

Я хочу искать на основе столбца "C".

Excel лист2 Данные:

enter image description here

При вводе в текстовое поле HSN1 Данные должны отображаться в Listbox, а не на основе AB.

Мой вывод: Когда я ввожу HSN2 в Textbox

Выход:

enter image description here

1 Ответ

0 голосов
/ 09 февраля 2020

(sh.Cells(i, 2) просматривает значения столбца "B".

Попробуйте вместо этого использовать sh.Range("C" & i).Value.

См. Раздел измененного кода ниже:

With Me.ListBox1
    .Clear

    'Display Header
    .AddItem "Product Name"
    .List(.ListCount - 1, 1) = "HSN Code"
    .List(.ListCount - 1, 2) = "Quantity"
    .List(.ListCount - 1, 3) = "Rate"
    .List(.ListCount - 1, 4) = "GST"
    .List(.ListCount - 1, 5) = "Total"

    .Selected(0) = True
End With

For i = 2 To sh.Range("B" & Rows.Count).End(xlUp).Row
    For x = 1 To Len(sh.Range("C" & i).Value)
        p = Me.TextBox1.TextLength

        If UCase(Mid(sh.Range("C" & i).Value, x, p)) = Me.TextBox1 And Me.TextBox1 <> "" Then
            With ListBox1
                .AddItem sh.Range("B" & i).Value
                .List(.ListCount - 1, 1) = sh.Range("C" & i).Value
                .List(.ListCount - 1, 2) = sh.Range("D" & i).Value
                .List(.ListCount - 1, 3) = sh.Range("E" & i).Value
                .List(.ListCount - 1, 4) = sh.Range("F" & i).Value
                .List(.ListCount - 1, 5) = sh.Range("G" & i).Value
            End With
        End If
    Next x
Next i

Снимок экрана с результатом: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...