4

Results!$A:$T12x18 の範囲のページ、行と列のヘッダー (それぞれ基準 1、基準 2、基準 3) に従って823x20 シート ( ) からデータを描画する 12x18 の Excel 範囲があります。

={INDEX(Results!$A:$T,
        MATCH(1, (criterion1 = Results!$A:$A) * (criterion2 = Results!$B:$B), 0),
        MATCH(criterion3, Results!$A$1:$T$1, 0))}

ご覧のとおり、それほど多くのデータではありませんが、ページ ヘッダーを変更すると、私のコンピューター (24 GB の RAM を備えた 2 GHz Intel Xeon) が 216 (12x18) インデックス検索を更新するのに約 1 分かかります。検索の作成はまだ半分も終わっていません。

私のプロジェクトの早い段階で、これらの検索には基準が 1 つしかなかったので、それを使用VLOOKUP()したところ、結果は非常に迅速に得られました。しかし、今は 3 つの基準に従って値を見つける必要があり、上記の関数はこれを達成するための最良の方法です。ただし、それが長い計算時間の原因のようです。だから私の質問は次のとおりです。複数の基準を最適化するにはどうすればよいですか? VLOOKUP()微調整INDEX(1, MATCH()*MATCH(), MATCH())する必要がありますか、これを行うためのより速い方法はありますか?

以下は、12x18 のインデックス検索のサンプルです (ブランチ名は、エンド ユーザーが変更できる唯一の変数です)。

索引

そして、823x20 のシートを検索します (実際には、列 A にはマージがありません)。

ここに画像の説明を入力

4

2 に答える 2

1

複数の条件を使用したルックアップの概要とオプションについては、これを確認してください。

ここではメソッド 2 (非配列式) とメソッドhereをよく使用します。

それらを試して速度を確認する必要があると思います。

于 2014-12-21T15:47:36.700 に答える
0

まず、シート「結果」の列 A をフィルタリングするだけでこれを実現できないでしょうか。それが最も簡単な解決策だと思います。

ただし、説明された基準に基づいてワークブックの例を作成しました。ここで見つけることができます

最初に、シート「結果」列 A の一意の値に高度なフィルターを使用して一意のブランチのリストを作成し、名前付き範囲 listUnqBranches を作成したシート「リスト」に配置しました。その名前付き範囲を使用して、シート 'Sheet1' セル A1 にデータ検証ドロップダウン リストを作成し、ユーザーが表示したいブランチを選択できるようにしました。そのセルをBranchと名付けました。

次に、2 つの名前付き範囲を作成しました。rngDate は、次の動的な名前付き範囲式で定義されます。

=INDEX(Results!$B:$B,MATCH(Branch,Results!$A:$A,0)):INDEX(Results!$B:$B,MATCH(Branch,Results!$A:$A,0)+COUNTIF(Results!$A:$A,Branch)-1)

rngLookup は、次の動的な名前付き範囲式で定義されます。

=INDEX(Results!$C:$C,MATCH(Branch,Results!$A:$A,0)):INDEX(Results!$T:$T,MATCH(Branch,Results!$A:$A,0)+COUNTIF(Results!$A:$A,Branch)-1)

最後に、シート 'Sheet1' セル B2 で、上下にコピーされたのは次の数式です。

=IF(Branch="","",INDEX(rngLookup,MATCH($A2,rngDate,0),MATCH(B$1,Results!$C$1:$T$1,0)))

名前付き範囲を使用した数式ソリューションは、シート 'Results' のデータが Branch でソートされていることに注意してください。それはあなたのために働きますか?

于 2013-08-14T15:35:18.793 に答える