Excel VBA:确定找到值的行

  • 本文关键字:VBA Excel vba excel
  • 更新时间 :
  • 英文 :


我正在尝试获得找到值的行号:

Set rep = Sheets("Details")
For i = 2 To n
If Sheets("Work").Range("A:A").Find(Worksheets("Work_report").Range("E" & i).Value, lookat:=xlWhole) Is Nothing Then
Else:
findrow = Sheets("Work_report").Range("E" & i).Find(Worksheets("Work").Range("A:A").Value, lookat:=xlWhole).Row
o = rep.Range("A" & Rows.Count).End(xlUp).Row + 1
rep.Range("A" & o).Value = "FT_EXCEL"
rep.Range("B" & o).Value = Sheets("Start").Range("C5") & "AB" & Format(o - 1, "00")
rep.Range("C" & o).Value = Sheets("Work_report").Range("E" & findrow)
End If
Next i
对于该行,

我想使用"findrow",它基本上需要在Work_Report中找到该行。仅当从工作表工作中找到单元格值时,才会执行此操作 Work_Report,因此为了找到行的编号,我正在尝试反转行并在Work_Report中找到它,但是这给了我错误 - 对象变量或未设置块变量。

谢谢!

我更喜欢在单列搜索中查找 MATCH:

Set rep = Sheets("Details")
Dim test As Long
For i = 2 To n
    test = 0
    On Error Resume Next
    test = Application.WorksheetFunction.Match(Worksheets("Work_report").Range("E" & i).Value, Sheets("Work").Range("A:A"), 0)
    On Error GoTo 0
    If test > 0 Then
        o = rep.Range("A" & Rows.Count).End(xlUp).Row + 1
        rep.Range("A" & o).Value = "FT_EXCEL"
        rep.Range("B" & o).Value = Sheets("Start").Range("C5") & "AB" & Format(o - 1, "00")
        rep.Range("C" & o).Value = Sheets("Work_report").Range("E" & test)
    End If
Next i

>您可以使用利用方法的运算符xlFilterValues值一次性完成AutoFilter()

Sub main()
    Dim rep As Worksheet
    Dim criteriaArr As Variant
    With Worksheets("Work_report") '<--| reference "Work_report" sheet
        criteriaArr = Application.Transpose(.Range("E2", .Cells(.Rows.Count, "E").End(xlUp)).Value) '<--| store its column E cells content from row 2 down to last not empty one
    End With
    Set rep = Sheets("Details")
    With Worksheets("Work") '<--| reference "Work" sheet
        With .Range("A1", .Cells(.Rows.Count, "A").End(xlUp)) '<--| reference its column A cells from row 1 (header) down to last not empty one
            .AutoFilter Field:=1, Criteria1:=criteriaArr, Operator:=xlFilterValues '<--| filter it with "Work_report" sheet column E content
            If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then '<--| if any filtered cells other then headers
                With .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible) '<--| reference filtered cells skipping header
                    rep.Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(.Rows.Count).Value = "FT_EXCEL" '<--| write 'rep' sheet column A corresponding cells content
                    With rep.Range("B" & Rows.Count).End(xlUp).Offset(1).Resize(.Rows.Count)
                        .Formula = "=CONCATENATE(Start!$C$5,""AB"",TEXT(ROW(),""00""))" '<--| '<--| write 'rep' sheet column B corresponding cells content
                        .Value = .Value
                    End With
                End With
            End If
        End With
        .AutoFilterMode = False
    End With
End Sub

最新更新