基于2个标准输入将行从一个excel工作表复制到另一个excel工作表
我有一张excel表格,其中第一张表格包含了所有的主数据,大约500行,一直到R列,这张表格被称为总体表格。O列包括一个月,P列包括一年 我有另一张表,我想复制数据,这被称为“预测月”。在B1的顶部,选择我希望复制的月份,在D1中选择年份。我希望按钮读取这两个单元格,并在此基础上复制“总体工作表”中的数据 我编写了如下所示的代码,但由于某些原因,在添加下一个(也是10次)之前,数据被输入到“forecast month”中10次。我应该在这张表中只有3条数据,但是每个数据都有30条,10条 此外,每张工作表上的前3行都有标题,因此数据应该开始写入第4行(确实如此) 请问有人能帮忙吗基于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条 此外
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
请提供一些评论和解释,说明为什么你所发布的是一个答案。我很高兴它起了作用:)你多次循环行,这导致了错误。使用嵌套循环代替单个循环,这就是为什么要打印多行。