Excel 列为空时自动将行复制到单独的工作表中(以跟踪应收账款)
我们有一个名为Shipsheet的工作簿,在该工作簿中,我们有一个名为“Shipsheet 2015”的工作表,其中我们跟踪所有发票。对于尚未付款的发票(已付款列(H列)中没有“X”的发票),我们手动将发票添加到同一工作簿中名为“现金流”的单独工作表中,该工作表按时间顺序排列。换句话说,逾期时间最长的发票显示在现金流工作表的顶部。我还注意到,我们对不同的客户有不同的条款,我们在2015年船单G栏中记录了这些条款:“净10”、“净30”或“收到时到期” 我想从2015年船单中自动填充现金流。我希望现金流自动排序,最长过期发票在顶部 我在这里搜索了许多线程,这些线程显示了创建代码的各种方法,如果满足某些条件,这些代码会将行复制到另一个工作表中,但我还没有找到让它们正常工作的方法 我的参数是:Excel 列为空时自动将行复制到单独的工作表中(以跟踪应收账款),excel,vba,Excel,Vba,我们有一个名为Shipsheet的工作簿,在该工作簿中,我们有一个名为“Shipsheet 2015”的工作表,其中我们跟踪所有发票。对于尚未付款的发票(已付款列(H列)中没有“X”的发票),我们手动将发票添加到同一工作簿中名为“现金流”的单独工作表中,该工作表按时间顺序排列。换句话说,逾期时间最长的发票显示在现金流工作表的顶部。我还注意到,我们对不同的客户有不同的条款,我们在2015年船单G栏中记录了这些条款:“净10”、“净30”或“收到时到期” 我想从2015年船单中自动填充现金流。我希望
- 如果2015年发货单中的H列为空,则将该行复制到现金流工作表中。理想情况下,我只想将A、C、G、M和N列复制到现金流工作表中,因为不需要其他列
- 发票的到期日期取决于发票日期(2015年船单B栏)和G栏的条款。因此,2015年11月15日的发票(净10个条款)应于2015年11月25日到期。如上所述,我希望现金流自动排序,最长过期发票在顶部
结尾子
您似乎正在逐个检查每个行(并且可选地复制它)的循环,但是我希望看到您考虑。这是一个批量操作,通常比每行循环更快Sub Ship_to_CashFlow()
Dim wsCF As Worksheet
'set the receiving worksheet
Set wsCF = Worksheets("Cash Flow")
With Worksheets("SHIPSHEET 2015")
'if the worksheet has a filter active, turn it off
If .AutoFilterMode Then .AutoFilterMode = False
'use the region specified by selecting A1 and tapping Ctrl+A once
With .Cells(1, 1).CurrentRegion
'filter for blanks in the 8th column (H)
.AutoFilter field:=8, Criteria1:="="
'move down one row to discard the header row
With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0)
'Are there any visible cells?
If CBool(Application.Subtotal(103, .Cells)) Then
'copy them to to the next blank row in the CF worksheet
.Copy Destination:=wsCF.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End If
End With
'turn off the filter
.AutoFilter field:=8
End With
End With
End Sub
它对由定义的数据区域起作用。一系列隔离正在检查和处理的工作表区域的操作
排序可能需要某种类型的“帮助器”列,该列将提供一个包含发票日期列B和列G中的条款的公式的数字。谢谢……我在您的筛选建议中有点迷失了方向,取而代之的是:
Sub cond_copy()
Sheets("2015 SHIPSHEET").Select
RowCount = Cells(Cells.Rows.Count, "a").End(xlUp).Row
Set Rng = Selection
For i = 1 To RowCount
Range("h" & i).Select
check_value = ActiveCell
If check_value = "" Or check_value = "" Then
ActiveCell.EntireRow.Copy
Sheets("Sheet1").Select
RowCount = Cells(Cells.Rows.Count, "a").End(xlUp).Row
Range("a" & RowCount + 1).Select
ActiveSheet.Paste
Sheets("2015 SHIPSHEET").Select
End If
Next
End Sub
但是现在,我宁愿只在选定的行上运行它,而不是在整个2015年发货单上运行它。我试着加上
Set Rng = Selection
但这不起作用,它仍然在整张纸上运行。关于如何在选定行上运行此操作,您有什么建议吗?请显示您已尝试过的内容。所以这不是一个为我编写代码的网站,而是一个发现和克服错误的非常有用的工具。
Set Rng = Selection