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

时间:2013-03-06 16:43:57

标签: excel excel-vba vba

我用客户数据填写了一个名为“Info”的工作表。然后我手动将相同的客户数据复制到另一个工作表“订单”。 “订单”包含发票编号和类似的结构:

      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行将数据复制到”。如果我没有这个,那么我会覆盖最后一个订单行。

请注意,每次“信息”表单上的客户数据都会发生变化,这就是我手动复制它的原因。

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

= INDEX(订单$ A:$ A,COUNTA(订单$ d:$ d)+1)

它允许我在“信息”表上有一个单元格(说F3),该单元格已包含要为当前客户数据分配的正确发票编号。使用这个,我可以将条件重写为“将信息粘贴到Info!F3出现在Orders!列A中的行”。

如果它有帮助,这是宏:

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

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

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

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

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

    A                             B                C

                          Invoice number:        1236

Peter 
Parker
12
Overflow Road
Stacktown
BB338J
0121 345 6789
0777 789 789
peter@spidermail.com

Order description:          Red widget

1 个答案:

答案 0 :(得分:1)

我喜欢这个虚构的地址!

我测试了这段代码并且它有效。您可能需要更改单元格引用,尤其是在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