复制并粘贴其他工作表中的数据数据,并根据另一列

时间:2016-10-25 09:46:56

标签: excel vba excel-vba

我有数据要从表1("发票")复制到表2("库存")。我只需要复制1个由发票号码组成的单元格(" 1,2,3等等#34;)。 我已经成功复制(Invoice.D14)并粘贴单元格(Inventory.B4)但是我需要自动填充到表2中的另一列(Inventory.D4)("库存")。请参阅我的代码如下:

Dim Outgoing As Worksheet
Dim Invoice As Worksheet

Set Outgoing = ActiveWorkbook.Worksheets("Inventory")
Set Invoice = ActiveWorkbook.Worksheets("Invoice")


    Invoice.Range("D14").Copy
    Outgoing.Cells(Rows.Count, 1).Range("B1").End(xlUp).Offset(1, 0).PasteSpecial

With Range("B4").Resize(4)
        .Value = [B4]
        .AutoFill .Resize(Range("C" & Rows.Count).End(xlUp).Row - 1)

End With

它不断出现错误消息。 有人可以帮忙吗?

编辑信息

我已经从表1(" Invoice")复制到表2("库存")。 在表1(" Invoice")中包含:

  1. 数据代码,范围从B21到B27
  2. 单元格D14的交易ID
  3. 我将上述数据复制到表2("库存")并详细说明:

    1. 将数据代码复制到Inventory.columnD(从4开始行)
    2. 将交易ID复制到inventory.columnB(从4开始行)
    3. 如果我在数据代码上输入3个代码,它将复制到具有3个代码的库存(3行),但是因为我只复制1个单元格用于事务ID,所以Inventory上的输出也只有1个单元格。

      我需要的是自动填充交易ID,只要我先前输入的数据代码。但是,如果我使用自动填充功能,我就不知道它为什么总是显示错误信息。所以我尝试了另一种方式,复制第一个交易ID。

      我也尝试下面的代码:

      Sub Outgoing_Data()
      
       Dim Inventory As Worksheet
       Dim Invoice As Worksheet
       Dim columnB As Range
       Dim columnD As Range
       Dim c As Range
       Dim i As Long
       Dim lastNonEmptyRow As Range
      
      Set Outgoing = Worksheets("Inventory")
      Set Invoice = Worksheets("Invoice")
      Set columnB = Range("B:B")
      Set columnD = Range("D:D")
      
      
          Invoice.Range("B21:B27").Copy
          Outgoing.Cells(Rows.Count, 1).Range("D1").End(xlUp).Offset(1, 0).PasteSpecial
      
          Invoice.Range("D14").Copy
          Outgoing.Cells(Rows.Count, 1).Range("B1").End(xlUp).Offset(1, 0).PasteSpecial
      
          i = 5
          Set lastNonEmptyRow = Outgoing.Range(Cells(i - 1, 2), Cells(i - 1, 2))
          For Each c In columnD.Cells
              If c.Value2 = "" Then Exit For
              i = i + 1
          Next c
      
          Do While columnD(i) <> ""
              lastNonEmptyRow.Copy Range(Cells(i, 2), Cells(i, 2)).PasteSpecial
          i = i + 1
      Loop
      
      
      End Sub
      

      我想要的输出:
      | transaction_ID |产品编号

      | 1 | 2DFGH4
      | 1 | 2DFGH7
      | 1 | 2HJTY0
      | 2 | 1JKTY7
      | 2 | 5THSD1
      | 3 | 4GHTY9

      (不知道如何在这里画一张桌子,但希望你明白我在说什么) 结果,事务ID已经与数据代码一样长。对于第一次试验,它看起来很好。但是,当我更改发票上的交易ID并再次运行而不删除库存数据时,库存上的交易ID仅复制在1个单元格上。对此有什么建议吗?

      真的很感激你的答案。 谢谢

2 个答案:

答案 0 :(得分:0)

可能是错误的工作表被激活了?尝试:

With Outgoing.Range("B4").Resize(4)
        .Value = [B4]
        .AutoFill .Resize(Range("C" & Rows.Count).End(xlUp).Row - 1)
End With

修改

.AutoFill .Resize(Range("C" & Rows.Count).End(xlUp).Row - 1)的问题是Rows.Count返回行的绝对值,计数形式1,而不是4(这是您要引用的行)。因此,如果您始终从B4开始自动填充,简单的-3将对您有用:

.AutoFill .Resize(Range("C" & Rows.Count).End(xlUp).Row - 3)

但是,如果此行会动态更改,您可以将其添加到行计算中,例如:

expectedRow = 8
    With Outgoing.Range("B" & expectedRow).Resize(4)
            .Value = Range("B" & expectedRow).Value
            .AutoFill .Resize(Range("C" & Rows.Count).End(xlUp).Row - expectedRow + 1)
    End With

顺便说一句,我不理解.Value = Range("B" & expectedRow).Value行和Resize(4)命令With部分的用途,但我不知道你的数据是什么样的,以及是您的特定目标,因此请尝试删除它并查看输出是否适合您。

答案 1 :(得分:0)

你的目标不是很清楚

试试这个:

Option Explicit

Sub main()
    Dim Outgoing As Worksheet
    Dim Invoice As Worksheet

    Set Outgoing = ActiveWorkbook.Worksheets("Inventory")
    Set Invoice = ActiveWorkbook.Worksheets("Invoice")

    Invoice.Range("D14").Copy
    With Outgoing
        With .Cells(Rows.Count, 1).Range("B1").End(xlUp).Offset(1, 0)
            .PasteSpecial
            .Resize(4).Value = .Value
            .Resize(4).AutoFill .Resize(4, 2)
        End With
    End With
End Sub