Excel、VBA:当1条件应用于多个范围时,如何将粘贴数据复制到新工作簿?

Excel、VBA:当1条件应用于多个范围时,如何将粘贴数据复制到新工作簿?,vba,excel,dynamic,copy-paste,Vba,Excel,Dynamic,Copy Paste,说到excel和vba,我是一个十足的n00b。 任何帮助都将不胜感激 excel中有从a到k的数据。 我正在努力: 检查E是否大于2,以导出所有行列的Gx、Ex和Jx,在这种情况下 我无法正确选择,已成功将此与条件连接。 此外,我的粘贴是超级随机的。 我正试图将其导出到给定的文件名@place,但还没有做到这一点,因为无法将事件正确导出到同一工作簿中的不同工作表 Private Sub CommandButton1_Click() Application.ScreenUpdating = Fa

说到excel和vba,我是一个十足的n00b。 任何帮助都将不胜感激

excel中有从a到k的数据。 我正在努力: 检查E是否大于2,以导出所有行列的Gx、Ex和Jx,在这种情况下

我无法正确选择,已成功将此与条件连接。 此外,我的粘贴是超级随机的。 我正试图将其导出到给定的文件名@place,但还没有做到这一点,因为无法将事件正确导出到同一工作簿中的不同工作表

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False

Dim Value As Range
Dim Copyarea1 As Range
Dim Copyarea2 As Range
Dim Copyarea3 As Range
Dim Copymaster As Range
Dim Pastesheet As Range

Sheet4.Activate
sheet1.Activate

Set Copyarea1 = sheet1.Range("F2")
Set Copyarea2 = sheet1.Range("H2")
Set Copyarea3 = sheet1.Range("I2")
Set Copymaster = Union(Copyarea1, Copyarea2, Copyarea3)


sheet1.Select
For Each Value In Range(["H2:H2539"])
If Value > 2 Then
Value.Select
Selection.Copy

Else: ActiveCell.Offset(1, 0).Activate
End If
If Value = "" Then Exit Sub

Sheet4.Select
  Selection.PasteSpecial paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveCell.Offset(1, 0).Activate
sheet1.Activate

Next
Application.ScreenUpdating = True

End Sub
当我用复制母版替换值时,我得到了正确的初始选择,但偏移失败。出口部分也不好。
只有要复制的值,单元格才有公式。

此代码首先计算工作簿Book2.xlsm sheet1中的行数,然后遍历原始工作簿范围H2:H2539中的所有单元格。如果值大于2,则F、H和I列中此行的值将粘贴到工作簿Book2.xlsm sheet1中第一个空行的A、B、C行中

Private Sub CommandButton1_Click()

Workbooks.Open Filename:="C:\Users\User\Desktop\Book2.xlsm" 'change path to your workbook

Dim sh1 As Worksheet, sh2 As Worksheet

Set sh1 = ThisWorkbook.Sheets("sheet1")
Set sh2 = Workbooks("Book2.xlsm").Sheets("sheet1")

Application.ScreenUpdating = False

'counts rows in sheet2 column A (this is where values are going to be copied)
If IsEmpty(sh2.Range("A1").End(xlDown)) = True Then
    y = 1

Else
    y = sh2.Range("A1", sh2.Range("A1").End(xlDown)).Rows.Count + 1

End If


For i = 2 To 2539 'number of rows in your range (sheet1)

    If sh1.Cells(i, 8) > 2 Then

        sh2.Cells(y, 1) = sh1.Cells(i, 8).Offset(0, -2)
        sh2.Cells(y, 1).Offset(0, 1) = sh1.Cells(i, 8)
        sh2.Cells(y, 1).Offset(0, 2) = sh1.Cells(i, 8).Offset(0, 1)

        y = y + 1

    ElseIf sh1.Cells(i, 8) = "" Then: Exit Sub

    End If

Next i

Application.ScreenUpdating = True

Workbooks("2.xlsm").Close savechanges:=True 'closes your second workbook and save changes

End Sub

好的起点;我也会停止使用对象属性作为变量,即一个变量的值。那只会引起悲伤。正如克里斯所指出的。在代码中,您不需要选择一个范围或单元格来对其进行操作。Ie值。选择:Selection.Copy。您可以简单地写入值。复制以获得更有效的等效结果。感谢您的输入。这使我的代码更流畅。我仍然在努力设置正确的条件。在我想要它的地方,检查每个单元格I H2:H2539,对于H>2的每个实例,在该行上复制H、F和I;其中H=可以解释文案官的目的是什么?下一个问题:当你复制F,H和I时,你把这些值粘贴到哪里?是要将它们串联粘贴到一个单元格中,还是每个值都应粘贴到相邻的单元格中?像A2,B2,C2?当然。copymaster的目的是尝试将条件链接到所需的选择。如果H2>2,那么复制H2,F2,I2。如果H2不大于2,则移动到H3。我想把它们贴在彼此相邻的单元格中,贴在不同的工作簿中,尽管到目前为止我只对不同的工作表感到厌倦。真是太棒了。非常感谢,唯一的事情是它没有按预期关闭和保存。当我尝试重复该命令时,它只想重新打开工作簿并重复该过程。。我修改了代码,以便在ElseIf sh1.Cellsi之后,8=Then:Workbooks2.xlsm.Close savechanges:=True Exit Sub然后Workbook2按预期保存并关闭。再次感谢。2更复杂的问题,除了xlsx之外,还有关于如何将sh2保存为.csv的想法吗。?这样它就可以打开xlsx文件,甚至可以将其更改为CSV,但我怀疑这会使公式更加复杂?你应该问另一个问题-这超出了这个问题的范围。