Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA基于多个列和条件创建多个列表_Excel_Vba_Copy_Criteria - Fatal编程技术网

Excel VBA基于多个列和条件创建多个列表

Excel VBA基于多个列和条件创建多个列表,excel,vba,copy,criteria,Excel,Vba,Copy,Criteria,我有两个工作表,一个是带有大数据集的输入工作表(输入SAP),另一个是基于不同标准列出实例的工作表,但也有不同类别的工作表(输出)。我想按下“输出”中的一个按钮,得到不同的列表。在下面的代码中,有两个列表,但还有更多 输出表是这样的:E列将列出输入表中H列为空的所有SAP编号。G列将列出O列等于零的所有SAP编号 列E用下面的代码正确填充,但列G没有任何变化。我不知道如何在同一个子列中填充多个列。。我也不想单独定义行,因为最后会有大约10个不同的列表 非常感谢您的帮助 Private Su

我有两个工作表,一个是带有大数据集的输入工作表(输入SAP),另一个是基于不同标准列出实例的工作表,但也有不同类别的工作表(输出)。我想按下“输出”中的一个按钮,得到不同的列表。在下面的代码中,有两个列表,但还有更多

输出表是这样的:E列将列出输入表中H列为空的所有SAP编号。G列将列出O列等于零的所有SAP编号

列E用下面的代码正确填充,但列G没有任何变化。我不知道如何在同一个子列中填充多个列。。我也不想单独定义行,因为最后会有大约10个不同的列表

非常感谢您的帮助

   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、 e
irow=7
RowNo=2
谢谢,它现在工作得很好!