基于2个标准输入将行从一个excel工作表复制到另一个excel工作表

基于2个标准输入将行从一个excel工作表复制到另一个excel工作表,excel,vba,performance,optimization,copy-paste,Excel,Vba,Performance,Optimization,Copy Paste,我有一张excel表格,其中第一张表格包含了所有的主数据,大约500行,一直到R列,这张表格被称为总体表格。O列包括一个月,P列包括一年 我有另一张表,我想复制数据,这被称为“预测月”。在B1的顶部,选择我希望复制的月份,在D1中选择年份。我希望按钮读取这两个单元格,并在此基础上复制“总体工作表”中的数据 我编写了如下所示的代码,但由于某些原因,在添加下一个(也是10次)之前,数据被输入到“forecast month”中10次。我应该在这张表中只有3条数据,但是每个数据都有30条,10条 此外

我有一张excel表格,其中第一张表格包含了所有的主数据,大约500行,一直到R列,这张表格被称为总体表格。O列包括一个月,P列包括一年

我有另一张表,我想复制数据,这被称为“预测月”。在B1的顶部,选择我希望复制的月份,在D1中选择年份。我希望按钮读取这两个单元格,并在此基础上复制“总体工作表”中的数据

我编写了如下所示的代码,但由于某些原因,在添加下一个(也是10次)之前,数据被输入到“forecast month”中10次。我应该在这张表中只有3条数据,但是每个数据都有30条,10条

此外,每张工作表上的前3行都有标题,因此数据应该开始写入第4行(确实如此)

请问有人能帮忙吗

Private Sub CommandButton1_Click()
    Dim month As String
    Dim year As String

    Dim c As Range
    Dim d As Range

    Dim k As Integer
    Dim source As Worksheet
    Dim targetforecastmonth As Worksheet

    'change worksheet designations as needed
    Set source = ActiveWorkbook.Worksheets("Overall Sheet")
    Set targetforecastmonth = ActiveWorkbook.Worksheets("Forecast Month")

    targetforecastmonth.Range("A4:Z1000").Clear

    month = ActiveWorkbook.Worksheets("Forecast Month").Range("B1")
    year = ActiveWorkbook.Worksheets("Forecast Month").Range("D1")

    k = 4

    For Each c In source.Range("O4:O1000")
        For Each d In source.Range("P4:P1000")
            If c = month And d = year Then
                source.Rows(c.Row).Copy targetforecastmonth.Rows(k)
                k = k + 1
            End If
        Next d
    Next c
End Sub

试试这个,我希望这会有帮助

Private Sub CommandButton1_Click()
Dim month As String
Dim year As String

Dim c As Range

Dim k As Integer
Dim source As Worksheet
Dim targetforecastmonth As Worksheet

'change worksheet designations as needed
Set source = ActiveWorkbook.Worksheets("Overall Sheet")
Set targetforecastmonth = ActiveWorkbook.Worksheets("Forecast Month")

targetforecastmonth.Range("A4:Z1000").Clear

month = ActiveWorkbook.Worksheets("Forecast Month").Range("B1")
year = ActiveWorkbook.Worksheets("Forecast Month").Range("D1")

k = 4

For Each c In source.Range("O4:O1000")
If c = month And source.Cells(c.Row, 16).Value = year Then
source.Rows(c.Row).Copy targetforecastmonth.Rows(k)
k = k + 1
End If
Next c

End Sub

每个循环都有一个嵌套的
,这意味着在移动到单元
“O5”和循环单元“P4:P1000”之前,先取单元“O4”,然后循环单元。。。例如,如果
“O4”
的单元格值满足
标准,则每次通过列P的循环找到满足
标准的单元格时,将复制并粘贴行号
4
。 请尝试以下方法:

Private Sub CommandButton1_Click()
    Dim month As String
    Dim year As String

    Dim c As Range
    Dim d As Range
    Dim x As Long

    Dim k As Integer
    Dim source As Worksheet
    Dim targetforecastmonth As Worksheet

    'change worksheet designations as needed
    Set source = ActiveWorkbook.Worksheets("Overall Sheet")
    Set targetforecastmonth = ActiveWorkbook.Worksheets("Forecast Month")

    targetforecastmonth.Range("A4:Z1000").Clear

    month = ActiveWorkbook.Worksheets("Forecast Month").Range("B1")
    year = ActiveWorkbook.Worksheets("Forecast Month").Range("D1")

    k = 4
    x = 4

    For Each c In source.Range("O4:O1000")
        Set d = source.Range("P" & x)
        If c.Value = month And d.Value = year Then
            source.Rows(c.Row).Copy targetforecastmonth.Rows(k)
            k = k + 1
        End If
    x = x + 1
    Next c
End Sub

这似乎是错误的逻辑。 我想你需要解释:O8,P8匹配B1,D1 因此,您只需要一个周期:

For Each c In source.Range("O4:O1000")
d = source.Range("P" & k)
If c = month And d = year Then
    source.Rows(c.Row).Copy targetforecastmonth.Rows(k)
End If
k = k + 1
Next c

请提供一些评论和解释,说明为什么你所发布的是一个答案。我很高兴它起了作用:)你多次循环行,这导致了错误。使用嵌套循环代替单个循环,这就是为什么要打印多行。