【问题标题】:VBA to create several lists based on multiple columns and criteriaVBA 根据多个列和条件创建多个列表
【发布时间】:2018-10-31 16:18:00
【问题描述】:

我有两张工作表,一张包含大型数据集(输入 SAP)的输入工作表和一张我想根据不同标准列出实例但也属于不同类别(输出)的工作表。我想在“输出”中按下一个按钮并获取不同的列表。在下面的代码中,有两个列表,但还会有更多。

输出表将如下所示:E 列将列出所有 SAP 编号,其中输入表中的 H 列为空白。 G 列将列出 O 列等于 0 的所有 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

【问题讨论】:

  • 您不会在 do 循环之间重置您的 RowNo,因此它会从您停止的地方开始选择,当它为空时,并且由于您检查顶部的条件,因此循环不会执行。在那张纸条上,您也应该重置irow。而不是调用工作表来查找您指定的范围的行,您可以将它们设置为等于行号。即irow = 7RowNo = 2
  • 谢谢,它现在可以完美运行了!

标签: excel vba copy criteria


【解决方案1】:

更有效的循环方式是:

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 个不同的变量可能看起来很痛苦,但它会大大加快速度,因为您只会循环遍历输入表一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 2020-07-11
    • 2021-03-18
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多