Excel VBA比较单元格值列表并覆盖单独工作表中的值

在我的工作簿中,用户可以手动input一个账户代码或从列表中select一个,账户代码放在名为“JE”的表格C列(C7:C446)中。 帐户代码如下所示####### – ### – ## – ######。 在“JE”表中的D列(D7:D446)中,有一个公式可以捕获账户代码的最后6位数字。 在名为“required_refs”的工作表中,A列中有6位数字代码。如果工作表“JE”中D列的值等于“required_refs”工作表的A列中的任何值,我希望值在D列单元格覆盖在单元格D1中单元格值称为“引用”(我知道这可能是混乱,对不起)

例如 :如果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 

提前感谢您提出如何完成这一任务的任何build议。 如果需要,我可以进一步详细说明。

这将做你想要的:

 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()来访问工作表函数。 这与使用Varianttypesvariables相结合,使我们能够捕获匹配失败时发生的错误。

你可以随时在纸上做这个。 考虑MATCHfunction。 在这里看到如何使用MATCH。

或者,如果你正在寻找与另一列中的值相关联的表中的东西(不是你的情况,我不认为) – 另一个伟大的工具 – VLOOKUP公式。 将此公式放在要放置数字的工作表的D单元格中。VLOOKUP采用以下格式:

 =vlookup(lookup value,table_array,column index number, [range lookup]) 
  1. 查找值是您正在查找的6位代码(在JE表单上)
  2. table_array只是select你想要search的值(required_refs表)
  3. 列索引号将是1,因为表只有1列。 这基本上是你正在寻找的值的列号。
  4. 如果您认为可能有多个地方匹配,则范围查找是用于查找的。

对于你的情况,我认为这将是这样的:

 =vlookup('JE'!D1,'required_refs'!A1:A,1,FALSE) 

然后locking您想要保留的值,然后单击并向下拖动。

VLOOKUP的解释在这里