Excel VBA比较单元格值列表并覆盖单独的表中的值
在我有一个工作簿中,用户手动输入一个帐户代码或从列表中选择一个帐户代码放置在列C(C7:C446)在一张名为“JE”的表格。帐户代码如下所示####### - ### - ## - ######。在工作表“JE”的D栏(D7:D446)中,有一个公式可以捕获账户代码的最后6位数字。在名为“required_refs”的表中,列A中有6位数字代码列表。如果表“JE”中D列中的值等于“required_refs”表中A列中的任何值,我希望值在D列单元格覆盖在单元格D1单元格中称为“引用”(我知道可能一直困惑,遗憾)单元格值Excel VBA比较单元格值列表并覆盖单独的表中的值
示例:如果D25的值匹配任何在“required_refs”表的A列中列出的值,在双击一个红色的F25单元格时,将D25(表格“JE”)的值放入表格“参考”表格中的单元格D1中。
我已经采取了一个最好的,我知道如何破解。我已经放在这个代码表JE:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim project As Range: Set project = Range("D7:D446")
Dim param As Range: Set param = Worksheets("references").Range("D1").Value
For Each cell In project
If project.Value = Worksheets("required_refs").Range("A:A").Value Then
Call gotoRef_ 'macro that simply selects/navigates to the required_ref sheet
project.Value = param
End If
End Sub
感谢这么多提前为如何完成这个任何建议。如果需要,我可以进一步阐述。
这会做你想要什么:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("F7:F446")) Is Nothing Then Exit Sub
Dim varReference As Variant
varReference = Columns("D").Cells(Target.Row).Value2
If Not IsError(Application.Match(varReference, Worksheets("required_refs").Columns("A"), 0)) Then
Worksheets("references").Range("D1").Value = varReference
End If
End Sub
要点:
每当与事件处理工作,总是限制目标的范围范围在第一行。否则,它可能无法正常工作,或者它可能会减慢您的电子表格。
确保您JE
表列D
值和required_refs
表列A
值所有文本或数字。否则,这些值将不会被正确比较。
请注意使用Application.Match()
而不是WorksheetFunction.Match()
来访问工作表函数。这与使用Variant类型变量相结合,使我们能够捕获匹配失败时发生的错误。
您可以随时在表格上执行此操作。考虑MATCH功能。有关如何使用MATCH,请参见here。
或者另一个很棒的工具,如果你正在寻找与另一列中的值相关联的表中的东西(而不是你的情况,我不认为) - VLOOKUP公式。将该公式置于纸张的d细胞要放置的号码VLOOKUP是按以下格式:
=vlookup(lookup value,table_array,column index number, [range lookup])
- 查找值就是你要寻找的6位代码(在JE表)
- table_array只是选择要搜索的值(required_refs表)
- 列索引号将为1,因为该表只有1列。它基本上是您要查找的值的列号。
- 如果您认为可能存在多个匹配的地方,则范围查找适用。
对于你的情况,我认为它应该是这样的:
=vlookup('JE'!D1,'required_refs'!A1:A,1,FALSE)
然后就锁定你想保留,然后单击并拖动下的值。
解释VLOOKUP here
我提出了一种替代方法作为答案,但是如果您必须使用VBA,您究竟遇到了什么问题?当你运行这个时会发生什么? –