
私は Excel 2010 を使用しており、店舗内の製品の詳細 (カテゴリ、価格、アクセサリなど) を定義するワークブックを作成しています。また、製品の特定の詳細が空白のままになっている場合に使用する既定のカテゴリの詳細も定義したいと考えています。
私は、Products、CategoryDefaults、Calculated の 3 つのシートを設定しました。列は製品/カテゴリの詳細で、各アイテム/カテゴリには独自の行があります。また、読みやすさのために、できるだけ名前付きの列を使用したいと思います。P で始まる列名は製品の詳細であり、D で始まる列名は CategoryDefault シートからのものです。
計算されたフィールドは次のようになります。
=IF(Products!G2="",
INDEX(DPRICE, MATCH(Products!A2, DCAT, 0)),
Products!G2)
ここで、DPRICE はデフォルト価格設定の名前付き列であり、DCAT は CategoryDefaults シートのカテゴリ名です。
数式の意味は次のとおりです: 製品番号 2 の列 G が空白の場合は、CategoryDefault シートの列 A の製品 2 の値を見つけて、DefaultPrice を返します。それ以外の場合は、定義された価格を返します。
ここまでは、すべてうまくいっています。もう一歩進めてみたいと思います。前の例では、Products!G2 は行 2 の製品の価格列を参照しています。列の文字参照「G」を名前付き列参照「PPRICE」に置き換えて、数式を読みやすくしたいと思います。Products!A2 への参照についても、列を「PCAT」(製品が属するカテゴリ) と呼ぶことで同じことを行います。
最終的な式は次のようになります。
=IF(Products!PPRICE:2="",
INDEX(DPRICE, MATCH(Products!PCAT:2, DCAT, 0)),
Products!PPRICE:2)
どうしてもうまくいきません。「名前を適用...」を試しましたが、結果は出ず、コロンや $ のバリエーションも試しましたが、効果はありませんでした。これを以前に試した人はいますか?
答え1
INDEX(PPRICE, 2)
PPRICE 列の 2 行目の値が返されることを発見しました。コード スニペット全体は次のようになります。
=IF(INDEX(PPRICE, 2)="",
INDEX(DPRICE, MATCH(Products!A2, DCAT, 0)),
INDEX(PPRICE, 2))
ただし、これは相対値ではなく絶対値であり、この数式を他の行にコピーして貼り付けても、行 2 を指します。したがって、大規模なデータ セットの場合は、この方法は適していません。