Найти все значения в диапазоне, которые соответствуют определенным критериям и вернуть каждую строку VBA - PullRequest
0 голосов
/ 31 октября 2018

Я ищу некоторый код для поиска в диапазоне и возврата номера строки каждой ячейки в этом диапазоне, которая соответствует определенным критериям, и перечисления этих строк.

Ранее мне требовалось только первое значение, поэтому я использовал код:

Dim Criteria1 As Single
Dim Criteria2 As Single
Dim Required As Integer
Dim Range1 As Range
Dim GearNeg1 As Integer

SetColumn = 24
Set Range1 = Sheets("X").Range("A2:BT72").Columns(SetColumn).Cells
Criteria1 = Sheets("X").Range("P111").Value
Criteria2 = Sheets("X").Range("Q111").Value

For Each Cell In Range1

    If Cell.Value < Criteria1 And Cell.Value > Criteria2 Then

        Required = Cell.row

        Exit For

    End If
Next

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

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Вы можете прочитать диапазон в массив, зациклить массив и объединить подходящие строки в строку. Я использую тот факт, что вы начинаете со строки 2, и что я использую массив на основе 1, чтобы определить строку, т. Е. Я добавляю 1 к значению i, которое является индексом в массиве, где указывается квалифицирующее значение.

Вы также можете использовать

required = required & "," & i + ws.Range("A2:BT72").Row - LBound(arr)

VBA:

Option Explicit
Public Sub test()
    Dim criteria1 As Single, criteria2 As Single, required As String
    Dim arr(), ws As Worksheet, setColumn As Long, i As Long

    Set ws = ThisWorkbook.Worksheets("X")
    setColumn = 24
    arr = Application.Transpose(ws.Range("A2:BT72").Columns(setColumn).Value)

    criteria1 = ws.Range("P111").Value
    criteria2 = ws.Range("Q111").Value

    For i = LBound(arr) To UBound(arr)
        If arr(i) < criteria1 And arr(i) > criteria2 Then
            required = required & "," & i + 1
        End If
    Next

    required = Replace$(required, ",", vbNullString, 1, 1)

    Debug.Print required
End Sub
0 голосов
/ 31 октября 2018

Это минимальный пример, возвращающий строки Range A1:A30, которые содержат X в них:

Public Sub TestMe()

    Dim rowValues As String
    Dim myCell As Range

    For Each myCell In Worksheets(1).Range("A1:A30")
        If myCell = "X" Then
            rowValues = Trim(rowValues & " " & myCell.Row)
        End If
    Next myCell

    Debug.Print rowValues

End Sub

Возврат осуществляется через конкатенацию здесь: rowValues = Trim(rowValues & " " & myCell.Row), Trim() необходим для уменьшения первого " " при первой конкатенации.

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