Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA嵌套If/范围匹配_Excel_Vba_Loops - Fatal编程技术网

Excel VBA嵌套If/范围匹配

Excel VBA嵌套If/范围匹配,excel,vba,loops,Excel,Vba,Loops,我有一个相当大的excel文件,里面有一个员工列表,几列薪水数据,然后是一个会计周,当数据被收集到的时候 我试图搜索这些数据,并在宏中将某个员工与特定的会计周进行匹配。我有一个解决方案,可以找到名称,但不会打印财政周,而且速度非常慢,我相信有更好的方法来完成这个简单的任务。下面是我所拥有的,非常简单,最后我需要捕获行中的数据,但现在我只是打印以获得概念证明 Sub loop_test() Dim ClientTable As Range Dim rng1 As Range, rn

我有一个相当大的excel文件,里面有一个员工列表,几列薪水数据,然后是一个会计周,当数据被收集到的时候

我试图搜索这些数据,并在宏中将某个员工与特定的会计周进行匹配。我有一个解决方案,可以找到名称,但不会打印财政周,而且速度非常慢,我相信有更好的方法来完成这个简单的任务。下面是我所拥有的,非常简单,最后我需要捕获行中的数据,但现在我只是打印以获得概念证明

Sub loop_test()
    Dim ClientTable As Range
    Dim rng1 As Range, rng2 As Range, desired_emp As String, desired_fw As Integer

    desired_emp = Application.InputBox("Select an Employee", Type:=8)
    desired_fw = Application.InputBox("What FW would you like to do this for?", Type:=8)


    Set FullName = Sheets("Query5").Range("A:A")
    Set FiscalWeek = Sheets("Query5").Range("F:F")

    For Each rng1 In FullName.Columns(1).Cells
        If rng1.Value = desired_emp Then
            matched_name = rng1.Cells.Value

            For Each rng2 In FullName.Columns(1).Cells
                If rng2.Value = desired_fw Then
                    matched_fw = rng2.Cells.Value
                End If
            Next
        End If
    Next

    Range("i3").Value = matched_name
    Range("j3").Value = matched_fw

End Sub

我在A列和B列中设置了一个名称和会计周的示例范围。修改下面的代码以匹配工作簿中的列和范围,并将目标工作表设置到适当的位置

此代码根据用户输入自动筛选您的范围,如果存在匹配项,则将结果复制到其他工作表:

Sub Autofilter_test()
    Dim clientTable As Range
    Dim desired_emp As String
    Dim desired_fw As Integer
    Dim MatchRange As Range
    Dim tgt As Worksheet

    Set clientTable = Range("A1:B8")
    Set tgt = ThisWorkbook.Sheets("Sheet2")
    ActiveSheet.AutoFilterMode = False
    desired_emp = Application.InputBox("Select an Employee")
    desired_fw = Application.InputBox("What FW would you like to do this for?")

    With clientTable
        .AutoFilter Field:=1, Criteria1:=desired_emp
        .AutoFilter Field:=2, Criteria1:=desired_fw
    End With

    Call CopyFilteredData(tgt)

End Sub


Sub CopyFilteredData(tgt As Worksheet)
    ' by Tom Ogilvy source: http://www.contextures.com/xlautofilter03.html
    Dim rng As Range
    Dim rng2 As Range

    With ActiveSheet.AutoFilter.Range
     On Error Resume Next
       Set rng2 = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _
           .SpecialCells(xlCellTypeVisible)
     On Error GoTo 0
    End With
    If rng2 Is Nothing Then
       MsgBox "No data to copy"
    Else
       tgt.Cells.Clear
       Set rng = ActiveSheet.AutoFilter.Range
       rng.Offset(1, 0).Resize(rng.Rows.Count - 1).Copy _
         Destination:=tgt.Range("A1")
    End If
       ActiveSheet.ShowAllData

End Sub

尝试自动筛选而不是循环。下面是一个应该让您开始的示例:。您可以将自动筛选的条件设置为员工和会计周。外部循环和内部循环都在搜索第一列数据。在FiscalWeek中,每个rng2的内部循环都应该是
。单元格
,但这只是在任一列中找到第一个匹配项:假设它们都应该在同一行上?变量“matched_name”和“matched_fw”没有大小是否重要?您可能不需要宏来执行此操作,您是否尝试过在excel中使用2个输入单元格并使用
VLookup()
函数。CopyFilteredata有一些问题,但我可以解决。自动过滤器工作正常。谢谢