搜索范围并使用VBA

时间:2018-05-18 15:16:27

标签: excel vba excel-vba

我正在尝试编写一些可以在特定范围内搜索特定数字的内容。

EX:

Dim cell As Range
For Each cell In Range("E5:E112")
If InStr(cell.Value, "260") > 0 Then
DO THIS
ElseIf InStr(cell.Value, "154") > 0 Then
DO THIS
etc...

我使用instr,因为单元格会有“word 1 word 2 260 word 3”。

对于在该范围内找到的每个匹配项,我想将某个值放入不同列中的同一行。

连连呢?提前谢谢!

3 个答案:

答案 0 :(得分:1)

试试这个:

Sub testing()
    Dim cell As Range
    For Each cell In Range("E5:E112")
        If InStr(cell.Value, "260") > 0 Then
            cell.Offset(0, 2).Value = "Found 260"
        ElseIf InStr(cell.Value, "154") > 0 Then
            cell.Offset(0, 2).Value = "Found 154"
        End If
    Next
End Sub

答案 1 :(得分:1)

创建要查找的项目数组,然后使用内置查找函数循环它。

然后使用返回的行号来查找所需的值。它会更快

Dim lkupArr()
lkupArr = Array(260, 154)

Dim i As Long
For i = LBound(lkupArr) To UBound(lkupArr)
    Dim lkuprow As Long
    lkuprow = 0
    On Error Resume Next
        lkuprow = Application.WorksheetFunction.Match("*" & lkupArr(i) & "*", ActiveSheet.Range("E:E"), 0)
    On Error GoTo 0
    If lkuprow > 0 Then
        MsgBox lkupArr(i) & " found on row " & lkuprow & "."
        'Then just use the return to return the value from the column you want
        'The following returns the value in column F on the same row.
        Dim ret
        ret = ActiveSheet.Cells(lkuprow, "F").Value
        Debug.Print ret
    End If
Next i

答案 2 :(得分:1)

也许不是最优雅的解决方案,但是没有广泛使用电子表格,因此性能方面(如果你有大量数据要处理),应该比其他解决方案更好。

Function SearchAndFind()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim rngValues As Range
    Dim arrRng As Variant, arrFind As Variant
    Dim i As Long, j As Long, newColOffset As Long

    'Adjust as needed
    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Sheet1")
    Set rngValues = ws.Range("E5:E112")
    arrRng = rngValues
    arrFind = Array("260", "154")
    newColOffset = 2


    For i = LBound(arrRng) To UBound(arrRng)                'loop through the given range, first column only
        For j = LBound(arrFind) To UBound(arrFind)          'loop through items to find
            If InStr(arrRng(i, 1), arrFind(j)) > 0 Then     'found the value
                'Return the values
                rngValues.Cells(1, 1).Offset(i - 1, newColOffset).Value = arrRng(i, 1)
                Exit For
            End If
        Next j
    Next i

End Function