我对 VBA 的经验很少,现在我对我试图用宏完成的事情感到困惑。Excel 2010。
我有 3 个相关的专栏。B、C 和 AD。(第 2、3 和 30 列)我的数据被过滤到大约 30 行,几乎没有一个是连续的(总共大约 500 行)。
我希望发生以下情况:
仅在 AD 列的可见行中输入了一个公式,它将查看同一行的 B 列中的值,并检查 C 列中所有可见单元格中的值。它不能查看所有单元格C列,只有可见的。
如果在 C 列的 VISIBLE CELLS 中的任何位置都可以找到该行 B 列的值,则 AD 列应返回“True”。我不关心找不到值时返回的内容,因为我将仅过滤“True”值。作为附加要求,如果 B 列中值的前 3 个字符是“010”,我需要它在 AD 列中返回“True”值。然后,我需要将此公式复制到每个 VISIBLE 行的 AD 列。
现在,我有一个公式可以在 C 列中搜索 B 列中的值。(在 stackoverflow 上找到)
=NOT(ISNA(VLOOKUP(B4,C:C,1,0))))
当在 C 列的某处找到 B 列的值时,这会在 AD 列中提供“真”。使用“010”约束,公式如下所示:
=IF(LEFT(B4,3)="010","True",NOT(ISNA(VLOOKUP(B4,C:C,1,0))))
我遇到了一个问题,因为它甚至可以查看隐藏(过滤掉)的行。我在 B 列中的每个值都会在某个时候出现在 C 列中,所以我的所有条目只会得到“真”。
我认为必须有更好的方法来做到这一点,而不仅仅是让宏将公式粘贴下来(即使考虑到我无法让公式起作用)。所以,2个问题:
- 在这种情况下,公式是正确的方法吗?如果是这样,谁能告诉我如何让它只搜索 C 列中的可见单元格?
- 如果代码是最好的方法(我猜是),谁能给我看一个可能有效的代码示例?