VLOOKUPに似ているが、より多くの機能がある

VLOOKUPに似ているが、より多くの機能がある

患者のリストがあります。そして、患者が受ける必要のある臨床訪問に対応する販売注文のリストがあります。誰が診察を受け、誰が受けなかったかを確認したいのです。

シート1には患者とそのID番号のリストがあります(患者IDは一意です):患者ID、患者名

次に、シート2に販売注文のリストがあります(販売注文IDは一意ですが、患者IDは一意ではありません):患者ID、販売注文ID、販売注文の日付

私がやりたいのは、Excel でシート 2 の販売注文を調べ、患者 ID が一致する場所を見つけて、日付を順番に取り込むことです。

したがって、シート 1 は次のようになります: 患者 ID、患者名、販売注文 1 の日付、販売注文 2 の日付、null (一致するものがない場合)。

VLOOKUP と INDEX/MATCH について見つけられるものはすべて読みましたが、2 番目のシートに複数の一致がある場合に機能する関数が見つからないようです (患者 ID はシート 2 のすべての販売注文で何度も同じになります)。

助けてください。

答え1

ここでは、ヘルパー列やテーブルの並べ替えを必要としないソリューションを紹介します。比較的単純な配列数式を 1 つ使用するだけです。


2 つのワークシートを次のように設定し、2 番目のシートに という名前を付けますSheet2

ワークシート 1 のスクリーンショット

ワークシート 2 のスクリーンショット

最初のシートのセルに次の数式を入力 ( Ctrl+ Shift+ )し、コピーして貼り付け/下に入力します。EnterC3C3:G7

{=IFERROR(SMALL(IFERROR(1/(1/((Sheet2!$A$2:$A$20=$A3)*(Sheet2!$C$2:$C$20))),""),C$2),"")}


シート1の患者表の最後の日付セルが入力されている場合は、5月表示されない日付が増える可能性があります。サンプルのワークシートでは、このような場合に警告するために、表の右側の列に数式を追加しました。

H3に入力され、 にコピー&ペースト/入力された配列の数式は次H3:H7のようになります。

{=IF(ISERROR(SMALL(IFERROR(1/(1/((Sheet2!$A$2:$A$20=$A3)*(Sheet2!$C$2:$C$20))),""),G$2+1)),"","more")}

答え2

これは、顧客ごとの注文数を数えることで解決できます。この問題を解決する方法にはさまざまなバリエーションがありますが、ここでは 1 つを紹介します。

ステップ1:

注文表を最新の注文から順に並べ替えます。

ステップ2:

販売注文の最後に、顧客数をカウントする数式を含む列を追加します。新しい列の 2 行目に、数式を記述します=Countif(B$2:B2,B2)

数式をコピーします。

B顧客番号が見つかる列です。

ステップ3:

顧客番号と注文数を識別するための一意のキーを持つ列を追加します。2番目の新しい列の2行目に数式を記​​述します。=B2&" "&X2

Bは顧客番号で、Xは手順 2 で行った注文数です。

ステップ4:

患者テーブルに、最新の注文、2 番目に新しい注文などの ID をインデックス一致して日付を返す列を追加します。IFERROR()一致がない場合は空白を返すために を使用し、数式を簡単にコピーできるように絶対参照を使用します。

(ノルウェー語の Excel から数式を翻訳してみました)

=IFERROR(INDEX('Order list'!$C:$C,MATCH('Patient list'!$A2&" "&'Patient list'!B$1,'Order list'!$Y:$Y,0)),"")

Cは日付の列で、はYステップ 3 のキーがある場所です。

この記事が、テーブルに合わせたソリューションを見つけるための正しい道筋を示してくれることを願っています。おそらく、注文テーブルなどの数式を自動化できるでしょう。

注文:

注文表のスクリーンショット

患者:

患者テーブルのスクリーンショット

関連情報