仅尝试从过滤的行中复制特定的单元格,但是这部分代码将保留所有数据的复制,甚至是从隐藏的单元格中复制。
Sheets(Wss).Range("A1").AutoFilter _
Field:=8, _
Criteria1:="Vesztesg", _
VisibleDropDown:=False
For j = 2 To Sheets(Wss).Range("A2").End(xlDown).End(xlDown).End(xlUp).Row - 1
Sheets("EBS Posting template").Range("C" & i) = Sheets(Wss).Range("E" & j)
Sheets("EBS Posting template").Range("O" & i + 1) = Sheets(Wss).Range("F" & j)
Sheets("EBS Posting template").Range("G" & i + 2) = Sheets(Wss).Range("J" & j)
i = i + 3
Next j
答案 0 :(得分:1)
如果您要使用行计数器,即使该行是隐藏的,它仍将为您提供该行的值。 您将需要其他行以确保该行未被隐藏。
可能只是循环遍历可见的单元格即可。
顺便说一句:我不确定您的值在哪里结束,您将不得不在代码中对其进行编辑。
该代码将循环遍历E列中的可见单元格,同时还要检查代码中的工作表名称,我也不确定。
Sub Button2_Click()
Dim wss As Worksheet, sh As Worksheet, LstRw As Long, rng As Range, c As Range, Lr As Long
Set wss = Sheets("Sheets(Wss)")
Set sh = Sheets("EBS Posting template")
With wss
LstRw = .Cells(.Rows.Count, 8).End(xlUp).Row
.Range("A1").AutoFilter Field:=8, Criteria1:="Vesztesg"
Set rng = .Range("E2:E" & LstRw).SpecialCells(xlCellTypeVisible)
For Each c In rng.Cells
With sh
Lr = .Cells(.Rows.Count, "C").End(xlUp).Row + 1
.Cells(Lr, "C").Value = c
.Cells(Lr, "O").Value = c.Offset(, 1)
.Cells(Lr, "G").Value = c.Offset(, 5)
End With
Next c
.AutoFilterMode = False
End With
End Sub
答案 1 :(得分:1)
要仅遍历可见单元格,您需要遍历一个范围。
因此,我们使用For i
代替For Each
循环,让您做到这一点。我们将.SpecialCells(xlCellTypeVisible)
添加到该范围。
对于范围内的每个元素,我们声明一个变量cl
。我们可以用来从中提取数据。
Sheets(Wss).Range("A1").AutoFilter _
Field:=8, _
Criteria1:="Vesztesg", _
VisibleDropDown:=False
Dim cl As Range
For Each cl In Range(Cells(2, 1), Cells(Sheets(Wss).Range("A2").End(xlDown).End(xlDown).End(xlUp).Row - 1, 1)).SpecialCells(xlCellTypeVisible) 'Apply visible cells only
j = cl.Row 'row number of current cl value.
Sheets("EBS Posting template").Range("C" & i) = Sheets(Wss).Range("E" & j)
Sheets("EBS Posting template").Range("O" & i + 1) = Sheets(Wss).Range("F" & j)
Sheets("EBS Posting template").Range("G" & i + 2) = Sheets(Wss).Range("J" & j)
i = i + 3
Next cl 'loop to next cl