【发布时间】:2017-01-08 08:21:30
【问题描述】:
我尝试使用定义的范围循环通过自动过滤器来复制数据,然后循环通过我想要粘贴值数据的范围数组。
当内部循环继续执行并且所有范围都具有相同的值时,我遇到了问题。
认为我需要以某种方式将其压缩为 1 个循环,但我一生无法弄清楚如何让两者在同一个循环中一起递增?
Sub TrendTables()
Dim rng As Range, dailyTrendrng As Long, c As Range
Dim lastrow As Long
Dim aTrendRng(1 To 16) As Range
Set aTrendRng(1) = Sheets("Daily Trends").Range("A2")
Set aTrendRng(2) = Sheets("Daily Trends").Range("K2")
Set aTrendRng(3) = Sheets("Daily Trends").Range("A29")
Set aTrendRng(4) = Sheets("Daily Trends").Range("K29")
Set aTrendRng(5) = Sheets("Daily Trends").Range("A56")
Set aTrendRng(6) = Sheets("Daily Trends").Range("K56")
Set aTrendRng(7) = Sheets("Daily Trends").Range("A83")
Set aTrendRng(8) = Sheets("Daily Trends").Range("K83")
Set aTrendRng(9) = Sheets("Daily Trends").Range("A110")
Set aTrendRng(10) = Sheets("Daily Trends").Range("K110")
Set aTrendRng(11) = Sheets("Daily Trends").Range("A137")
Set aTrendRng(12) = Sheets("Daily Trends").Range("K137")
Set aTrendRng(13) = Sheets("Daily Trends").Range("A164")
Set aTrendRng(14) = Sheets("Daily Trends").Range("K164")
Set aTrendRng(15) = Sheets("Daily Trends").Range("A191")
Set aTrendRng(16) = Sheets("Daily Trends").Range("K191")
'clear ranges on Daily Trends tab
Set rng = Sheets("Daily Trends").Range("A2:S24, A29:S51, A56:S78, A83:S105, A110:S132, A137:S159, A164:S186, A191:S213")
rng.ClearContents
'turn off any previous filters
If Sheets("daily dump").AutoFilterMode Then
Sheets("daily dump").AutoFilter.Range.AutoFilter
End If
With Sheets("daily dump")
lastrow = .Cells(Rows.Count, "A").End(xlUp).Row
End With
Set c = Sheets("mapping").Range("BG1:BG16")
For Each c In Sheets("mapping").Range("BG1:BG16")
Sheets("daily dump").Range("A4:P" & lastrow).AutoFilter Field:=4, Criteria1:="=" & c.Value
Sheets("daily dump").Range("A4:P" & lastrow).SpecialCells(xlCellTypeVisible).Copy
For dailyTrendrng = LBound(aTrendRng) To UBound(aTrendRng)
aTrendRng(dailyTrendrng).PasteSpecial xlValues
Next
''''''this is where i want to go back to my first "FOR LOOP"
Next
End Sub
【问题讨论】:
-
我是否正确理解您要将范围(至少一行高和 16 列 (A-P) 宽)复制到单个单元格?因为这就是它的样子。或者您想粘贴值根据顺序,例如从单元格 A 在过滤范围内的结果到
aTrendRng(1),从单元格 B 到aTrendRng(2)等等?您可以删除行Set c = Sheets("mapping").Range("BG1:BG16"),因为 c 用作 for 中的范围的实例每个循环。 -
希望根据 aTrendRng 数组定义的范围按顺序粘贴值。
-
我想根据 aTrendRng 数组定义的顺序粘贴值。又名循环过滤范围,复制过滤范围,运行内部循环以确定粘贴值的位置,重复外部迭代 1x,重复内部循环交互 1x,等等。
-
您的评论行 (
''''''this is where i want to go back to my first "FOR LOOP") 在您的第一个For循环中。 -
正如@Rufus 所说,您将至少一行复制 16 列到目标单元格。所以第二次通过你的循环(目的地的左上角是
K2),你将写下你在第一次迭代中写的信息的大约一半(当左上角是A2)。您真的要每次复制 16 列吗?您有 16 个目标单元格(尽管这只是一个“角落”)、16 个条件和 16 列,这似乎很可疑。因此,也许可以提供一个屏幕截图,说明您的数据是什么样的以及您想要实现的目标。
标签: excel nested-loops vba