Excel VBA 匹配特定列中的所有单元格

Excel VBA Matching against all cells in a specific column

这个 table 是通过将多个工作簿中的可变列数合并为一个而制成的。我分别使用整数 "i1" 和 "i2" 跟踪 "Key1" 和 "Key2" 的列索引。

+-------------+-----------+-------------+-----------+-----------+--------+-------------+-----------+-------+
|  Thisjust   | Indexcode | Specialcode |   Key1    | Indexcode |  Some  | Specialcode |   Key2    | MATCH |
+-------------+-----------+-------------+-----------+-----------+--------+-------------+-----------+-------+
| isanexample |       101 |       27223 | 101_27223 |       101 | Values |        1112 | 101_1112  |       |
| isanexample |       102 |       27224 | 102_27224 |       102 | Values |        1113 | 102_1113  |       |
| isanexample |       103 |       27225 | 103_27225 |       103 | Values |        1114 | 103_1114  |       |
| isanexample |       104 |       27226 | 104_27226 |       104 | Values |        1115 | 104_1115  |       |
| isanexample |       108 |       11130 | 108_11130 |       105 | Values |        1116 | 105_1116  | Yes   |
| isanexample |       106 |       27228 | 106_27228 |       106 | Values |        1117 | 106_1117  |       |
| isanexample |       107 |       27229 | 107_27229 |       107 | Values |        1118 | 107_1118  |       |
| isanexample |       110 |       27227 | 110_27227 |       108 | Values |       11130 | 108_11130 | Yes   |
| isanexample |       109 |       37345 | 109_37345 |       109 | Values |        1112 | 109_1112  |       |
| isanexample |       105 |       37346 | 105_37346 |       110 | Values |        1113 | 110_1113  |       |
| isanexample |       111 |       37347 | 111_37347 |       111 | Values |        1114 | 111_1114  |       |
| isanexample |       112 |       37348 | 112_37348 |       112 | Values |        1115 | 112_1115  |       |
| isanexample |       113 |       37349 | 113_37349 |       113 | Values |        1116 | 113_1116  |       |
| isanexample |       114 |       37350 | 114_37350 |       114 | Values |        1117 | 114_1117  |       |
| isanexample |       115 |       37351 | 115_37351 |       115 | Values |        1118 | 115_1118  |       |
| isanexample |       116 |       11138 | 116_11138 |       116 | Values |       11138 | 116_11138 | Yes   |
| isanexample |       117 |       11139 | 117_11139 |       117 | Values |       11139 | 117_11139 | Yes   |
| isanexample |       118 |       11140 | 118_11140 |       118 | Values |       11140 | 118_11140 | Yes   |
+-------------+-----------+-------------+-----------+-----------+--------+-------------+-----------+-------+

我正在检查是否

特定行中的任一 key1 与 key2 单元格之一匹配

或者如果特定行中的 key2 与 key1 单元格之一匹配

我用这个公式来完成

=IF(AND(ISNA(MATCH(H2,$D:$D,0)),ISNA(MATCH(D2,$H:$H,0))),"","Yes")

知道整个 table 可能有非常不同的列数,而且列的顺序也是可变的:

如何在 VBA 中执行匹配功能? MATCH 列将始终位于末尾。

如果您可以根据数据创建 Table (ListObject),则您的 MATCH 列公式将为 =IF(AND(ISNA(MATCH([Key1],[Key2],0)),ISNA(MATCH([Key2],[Key1],0))),"","Yes").

这根据 headers 引用了 Key1Key2 列,消除了更改数字 and/or 列顺序的问题。