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