配列数式は遅いです。数千の配列数式があると、速度が非常に遅くなります。したがって、キーは配列式を避けることです。
以下は、単純な式のみを使用して、それを達成するための私の方法です。2500行しかない場合は十分に高速です。
- 列 F と H は「キー」であり、2 つの列を連結して作成されます (元の数式の E と F)
- データの最初の行が行 3 にあると仮定します。
データ:
| A | B | | D | E | F | | H |
| index | final value | | ID | exist in Old? | Key (New) | | Key (Old) |
--------------------------------------------------------------------------------
| 1 | XXX-33 | | 0 | 3 | OOD-06 | | OOC-01 |
| 2 | ZZZ-66 | | 0 | 1 | OOC-01 | | OOC-02 |
| 3 | ZZZ-77 | | 1 | N/A | XXX-33 | | OOD-06 |
| 4 | | | 1 | 4 | OOE-01 | | OOE-01 |
| 5 | | | 1 | 2 | OOC-02 | | OOF-03 |
| 6 | | | 2 | N/A | ZZZ-66 | | |
| 7 | | | 3 | N/A | ZZZ-77 | | |
列 E "exist in Old?": 新しいキー (列 F) が古いリスト (列 H) に存在するかどうかをテストします。
=MATCH(F3, $H$3:$H$2500, 0)
列 D「ID」: 新しいアイテムが見つかるたびに 1 ずつ増加します
=IF(ISNA(E3), 1, 0)+IF(ISNUMBER(D2), D2, 0)
の 2 番目の部分はISNUMBER最初の行のみを対象としており、D2 を使用するだけでエラーが発生する可能性があります
列 A「インデックス」: 1 から始まる単純なシリーズ (新しいリスト列 F の長さまで)
列 B の「最終値」: 列 A を列 D に一致させて新しいキーを見つけます。
=IF(A3>MAX($D$3:$D$2500), "", INDEX($F$3:$F$2500, MATCH(A3, $D$3:$D$2500, 0))
この列 B が必要なリストになります。
それでも遅すぎる場合は、計算を高速化するためのいくつかの汚いトリックが存在しMATCH( , , 1)ますMATCH( , , 0)。