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

时间:2017-09-13 21:11:51

标签: excel vba excel-vba

在我的工作簿中,用户可以手动输入帐户代码或从列表中选择一个帐户代码,并将帐户代码放在名为" JE"的工作表中的C列(C7:C446)中。帐户代码如下所示####### - ### - ## - ######。在工作表" JE"中的D列(D7:D446)中,有一个公式可以捕获帐户代码的最后6位数字。在名为" required_refs"的工作表中,A列中有6位数字代码的列表。如果工作表中的D列中的值" JE"等于" required_refs"的A列中的任何值; sheet,我希望D列单元格中的值覆盖单元格D1中的单元格值,该单独的工作表名为" references" (我知道这可能令人困惑,抱歉)

示例:如果D25的值与工作表" required_refs"的A列中列出的任何值匹配,则在双击红色F25单元格时,将值设为D25(表单" JE"),并将其放在单元格D1和表格#34;参考文献"。

我已经知道如何最好地解决它。我已将此代码放在表格JE中:

var links = [ 
    { "source" : 0, "target" : 1, "value" : 1 }, 
    { "source" : 1, "target" : 2, "value" : 2 }
    ...
] ; 

非常感谢您提供有关如何完成此操作的任何建议。如果需要,我可以进一步详细说明。

2 个答案:

答案 0 :(得分:1)

这将做你想要的:

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类型变量相结合,允许我们捕获匹配失败时发生的错误。

答案 1 :(得分:0)

您可以随时在工作表上执行此操作。考虑MATCH函数。有关如何使用MATCH的信息,请参阅here

或者另一个很棒的工具,如果您正在搜索与另一列中的值相关联的表格中的某些内容(不是您认为的情况) - VLOOKUP公式。将此公式放在要放入数字的工作表的D单元格中.VLOOKUP的格式如下:

=vlookup(lookup value,table_array,column index number, [range lookup])
  1. 查找值是您正在寻找的6位数代码(在JE表格上)
  2. table_array只是选择您要搜索的值(required_refs sheet)
  3. 列索引号将为1,因为该表只有1列。它基本上是您正在寻找的值的列号。
  4. 并且范围查找适用于您认为可能有多个地方匹配的地方。
  5. 对于你的情况,我认为它看起来像这样:

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

    然后只需锁定要保留的值,然后单击并向下拖动。

    VLOOKUP here

    的说明