найти номер строки ячейки, содержащей критерии - PullRequest
0 голосов
/ 21 июня 2019

Мне нужно найти номера первой строки ячейки в столбце C, который содержит «120» без дубликатов (у меня есть данные более 10 из каждого числового кода, мне нужен только первый).Таким образом, код должен подобрать номер первой строки, содержащий, например, 120, 7120, 81200.

Код, который я попробовал ниже, смог найти только номер первой строки с ячейкой, содержащей 120. Для справки, AGCLэто буква столбца, полученная из другой функции поиска, а tbAC - это пользовательский ввод в текстовое поле.

Dim AGCN As Long
Dim AGCL As String
Dim AGNN As Long
Dim AGNL As String
Dim i As Long
Dim RowD As Long
Dim AAC As String
Dim rng As Range
Dim rownumber As Long
Dim AGC As Range
Dim AGN As Range
Dim firstaddress As Long
Dim nextaddress As Long

Set rng = Sheet1.Columns(AGCL & ":" & AGCL).Find(what:="*" & tbAC & "*", 
LookIn:=xlValues, lookat:=xlPart)
    rownumber = rng.Row
    Debug.Print rownumber '9

With Sheet1.Range(AGCL & ":" & AGCL)
    Set c = .Find("*" & tbAC & "*", LookIn:=xlValues)
    If Not c Is Nothing Then
        firstaddress = c.Value
        Debug.Print firstaddress
            With Me.ListBox2
           .ColumnCount = 3
           .ColumnWidths = "50;150;70"
           .AddItem
           .List(i, 0) = Str(firstaddress)
           i = o + 1
           End With

        Do
            Set c = .FindNext(c)
            If c Is Nothing Then
                GoTo donefinding
            ElseIf firstaddress <> c.Value Then
                nextaddress = c.Value
                Debug.Print nextaddress 'it doesn't print any value here
                'With Me.ListBox2
                '   .ColumnCount = 3
                '   .ColumnWidths = "50;150;70"
                '   .AddItem
                '   .List(i, 0) = Str(nextaddress)
                '   Debug.Print nextaddress
                '   i = o + 1
                'End With
            End If
        Loop While c.Address <> firstaddress 

    End If
donefinding: Exit Sub
End With

Любая помощь будет принята с благодарностью, спасибо!

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Вот функция Range.FindNext, которую вы можете использовать для извлечения всех ячеек, имеющих 120.

With Sheet1.Range(AGCL & ":" & AGCL)
     Set c = .Find("*" & tbAC & "*", lookin:=xlValues)
     If Not c Is Nothing Then
        firstAddress = c.Address
        Do

            Set c = .FindNext(c)
        If c is Nothing Then
            GoTo DoneFinding
        Elseif not firstaddress.value = c.value

          ''Whatever you want to do with the Second Found Value
          debug.print c.value

        End If
        Loop While c.Address <> firstAddress
      End If
      DoneFinding:
End With

Теперь, чтобы проверить, что значение уже найдено или нет, вы можете игратьв условии If этого цикла.Так что вы не получите те же значения снова.

0 голосов
/ 21 июня 2019

ОБНОВЛЕНО: Хорошо, я обновил в последний раз. Как уже упоминалось, я не знаю, что вы хотите сделать с дополнительными значениями ... но эта функция выведет их куда угодно ...?

удачи.

Вот пользовательская функция, которая соответствует тому, что вы ищете, она вернет первый раз, когда 120 появляется в ячейке ...

Вот еще одна возможность, которую вы могли бы использовать, если бы вы действительно хотели «содержать» только частичное совпадение.

Function SuperSearcherTHING(ivalue As Variant, theColumn As Range) As String
Dim rCell As Range
Const theSPACER As String = "|"
For Each rCell In Intersect(theColumn.EntireColumn, theColumn.Worksheet.UsedRange).Cells
    If InStr(1, rCell.Value, ivalue, vbTextCompare) > 0 Then
        SuperSearcherTHING = rCell.Value & theSPACER & SuperSearcherTHING
    End If

Next rCell

SuperSearcherTHING = Left(SuperSearcherTHING, Len(SuperSearcherTHING) - Len(theSPACER))

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