Excel 2010(または2007-両方がありますが、実行している一部のレガシーアプリケーションの制限として私のOSはWin7 32ビットのみです)、2つのデータ配列から一致する値を見つけて返す方法を見つける必要があります。
2つのスプレッドシートがあります。1つは、階層的なOLAPキューブディメンションからの巨大なフラットファイルです(SAP BPCから37,000行)。もう1つは、照合する必要がある値のテーブルです。一致する値を2番目のスプレッドシートから最初のシート(フラットファイル)のColumnAに返す必要があります。
課題は、階層構造であるため、Sheet1から一致する単一の列を選択できないことです。各行の列のいずれかで一致する可能性があります。したがって、基本的に、配列としてのSheet 1の単一行と配列としてのSheet 2の列の間で一致するものは何でも取る必要があると考えています(私は思う)。
英語では、Excelに次のことを行います。データがあるSheet1の各行について、行全体を調べます(たとえば、範囲B2:R2-式/一致値の列Aを空白のままにします)。レポートカテゴリリスト(シート2列A、範囲A1:A42)のいずれかに一致するものがある場合、Sheet2値をSheet1!A2(一致用に作成した空白列)に返します。
これは食物のeg話を含むデータのサンプルです。空のColumnAを作成し、各行のデータは分類の階層に進み、ColBが基本レベルであり、必要に応じて端末の親がColFになるように繰り返されることに注意してください。
さて、この次の画像は、使用したいレポート形式です。いくつかの階層レベルのデータが必要な場合もあれば、他の階層レベルのデータが必要な場合もあります。
最終的に、スプレッドシートには、必要なカスタマイズされたレポートカテゴリが入力されます(その後、集計データのカテゴリをピボットできます)。
私はモンスターのvlookup式を使用してこれを達成しましたが、vlookupステートメントが8つの深さでネストされた37,000行がExcelをたくさんクラッシュさせるので、別の、より簡単な、または少なくともリソース集約的でない方法があるのだろうかと思っていました。したがって、実際のレポートカテゴリ(sheet2はAll_Budget_Unitsと呼ばれます)を使用して、現在使用しているのは次のとおりです。
= IFERROR(VLOOKUP(IFERROR(VLOOKUP(IFERROR(VLOOKUP(IFERROR(VLOOKUP(IFERROR(VLOOKUP(IFERROR(VLOOKUP(C2、All_Budget_Units!$ A $ 1:$ A $ 39,1、FALSE)、D2)、All_Budget_Units!$ A $ 1 :$ A $ 39,1、FALSE)、E2)、All_Budget_Units!$ A $ 1:$ A $ 39,1、FALSE)、F2)、All_Budget_Units!$ A $ 1:$ A $ 39,1、FALSE)、G2)、All_Budget_Units !$ A $ 1:$ A $ 39,1、FALSE)、H2)、All_Budget_Units!$ A $ 1:$ A $ 39,1、FALSE)、I2)