我正在研究一个宏,它将搜索不同县的List表,然后将整行粘贴到当前工作表上。我有一个每个人的工作表(名为马克,约翰等),每个人都被分配了几个县。马克有三个县,列在单元格J1:L1中,我将其命名为范围(MyCounties)。我的宏查看每个县的Sheet“List”列“I”,并将整行复制到Sheet“Mark”,从“A4”开始。我对此非常有效的宏。
对于像洛杉矶县这样的较大的地区,它分为6个人,每个人在该县内的不同城市,在洛杉矶市内,采取不同的邮政编码。是否有可能搜索匹配的县和城市(对于所有城市而不是洛杉矶),以及洛杉矶(城市)和邮政编码?县是列“I”,城市是列“G”,Zip是列“H”。所以“安德鲁”将在洛杉矶县城内的阿罕布拉,阿卡迪亚等地以及洛杉矶(城市)邮政编码为90004,90006等。我知道下面发布的宏不适用于此,但有没有编辑它的方式让它做我想做的事情?我有一个帮助表(“洛杉矶”),显示人员姓名(彼得)在A1:D1(合并单元格),B3和向下是县过滤,C3和向下是要过滤的城市,D3和向下是邮政编码过滤。然后我们跳过一列,F1:I1是下一个人。
我有一份测试文件,一旦我弄明白该怎么做,我就会附上。 test doc
Sub MoreReports()
Dim w As Long, cVar As Variant, zVar As Variant, rw As Long, sDoc As Worksheet, tDoc As Worksheet
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set sDoc = Sheets("List")
Set tDoc = Sheets("Peter")
Set cVar = Sheets("Los Angeles").Range("C3:C52")
Set zVar = Sheets("Los Angeles").Range("d3:d52")
With sDoc
If .AutoFilterMode Then .AutoFilterMode = False
With .Range(.Cells(4, "G"), .Cells(.Rows.Count, "I").End(xlUp))
.AutoFilter field:=3, Criteria1:="Los Angeles", Operator:=xlAnd
.AutoFilter field:=1, Criteria1:=cVar, Operator:=xlFilterValues
.AutoFilter field:=1, Criteria1:="Los Angeles", Operator:=xlAnd
.AutoFilter field:=2, Criteria1:=zVar, Operator:=xlFilterValues
.AutoFilter field:=3, Criteria1:="Ventura", Operator:=xlFilterValues
With .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
If CBool(Application.Subtotal(103, .Cells)) Then
.Cells.EntireRow.Copy Destination:=tDoc.Cells(rw, "A")
End If
End With
End With
If .AutoFilterMode Then .AutoFilterMode = False
End With
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
答案 0 :(得分:0)
所以,我将尝试为此举一个例子(托马斯)。请注意,我只关注城市/邮编,因为该县应该包含这两个独特的价值观;一些城市可以共享相同的邮政编码。
我打算遵循的整个过程是:
.1)记住参考表上的范围(我这样做,所以我可以正确设置我的匹配)
Sheets("Los Angeles").Range("W4:W15") 'City
Sheets("Los Angeles").Range("X4:X15") 'Zip
.2)记住列表表中的范围
Sheets("List").Range("G6:G338") 'City
Sheets("List").Range("H6:H338") 'Zip
.3)设置一个循环,用于对托马斯的参考文献进行分类
Dim i As Integer
For i = 15 to 4
.4)在循环中,创建另一个循环来搜索List
上的值Dim j As Integer
For j = 6 to 338
.5)使用If语句检查条件
If Match(Sheets("Los Angeles").Range("W"&j),Sheets("List").Range("G"&i))=Match(Sheets("Los Angeles").Range("X"&j),Sheets("List").Range("H"&i)) Then
.6)如果满足条件,我们将剪切并粘贴到相应的工作表
Sheets("List").Row(j).Copy Sheets("Thomas").Row(j)
.7)关闭If语句
End If
.8)转到循环中的下一个j
Next j
.9)转到循环中的下一个
Next i
.10)按邮政编码过滤Thomas'表(应删除所有空行)
Sheets("Thomas").Range("A1:I338").Sort key1:=Range("H1:H338"), order1:=xlAscending, Header:=xlYes
通过这个例子,你应该能够设置彼此的人的床单!
总的来说,它看起来像(可能有更好的方法,但这是我能想到的最简单的Match()事情,在我看来比Find()替代方案更容易):
Dim i As Integer
Dim j As Integer
For i = 15 to 4
For j = 6 to 338
If Match(Sheets("Los Angeles").Range("W"&j),Sheets("List").Range("G"&i))=Match(Sheets("Los Angeles").Range("X"&j),Sheets("List").Range("H"&i)) Then
Sheets("List").Row(j).Copy Sheets("Thomas").Row(j)
End If
Next j
Next i