Excel 在筛选表中循环行
是否有人有一个很好的方法来循环过滤表中的行 我倾向于需要使用筛选表中的一些数据来填充另一个文档,在本例中是一个会计报表工作表。由于行是非连续的,我以前使用行号填充数据的方法似乎失败了 SOAwb是一个单独的工作簿,将使用TSOA表中的数据填充,其中大部分代码实际上可以工作,但仍然包括来自筛选/隐藏范围的数据 j是SOAwb上的第一个空行,因此在for循环结束时,当j=j+1时,下一个空行重复填充过程Excel 在筛选表中循环行,excel,autofilter,vba,Excel,Autofilter,Vba,是否有人有一个很好的方法来循环过滤表中的行 我倾向于需要使用筛选表中的一些数据来填充另一个文档,在本例中是一个会计报表工作表。由于行是非连续的,我以前使用行号填充数据的方法似乎失败了 SOAwb是一个单独的工作簿,将使用TSOA表中的数据填充,其中大部分代码实际上可以工作,但仍然包括来自筛选/隐藏范围的数据 j是SOAwb上的第一个空行,因此在for循环结束时,当j=j+1时,下一个空行重复填充过程 For k = 1 To TSOA.DataBodyRange.Columns(1).Speci
For k = 1 To TSOA.DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible).Count
SOAwb.Worksheets(1).Cells(j, 4) = TSOA.DataBodyRange(k, 6) 'debit amount
SOAwb.Worksheets(1).Cells(j, 5) = TSOA.DataBodyRange(k, 7) 'credit amt
SOAwb.Worksheets(1).Cells(j, 1) = TSOA.DataBodyRange(k, 3) 'Date
SOAwb.Worksheets(1).Cells(j, 2) = Right(TSOA.DataBodyRange(k, 3), 2) & "-" & TSOA.DataBodyRange(k, 2) 'Reference Number
Select Case TSOA.DataBodyRange(k, 1)
Case "INV"
SOAwb.Worksheets(1).Cells(j, 3) = "Invoice"
Case "CR"
SOAwb.Worksheets(1).Cells(j, 3) = "Credit"
Case Else
MsgBox "Invalid Type"
End Select
j = j + 1
Next
如果k仍然是表中的相对行位置,那就太完美了。是否有人对如何执行此操作或使用筛选范围将数据(逐行)填充到另一工作簿的替代方法有任何建议?隐藏行的高度为0 您必须循环所有使用的行,并且只处理可见的行
For k = 1 To TSOA.DataBodyRange.Rows.Count
及
与此类似:
For k = 1 To TSOA.DataBodyRange.Rows.Count
With SOAwb.Worksheets(1)
If TSOA.DataBodyRange(k, 6).Height > 0 Then
.Cells(j, 4) = TSOA.DataBodyRange(k, 6) 'debit amount
.Cells(j, 5) = TSOA.DataBodyRange(k, 7) 'credit amt
.Cells(j, 1) = TSOA.DataBodyRange(k, 3) 'Date
.Cells(j, 2) = Right(TSOA.DataBodyRange(k, 3), 2) & "-" & _
TSOA.DataBodyRange(k, 2) 'Reference Number
Select Case TSOA.DataBodyRange(k, 1)
Case "INV": .Cells(j, 3) = "Invoice"
Case "CR": .Cells(j, 3) = "Credit"
Case Else: MsgBox "Invalid Type"
End Select
End If
End With
j = j + 1
Next
使用已直接指定的范围集合,而不是其计数
Dim rCell as Range
For each rCell in TSOA.DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible)
' Access the cells as
t.DataBodyRange.Cells(c.Row - t.HeaderRowRange.Row, ColumnNum)
Next
使用
for
循环和.specialcells(xlcelltypevisible)
循环表格,仅使用过滤结果。相应地修改您的代码。这就是我的代码所做的,我一直在努力解决“相应地修改您的代码”这一点。多亏了两种剥龙虾皮的方法,我下次遇到For循环时会注意到这一点。这就是为什么这么多人都赢了的原因
Dim rCell as Range
For each rCell in TSOA.DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible)
' Access the cells as
t.DataBodyRange.Cells(c.Row - t.HeaderRowRange.Row, ColumnNum)
Next