【发布时间】:2018-11-02 01:50:39
【问题描述】:
我需要根据 id 将 masterfile(thisworkbook) 中的行传递到不同的工作簿。我目前在代码中遇到的问题是,一一复制和粘贴所有行太慢了,因为主文件非常大,之后我想在我的代码中添加更多条件(和工作簿)。
我当前的代码,只要满足条件,就逐行复制粘贴:
Private Sub CommandButton2_Click()
a = Worksheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Row
Dim newWorkbookOne As Workbook, newWorkbookTwo As Workbook
Set newWorkbookOne = Workbooks.Add
Set newWorkbookTwo = Workbooks.Add
Dim conditionOne As String, conditionTwo as String
Set conditionOne = "value1"
Set conditionTwo = "value2"
For i = 2 To a
If ThisWorkbook.Worksheets("Sheet1").Cells(i, 1).Value = conditionOne Then
ThisWorkbook.Worksheets("Sheet1").Rows(i).Copy
b = newWorkbookOne.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
newWorkbookOne.ActiveSheet.Cells(b + 1, 1).PasteSpecial xlPasteValuesAndNumberFormats
End If
If ThisWorkbook.Worksheets("Sheet1").Cells(i, 1).Value = nametwo Then
ThisWorkbook.Worksheets("Sheet1").Rows(i).Copy
h = newWorkbook.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
newWorkbookTwo.ActiveSheet.Cells(h + 1, 1).PasteSpecial xlPasteValuesAndNumberFormats
End If
Next 'something
此代码非常耗时,并且绝对不适合较大的文件。出于这个原因,我想一次将所有行粘贴到这些新工作簿中。有人对此问题有解决方案吗?
【问题讨论】:
-
首先你可以将你的 if 语句与 or 结合起来,这将减少一半的迭代。二、为什么不用PowerQuery?
-
@ygaft OP 不能将
If语句与Or结合起来,因为代码需要根据满足的条件执行两种不同的操作。 -
@DirtyDeffy 是的,你是对的,那么 PowerQuery 应该是最简单的解决方案......
标签: vba excel loops conditional-statements