【问题标题】:Copy data from one sheet to another based on criteria根据条件将数据从一张表复制到另一张表
【发布时间】:2020-11-19 17:27:17
【问题描述】:

我有两张数据表,我想根据特定标准将数据从表 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

此代码运行,但没有给我任何输出。我不确定要进行哪些更正才能获得正确的输出。对此的任何帮助将不胜感激。

【问题讨论】:

  • 所以这里有一个想法给你。如果说j = 10,那么您期望ar(j)arr(j) 返回什么,因为您的数组中只有5 个值?
  • 我希望输出是要从工作表 2 复制到工作表 1 的列标题下的数据。数组中的值是我的列标题
  • 这是我从堆栈中获得的代码,我尝试根据需要进行修改,但我认为我有一些错误
  • 这段代码有很多问题,这就是它不起作用的原因,最大的是数组。您在数组中有 5 个项目,但您的 j 循环从 5 开始,因此它找不到要抓取的值。但即使解决了还有其他需要更改的问题。
  • 两张表中的标题是否完全相同?如果是这样,请告诉我两张纸各自在哪一列。 EG是A到E还是A、B、C、G、H等?它们是什么?

标签: excel vba


【解决方案1】:

试试这个:

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

【讨论】:

  • 这完美!应该像上面那样坚持简单的编码。感谢您的帮助
  • 很高兴我能帮上忙。
猜你喜欢
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多