Excel 根据条件将数据从一张图纸复制到另一张图纸

Excel 根据条件将数据从一张图纸复制到另一张图纸,excel,vba,Excel,Vba,我有两张数据表,我想根据特定标准将数据从表2复制到表1。我有几个地区,我只想把“非洲”地区的数据复制到第一页。我使用的代码如下: Sub CopyPaste() Dim wb As Workbook Dim workbookname As String Dim wsDest As Worksheet Dim wsSrc As Worksheet Dim rng1, rng2 As Range workbookname = Acti

我有两张数据表,我想根据特定标准将数据从表2复制到表1。我有几个地区,我只想把“非洲”地区的数据复制到第一页。我使用的代码如下:

Sub CopyPaste()

    Dim wb As Workbook
    Dim workbookname As String
    Dim wsDest As Worksheet
    Dim wsSrc As Worksheet

    Dim rng1, rng2 As Range
      
    workbookname = ActiveWorkbook.Name
    
    Workbooks(workbookname).Sheets("Sheet2").Activate
    Set wsSrc = Workbooks(workbookname).Sheets("Sheet2")
    
    Workbooks(workbookname).Sheets("Sheet1").Activate
    ' Destination worksheet: Master Sheet
    Set wsDest = Workbooks(workbookname).Sheets("Sheet1")

    ar = Array("Region", "Project Number", "Project Long Name", "PM", "KOB")
    arr = Array("Region", "Project No.", "Project Long Name", "Project Manager", "KOB")
 
    For i = 3 To wsSrc.Range("A" & Rows.count).End(xlUp).Row
        If wsSrc.Range("O" & i) = "Africa" Then
            For j = 5 To 5000
                wsSrc.Range(ar(j) & i).Copy wsDest.Range(arr(j) & Rows.count).End(xlUp)(3)
            Next j
        End If
    Next i
 
End Sub
这段代码运行,但它没有给我任何输出。我不确定要做什么修正才能得到正确的输出。我们将非常感谢您的帮助。

请尝试一下:

Sub CopyPaste()

Dim WsSrc As Worksheet, WsDest As Worksheet, i As Long, CopyRow As Long

Set WsSrc = Sheets("Sheet2") 'Source sheet to search and copy from
Set WsDest = Sheets("Sheet1") 'Destination/Copy sheet
CopyRow = 5 'Starting row to put data on copy sheet

For i = 3 To WsSrc.Range("O" & Rows.Count).End(xlUp).Row 'from row 3 to the last row in source sheet
    If WsSrc.Range("O" & i) = "Africa" Then
        WsDest.Range("B" & CopyRow) = WsSrc.Range("O" & i)
        WsDest.Range("E" & CopyRow) = WsSrc.Range("E" & i)
        WsDest.Range("I" & CopyRow) = WsSrc.Range("G" & i)
        WsDest.Range("J" & CopyRow) = WsSrc.Range("H" & i)
        WsDest.Range("K" & CopyRow) = WsSrc.Range("L" & i)
        CopyRow = CopyRow + 1
    End If
Next i

End Sub

所以这里有一个想法给你。如果说
j=10
,那么由于数组中只有5个值,您希望
ar(j)
arr(j)
返回什么?我希望输出是列标题下的数据,从第2页复制到第1页。数组中的值是我的列标题这是我从堆栈中得到的代码,我试图根据需要修改它,但我认为我有一些错误。你在这段代码中有很多问题,这就是它无法工作的原因,最大的问题是数组。数组中有5个项,但是j循环从5开始,因此它找不到要获取的值。但即使修正了还有其他需要修改的地方。你的标题在两张纸上的方式完全一样吗?如果是的话,请告诉我这两张纸的每一列内容。是A到E还是A、B、C、G、H等?它们是什么?这很好用!应该坚持使用上面提到的简单编码。谢谢你的帮助很高兴我能帮忙。