【问题标题】:Excel If Cell Is Highlighted on VLOOKUPExcel 如果单元格在 VLOOKUP 上突出显示
【发布时间】:2015-06-21 04:04:46
【问题描述】:

我在 excel 中有两张表,一张是订单,另一张是基于订单的生产表。

我正在使用 VLOOKUP 来查询订购单以了解订购的给定商品的数量。

但是,有时这个数量会在订单上突出显示,表明该商品实际上是额外生产了 2 个数量(对于免费样品)。

例如,在生产形式中我有:

ITEM|QUANTITY TO PRODUCE

在我的订单中:

ITEM|QUANTITY TO ORDER

我使用 VLOOKUP 来获得匹配,这很有效,但是如果 QUANTITY TO ORDER 中的一个单元格以黄色突出显示,那么我需要将 VLOOKUP 值加 2。

我该怎么做?有没有办法在没有宏的情况下自动执行此操作?我的客户不想手动激活东西,他们只是希望工作表能够工作。

谢谢。

【问题讨论】:

  • 您愿意使用自定义函数吗?这可以在设计视图中创建,然后像任何其他函数一样在工作簿中调用。
  • @DiscipleMichael 是的,先生,听起来不错。

标签: vba excel


【解决方案1】:

VLOOKUP 无法做到这一点。您需要做的是将单元格的背景颜色视为数据...而单元格的背景颜色不是数据

但是...this link explains how to do that 以及含义是什么。

创建一个名为 BackColor 的工作簿范围名称 (Ctrl+F3) 引用 =GET.CELL(63,OFFSET(INDIRECT("RC",FALSE),0,-1)),然后在该列的右侧添加一列其中用户突出显示单元格,并使该列具有诸如=BackColor<>0之类的公式,以便它包含TRUE,用于紧靠其左侧的列中的任何突出显示的单元格。

将额外的 2 个单位硬编码到您的公式中并不便于维护,因此请在某个单元格中输入 2 并为其定义一个名为 ExtraUnits 的名称。

然后修改你的公式为

=[the original VLOOKUP]+IF([lookup the BackColor Boolean], ExtraUnits, 0)

这将为所有突出显示的单元格添加ExtraUnits 到查找的单元。

唯一的缺点是,正如我上面所说,就 Excel 而言,单元格的背景颜色不是数据,因此您的用户必须触发重新计算 - 仅更改单元格的背景颜色不会这样做,但按下F9 会。

【讨论】:

  • 如果该列必须距离该人突出显示单元格的右侧 6 个单位,而不是紧邻它,那么该公式的外观如何?我试过=GET.CELL(63,OFFSET(INDIRECT("RC",FALSE),-6,0)),但这似乎不起作用。
【解决方案2】:

以下代码在http://www.mrexcel.com/forum/excel-questions/215415-formula-check-if-cell-highlighted.html找到

Function CellColorIndex(InRange As Range, Optional _ 
    OfText As Boolean = False) As Integer
'
' This function returns the ColorIndex value of a the Interior 
' (background) of a cell, or, if OfText is true, of the Font in the cell.
'
Application.Volatile True
If OfText = True Then
    CellColorIndex = InRange(1,1).Font.ColorIndex
Else
    CellColorIndex = InRange(1,1).Interior.ColorIndex
End If

End Function

使用功能:

=IF(CELLCORINDEX(A1,FALSE)>0,1,0)

这使您可以检查单元格或文本的颜色。但是您需要使用此处的索引匹配代码http://www.mrexcel.com/forum/excel-questions/447723-vlookup-returns-cell-address.html 来匹配它。

另外,就像上面的答案状态,突出显示一个单元格不计为数据更改,因此即使您可以在没有宏的情况下获取此信息,如果有人更新单元格的突出显示状态,它不会使用更新单元格这个公式除非自动。

听起来您可能需要重新考虑突出显示是 +2 样本的触发器。我同意上面的答案,建议添加一列可能是 True/False 或 Yes/No,检查他们是否获得样本。

【讨论】:

  • 好的,我会试试这个并回复你,但不幸的是,我无法真正改变突出显示作为触发样本的方式,因为它们现在已经运行了一段时间。 :(
【解决方案3】:

我做的是这样的:

我创建了一个用户定义的函数:

Function getRGB3(rcell As Range, Optional opt As Integer) As Long
    Dim C As Long
    Dim R As Long
    Dim G As Long
    Dim B As Long

    C = rcell.Interior.Color
    R = C Mod 256
    G = C \ 256 Mod 256
    B = C \ 65536 Mod 256

    If opt = 1 Then
        getRGB3 = R
    ElseIf opt = 2 Then
        getRGB3 = G
    ElseIf opt = 3 Then
        If B <> 0 Then
        B = -2
        End If
        getRGB3 = B + 2
    Else
        getRGB3 = C
    End If
End Function

这使得所有突出显示的单元格(黄色)在引用时的值都为 2,所以在订单表格上它就像 ITEM|QUANTITY TO ORDER|CUSTOM FUNCTION VALUE| 和第三列(自定义函数)对于每个相应的黄色单元格是 2在它旁边,如果不是,它只是零。

然后我执行第二个 VLOOKUP 以将 CUSTOM FUNCTION VALUE 添加到原始文件中,然后我添加了两个。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多