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