如何将多个条件应用于 .Find?

山姆

我改编了我在网上找到的代码。

  • 它在 A 列中找到字符串“car”并将行作为数组返回
  • 它为数组的长度分配一个变量(找到多少匹配项)
  • 它分配一个变量来生成一个介于 0 和数组长度之间的随机数
  • 然后将随机匹配行的值打印到 K3 中
Dim myArray() As Variant
Dim x As Long, y As Long
Dim msg As String

With ActiveSheet.Range("A1:A" & ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row)

    Set c = .find("Car", LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            ReDim Preserve myArray(y)
            myArray(y) = c.Row
            y = y + 1
            Set c = .findNext(c)
            If c Is Nothing Then
                GoTo DoneFinding
            End If
        Loop While c.Address <> firstAddress
    End If

DoneFinding:
End With

For x = LBound(myArray) To UBound(myArray)
    msg = msg & myArray(x) & " "
Next x

ArrayLen = UBound(myArray) - LBound(myArray)

random_index = WorksheetFunction.RandBetween(0, ArrayLen)

MsgBox myArray(random_index)

Dim test As String

test = "B" & myArray(random_index)

Range("K3").Value = Range(test)

例子
例子

我正在努力调整查找代码以允许多个条件。所以在我的例子中,它找到了“汽车”。如果我想找到在 A 列中包含“Car”而在 D 列中包含“Red”的匹配项怎么办?

我试过了

With ActiveSheet.Range("A1:A" & "D1:D" & ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row & ActiveSheet.Range("D" & Rows.Count).End(xlUp).Row)
     Set c = .find("Car", "Red", LookIn:=xlValues)

我在 Set 行上发现类型不匹配。

万一它令人困惑,它当前会查找一个字符串,例如“Car”,但我最终会将其链接到将分配给数据验证列表的变量。因此,如果用户从下拉列表中选择“汽车”,这就是它将搜索的内容。

Pᴇʜ

也许 Advancde Filter 是满足您需求的东西:

在此处输入图片说明

示例代码

Option Explicit

Public Sub FilterData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("YourSheetName")

    Dim LastRow As Long
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    Dim CriteriaRange As Range
    Set CriteriaRange = ws.Range("A1", "E2")

    Dim DataRange As Range
    Set DataRange = ws.Range("A4", "E" & LastRow)

    DataRange.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=CriteriaRange, Unique:=False
End Sub

Public Sub ShowAll()
    On Error Resume Next
    ActiveSheet.ShowAllData
    On Error GoTo 0
End Sub

根据评论编辑:

您可以使用高级过滤器,然后遍历过滤器结果:

在此处输入图片说明

Option Explicit

Public CurrentRow As Long

Public Sub FilterData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("YourSheetName")

    Dim LastRow As Long
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    Dim CriteriaRange As Range
    Set CriteriaRange = ws.Range("A1", "E2")

    Dim DataRange As Range
    Set DataRange = ws.Range("A4", "E" & LastRow)

    DataRange.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=CriteriaRange, Unique:=False
End Sub

Public Sub ShowAll()
    On Error Resume Next
    ActiveSheet.ShowAllData
    CurrentRow = 1
    On Error GoTo 0
End Sub


Public Sub GetNextResult()
    FilterData

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("YourSheetName")

    Dim LastRow As Long
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    Dim DataRange As Range
    Set DataRange = ws.Range("A4", "E" & LastRow)

    Dim FilteredData As Range
    Set FilteredData = DataRange.Resize(ColumnSize:=1).SpecialCells(xlCellTypeVisible)

    If CurrentRow + 1 > FilteredData.Cells.Count Then
        CurrentRow = 1
    End If

    CurrentRow = CurrentRow + 1
    Dim i As Long
    Dim Cell As Variant
    For Each Cell In FilteredData
        i = i + 1
        If i = CurrentRow Then
            Cell.EntireRow.Select
            'or
            'MsgBox Cell.Value & vbCrLf & Cell.Offset(0, 1) & vbCrLf & Cell.Offset(0, 2) & vbCrLf & Cell.Offset(0, 3) & vbCrLf & Cell.Offset(0, 4)
        End If
    Next Cell
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将条件应用于熊猫iloc

如何将多个条件(包括布尔运算符)应用于ifelse语句

如何将jquery命令应用于多个div?

如何将JavaScript函数应用于多个图像

如何将多个蒙版应用于UIView

如何将lambda函数应用于满足PANDAS中条件的行

如何将具有多种条件的函数应用于熊猫数据框?

如何将函数应用于多个变量

如何使用find_All()使用Python将正则表达式应用于BeautifulSoup

如何将函数应用于多个列以在R中创建多个新列?

如何将Numpy中的累积总和应用于条件与先前值?

如何将条件格式应用于命名范围?

我如何将find_all 2次应用于解析

如何将组织事务应用于多个项目

使用find -exec将msgfmt命令递归应用于目录中的所有.po文件

如何将过滤器应用于具有多个“ AND”条件的DataView

如何将条件格式应用于图表中的表格?

如何将条件格式应用于数字数组的行倍数

如何将用户指定的条件应用于Access查询中的多个字段?

如何将条件应用于xsl密钥

如何将多个类应用于jQuery中的多个Div

如何将linkActive应用于多个链接?

如何将LIMIT / ORDER条件应用于ActiveRecord联接?

如何将javascript应用于多个类?

如何将IF语句条件应用于Excel中可见行的小计

如果熊猫出现条件,如何将逻辑比较应用于分类变量

如何将 isPointInPath() 应用于多个路径

如何将条件应用于 Angular-12 FormArray 中的复选框

如何将条件应用于 PySpark 中的 groupby 数据框