Excel 复制到工作表中的下一个可用行

Excel 复制到工作表中的下一个可用行,excel,vba,Excel,Vba,我用客户数据填写一份名为“信息”的工作表。然后,我手动将相同的客户数据复制到另一张工作表“订单”。“订单”包含发票编号和如下结构: A D E F H J INVOICE FIRSTNAME LASTNAME DESCRIPTION POSTCODE EMAIL 1 1234 Fred Smith

我用客户数据填写一份名为“信息”的工作表。然后,我手动将相同的客户数据复制到另一张工作表“订单”。“订单”包含发票编号和如下结构:

      A           D           E               F            H         J
    INVOICE   FIRSTNAME   LASTNAME        DESCRIPTION   POSTCODE   EMAIL
1    1234       Fred       Smith         Red widget      AR225H   fred@smith.com
2    1235       Bill       Jones         Blue widget     EH66VT   bill@jones.com
3    1236
4    1237
我想创建一个宏,将我的数据从“信息”一个单元格一个单元格地复制到“订单”。我可以这样做,但我需要一个条件注释,说明“如果订单列D为空,则选择第3行将数据复制到”。如果没有,则覆盖最后一个订单行

请注意,每次“信息”表上的客户数据都会更改,这就是我手动复制它的原因

我目前使用此公式将下一个可用发票号拉入我的信息表:

=索引(订单!$A:$A,COUNTA(订单!$D:$D)+1)

它允许我在“信息”表上有一个单元格(比如F3),其中已经包含要为当前客户数据分配的正确发票号。使用此选项,我可以重写条件“将信息粘贴到订单!列A中显示Info!F3的行中”

以下是宏(如果有帮助):

Sub Macro2()
'
' Macro2 Macro
'

'
    Range("B6").Select
    Selection.Copy
    Sheets("Orders").Select
    Range("C735").Select
    ActiveSheet.Paste
    Sheets("Info").Select
    Range("B7").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Orders").Select
    Range("D735").Select
    ActiveSheet.Paste
    Sheets("Info").Select
    Range("B8").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Info").Select
    Range("B11").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Orders").Select
    Range("E735").Select
    ActiveSheet.Paste
    Sheets("Info").Select
    Range("B12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Orders").Select
    Range("F735").Select
    ActiveSheet.Paste
    Sheets("Info").Select
    Range("B15").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Orders").Select
    Range("G735").Select
    ActiveSheet.Paste
    Sheets("Info").Select
    ActiveWindow.SmallScroll Down:=-6
    Range("B3").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Orders").Select
    Range("B735").Select
    ActiveSheet.Paste
End Sub
==================

也许这个问题的信息太多了?在最简单的形式中,我只需要根据单元格的内容选择一行,然后通过宏将信息粘贴到此行

==================

更新-这是“信息”表布局,请注意,并非所有行都与“订单”表中的列匹配:


我喜欢这个虚构的地址

我测试了这段代码,它运行正常。您可能需要更改单元格引用,尤其是在
Info
工作表中,以获得正确的数据

简而言之,从
Info
工作表开始,将相关数据保存在变量中,在
Orders
中找到发票号,然后粘贴数据

Sub InfoToOrders()
    Dim InvoiceNo As Long, FirstName As String, LastName As String, Description As String, Postcode As String, Email As String

    With Worksheets("Info")
        InvoiceNo = .Range("D1")
        FirstName = .Range("A3")
        LastName = .Range("A4")
        Description = .Range("B13")
        Postcode = .Range("A8")
        Email = .Range("A11")
    End With

    Dim InvoiceNumbers As Range, invoice As Range

    With Worksheets("Orders")

        Set InvoiceNumbers = .Range("A1:A" & .Range("A1").End(xlDown).Row)

        For Each invoice In InvoiceNumbers
            If invoice = InvoiceNo Then
                invoice.Offset(0, 1) = FirstName
                invoice.Offset(0, 2) = LastName
                invoice.Offset(0, 3) = Description
                invoice.Offset(0, 4) = Postcode
                invoice.Offset(0, 5) = Email
            End If
        Next invoice

    End With
End Sub

是否需要一个宏,该宏可以有效地从
信息
工作表中获取客户数据,并将其粘贴到
订单
基于工作表的匹配发票号中?示例:对于
Info
中的发票号1237,在
订单中查找发票号1237
并从
Info
复制客户数据?@是的,就是这样。我在信息表中有一个带有所需发票号的单元格。您的数据在信息表中的结构如何?你能添加一个例子,就像你为
订单所做的那样吗?@rement添加了一个例子,并改进了“订单”的描述。谢谢,我能理解这些代码。但它对我不起作用,似乎锁定在这行:“If invoice=InvoiceNo Then”。不确定为什么as InvoiceNo与我引用的单元格相同。我通过在If结尾之前添加Else MsgBox InvoiceNo进行了测试。错误消息说什么
InvoiceNo
Info
上的编号,而
invoice
只是在
Orders
上拖网搜索所有发票编号,以找到匹配项。我现在正在进行此项工作,页面上方缺少发票编号,似乎无法继续。非常感谢你的帮助,非常高兴。
Sub InfoToOrders()
    Dim InvoiceNo As Long, FirstName As String, LastName As String, Description As String, Postcode As String, Email As String

    With Worksheets("Info")
        InvoiceNo = .Range("D1")
        FirstName = .Range("A3")
        LastName = .Range("A4")
        Description = .Range("B13")
        Postcode = .Range("A8")
        Email = .Range("A11")
    End With

    Dim InvoiceNumbers As Range, invoice As Range

    With Worksheets("Orders")

        Set InvoiceNumbers = .Range("A1:A" & .Range("A1").End(xlDown).Row)

        For Each invoice In InvoiceNumbers
            If invoice = InvoiceNo Then
                invoice.Offset(0, 1) = FirstName
                invoice.Offset(0, 2) = LastName
                invoice.Offset(0, 3) = Description
                invoice.Offset(0, 4) = Postcode
                invoice.Offset(0, 5) = Email
            End If
        Next invoice

    End With
End Sub