【问题标题】:How can I pull rows from multiple other worksheets into a master sheet?如何将多个其他工作表中的行拉到主表中?
【发布时间】:2020-11-23 01:21:00
【问题描述】:

我希望主工作表根据其他工作表的 U 列中的值从其他工作表中提取所有行。

我有一个工作簿供多个用户将数据输入到多个工作表的行中。
并非每一行都有值。如果行中有数据,我创建了 U 列以将值设置为“1”,如果没有数据,则将值设置为“0”。 但是,有些行自始至终都是空白的,并且这些行没有任何信息。

Sub Button2_Click()

Dim a As Long
Dim b As Long
Dim i As Long
Dim c As Long
Dim d As Long

b = Worksheets.Count
a = Worksheets(i).Cells(Rows.Count, 21).Endt(xlUp).Row

For i = 1 To b
    If Worksheets(i).Name = "MasterSheet" Then
        'do nothing
    Else
        For c = 1 To a
            If Worksheets(i).Cells(c, 15).Value = "1" Then

                Worksheets(i).Rows(c).Copy

                Worksheets("MasterSheet").Activate

                d = Worksheets("MasterSheet").Cells(Rows.Count, 1).End(xlUp).Row

                Worksheets("MasterSheet").Cells(d + 1, 1).Select

                ActiveSheet.Paste
            End If

        Next

        Application.CutCopyMode = False

        ThisWorkbook.Worksheets("MasterSheet").Cells(1, 1).Select

End Sub

此代码不起作用。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    试试这个代码。我使用了您发送的内容的基本大纲并更正了一些内容。我还更改了变量名称,以便更清楚每个变量的用途。

    在您的解释中,您提到您将检查 U (21) 列,但在代码中,您检查第 21 列以找到最后一行,但 O (15) 列是第一行。我正在检查第 21 列中的所有代码

    我还在开头添加了 Application.ScreenUpdating=False,如果您要复制很多行,这将使代码运行得更快。 最后,复制功能允许粘贴参数,这允许您直接将复制的内容粘贴到您想要的目的地,而无需激活并选择目的地的工作表和范围。如果您对许多行和工作表执行此操作,这将使您的代码运行得更快

    Sub CopyRowsToMater()
    Dim LastRow As Long
    Dim TotalSheets As Long
    Dim curSheet As Long
    Dim curRow As Long
    Dim LastRowMaster As Long
        
        Application.ScreenUpdating = False
        LastRowMaster = Worksheets("MasterSheet").Cells(Rows.Count, 1).End(xlUp).Row
        TotalSheets = Worksheets.Count
        For curSheet = 1 To TotalSheets
            LastRow = Worksheets(curSheet).Cells(Rows.Count, 21).End(xlUp).Row
            
            If Worksheets(curSheet).Name = "MasterSheet" Then
            'do nothing
            Else
                For curRow = 2 To LastRow
                                
                    If Worksheets(curSheet).Cells(curRow, 21).Value = "1" Then
                        Worksheets(curSheet).Rows(curRow).Copy Worksheets("MasterSheet").Cells(LastRowMaster + 1, 1)
                        LastRowMaster = LastRowMaster + 1
                    End If
                Next
                
            End If
        Next
        Application.CutCopyMode = False
        Application.ScreenUpdating = True
        ActiveWorkbook.Worksheets("MasterSheet").Cells(1, 1).Select
    End Sub
    

    【讨论】:

      【解决方案2】:

      好的,首先记住,当你做一个程序时,它总是有顺序的,它是按行的,所以如果放这个你会出错

      b = Worksheets.Count
      a = Worksheets(i).Cells(Rows.Count, 21).Endt(xlUp).Row
      For i = 1 To b
      

      因为您希望“a”从工作表编号“i”中获取值,但在那一刻“i”没有任何值

      第二个你写的wearg Endt(xlUp).RowEnd(xlUp).Row你多加了一个“t”

      第三个如果你打开两个“For”你需要关闭两个“next”同样的问题与“if”

      【讨论】:

        猜你喜欢
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 2023-01-31
        • 1970-01-01
        • 2021-06-16
        • 1970-01-01
        • 2022-11-22
        • 1970-01-01
        相关资源
        最近更新 更多