Excel VBA基于多个列和条件创建多个列表
我有两个工作表,一个是带有大数据集的输入工作表(输入SAP),另一个是基于不同标准列出实例的工作表,但也有不同类别的工作表(输出)。我想按下“输出”中的一个按钮,得到不同的列表。在下面的代码中,有两个列表,但还有更多 输出表是这样的:E列将列出输入表中H列为空的所有SAP编号。G列将列出O列等于零的所有SAP编号 列E用下面的代码正确填充,但列G没有任何变化。我不知道如何在同一个子列中填充多个列。。我也不想单独定义行,因为最后会有大约10个不同的列表 非常感谢您的帮助Excel VBA基于多个列和条件创建多个列表,excel,vba,copy,criteria,Excel,Vba,Copy,Criteria,我有两个工作表,一个是带有大数据集的输入工作表(输入SAP),另一个是基于不同标准列出实例的工作表,但也有不同类别的工作表(输出)。我想按下“输出”中的一个按钮,得到不同的列表。在下面的代码中,有两个列表,但还有更多 输出表是这样的:E列将列出输入表中H列为空的所有SAP编号。G列将列出O列等于零的所有SAP编号 列E用下面的代码正确填充,但列G没有任何变化。我不知道如何在同一个子列中填充多个列。。我也不想单独定义行,因为最后会有大约10个不同的列表 非常感谢您的帮助 Private Su
Private Sub CommandButton1_Click()
ReadIncomplete
End Sub
Private Sub ReadIncomplete()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = wb.Worksheets("Output")
Dim iws As Worksheet: Set iws = wb.Worksheets("Input SAP")
irow = ws.Range("E7").Row
RowNo = iws.Range("A2").Row
Do Until iws.Cells(RowNo, 2) = ""
If iws.Cells(RowNo, "H") = "" Then
ws.Cells(irow, "E") = iws.Cells(RowNo, 2)
irow = irow + 1
End If
RowNo = RowNo + 1
Loop
Do Until iws.Cells(RowNo, 2) = ""
If iws.Cells(RowNo, "O") = 0 Then
ws.Cells(irow, "G") = iws.Cells(RowNo, 2)
irow = irow + 1
End If
RowNo = RowNo + 1
Loop
End Sub
一种更有效的循环方式是:
irowE = 7
irowG = 7
RowNo = 2
Do Until iws.Cells(RowNo, 2) = ""
If iws.Cells(RowNo, "H") = "" Then
ws.Cells(irowE, "E") = iws.Cells(RowNo, 2)
irowE = irowE + 1
End if
If iws.Cells(RowNo, "O") = 0 Then
ws.Cells(irowG, "G") = iws.Cells(RowNo, 2)
irowG = irowG + 1
End If
RowNo = RowNo + 1
Loop
为10个列表设置10个不同的变量似乎很痛苦,但这会大大加快速度,因为您只会在输入表中循环一次。您没有在do循环之间重置RowNo,因此它会从您停止的位置进行选择,当它为空时,因为您在顶部检查了条件,所以循环不会执行。在这一点上,您还应该重置
irow
。您可以将它们设置为行号,而不是调用工作表来查找指定范围内的行。i、 eirow=7
和RowNo=2
谢谢,它现在工作得很好!