Excel 查找符合特定条件的范围内的所有值,并返回每行VBA
我正在寻找一些代码来搜索某个区域,并返回该区域中符合特定条件的每个单元格的行号,然后列出这些行 以前我只需要第一个值,所以一直在使用代码:Excel 查找符合特定条件的范围内的所有值,并返回每行VBA,excel,vba,for-loop,search,Excel,Vba,For Loop,Search,我正在寻找一些代码来搜索某个区域,并返回该区域中符合特定条件的每个单元格的行号,然后列出这些行 以前我只需要第一个值,所以一直在使用代码: 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").Column
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
Dim标准1作为单个
模糊标准2作为单一标准
Dim必需为整数
变暗范围1作为范围
Dim GearNeg1为整数
SetColumn=24
设置范围1=图纸(“X”).范围(“A2:BT72”).列(设置列).单元格
标准1=板材(“X”).范围(“P111”).值
标准2=板材(“X”).范围(“Q111”).值
对于范围1中的每个单元格
如果Cell.ValueCriteria2,则
必需=Cell.row
退出
如果结束
下一个
我一直在尝试添加一个for循环,以将符合条件的值的所有行值返回到列表中。但是,我很挣扎,每次似乎只能找到第一个值。这是一个最小的示例,返回范围
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()
来减少第一次连接时的第一个”
。您可以将范围读取到数组中,循环数组并将符合条件的行连接到字符串中。我使用从第2行开始的事实,并且我使用基于1的数组来确定行,即,我将1添加到I的值,I是数组中限定值所在的索引
你也可以使用
required = required & "," & i + ws.Range("A2:BT72").Row - LBound(arr)
VBA:
选项显式
公共子测试()
Dim criteria1为单个,criteria2为单个,必需为字符串
Dim arr(),ws作为工作表,setColumn作为长,i作为长
设置ws=ThisWorkbook.Worksheets(“X”)
setColumn=24
arr=Application.Transpose(ws.Range(“A2:BT72”).Columns(setColumn).Value)
准则1=ws.范围(“P111”)值
准则2=ws.范围(“Q111”)值
对于i=LBound(arr)到UBound(arr)
如果arr(i)<标准1和arr(i)>标准2,则
必需=必需&“,”&i+1
如果结束
下一个
必需=替换$(必需,,,vbNullString,1,1)
调试。需要打印
端接头
为什么要这样做:设置范围1=图纸(“X”).范围(“A2:BT72”).列(设置列).单元格?设置列是否变化?另外,使用Long not Integer可以避免潜在的溢出。谢谢你的建议,是的,setcolumn会根据问题的不同而变化。谢谢QHarr,这很好!我的下一步是搜索这些行,并在两个已知列上找到两个值。你对此有什么建议吗?使用范围查找法。
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