我有一个包含几个不同工作表的 Excel 电子表格。第一个工作表包含在第二列中具有唯一 ID 的产品列表。其余列包含产品的附加信息,如名称、价格、折扣等。
在其余的工作表中,我通过添加产品的唯一 ID 来添加产品,然后复制并粘贴第一张工作表的行。我基本上要做的是创建一个宏,当在第 n 个工作表的第二列(例如,在第 5 个工作表中)输入唯一 ID 时,将执行该宏。它应该使用第一个工作表中具有相同 ID 的产品的信息自动填充其余列。
你试过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
s 需要花费大量时间,并且您的数据在输入唯一 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