我有一个包含多个不同工作表的Excel电子表格。第一个工作表包含第二列中具有唯一ID的产品列表。其余列包含产品的其他信息,如名称,价格,折扣等。
在其余工作表中,我通过添加其唯一ID然后复制并粘贴第一个工作表的行来添加产品。我基本上要做的是创建一个宏,当在第n个工作表的第二列中输入唯一ID时(例如在第5个工作表中)将执行该宏。它应该使用第一个工作表中具有相同ID的产品中的信息自动填充其余列。
答案 0 :(得分:0)
您是否尝试过VLOOKUP()
公式?
给出一个表格(从您的描述中简化),如下所示:
A: B: C:
1: ID1 A Spec
2: ID2 B Spec
3: ID3 C Spec
4: ID4 D Spec
5: ID5 E Spec
您可以在以下表格中使用这样的公式:
=VLOOKUP(B2,Sheet1!A1:C5,2,FALSE)
其中B2是包含您输入的产品编号的单元格。要让VBA自动执行此过程,请创建一个在更改单元格时触发的宏:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lChangedRow As Long
If Target.Column = 2 Then
lChangedRow = Target.Row
Range("D" & lChangedRow).Formula = "=VLOOKUP(B" & lChangedRow & ",Sheet1!A1:C5,2,FALSE)"
'Fill in additional columns (change "D") as necessary...
End If
End Sub
If Target.Column = 2 Then
检查更改的值是否仅在第二列中,以便在没有必要时没有多次运行更新。
Range("D" & lChangedRow).Formula...
设置此帖子顶部突出显示的VLOOKUP
功能。
Sheet1!A1:C5
需要更改以匹配您的第一个工作表的名称/数据。
为了避免在每张工作表上输入此代码,您可以通过在其自己的模块中放入类似的代码来简化(这不是必需的,但如果您想要更改Sub,则会很有用,因为您将只需要改变一次):
Public Sub FillData(ByVal Target As Range)
Dim lChangedRow As Long
lChangedRow = Target.Row
Range("D" & lChangedRow).Formula = "=VLOOKUP(B" & lChangedRow & ",Sheet1!A1:C5,2,FALSE)"
'Fill in additional columns (change "D") as necessary...
End Sub
每张表都有相同的简化代码,调用Sub:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
FillData(Target)
End If
End Sub
另一个非必需品,但可能会有所帮助,具体取决于您的使用/此工作簿的大小,一旦更新,公式将更改为静态值。如果您经常更改数据,或者数据集相当小,那么您可能不应该这样做。
但是,如果您发现更新所有这些VLOOKUP
需要花费大量时间,并且一旦输入了您的唯一ID,您的数据就不会更改,那么这将有助于加快速度:
Public Sub FillData(ByVal Target As Range)
Dim lChangedRow As Long
lChangedRow = Target.Row
Range("D" & lChangedRow).Formula = "=VLOOKUP(B" & lChangedRow & ",Sheet1!A1:C5,2,FALSE)"
Range("D" & lChangedRow).Value = Range("D" & lChangedRow).Value
'Fill in additional columns (change "D") as necessary...
End Sub