Excel で、コンマ区切りリストと参照列間の一致の数をどのようにカウントしますか?

Excel で、コンマ区切りリストと参照列間の一致の数をどのようにカウントしますか?

カンマで区切られた一連の数字があります。各セットは、プロジェクトに関連する一連の一意の数字を表します。リスト内の任意の数の項目を参照シートで検索し、ハードコードされた値を返す数式を作成するにはどうすればよいでしょうか。

以下に各シートの例(匿名化)を示します(表1-5)と意図した/期待される出力。SUM、FREQUENCY、INDEX、またはその他の配列数式と関係があると思いますが、わかりません。私の質問を参照してください。ここもありますが、ほぼ同じ情報があります。

私は「お尻" "ail"と"「issing」ですが、何でも大丈夫です。

論理:

数式では次の手順を実行する必要があります。

  1. C列の各セルから数字のリストを抽出します。表4
  2. 検索表3(列D)でリスト内の数字のインスタンスを探します。2b
    . リスト内の数字が表示された場合は、監査が失敗したかどうかを確認します(列Bに「失敗」というテキストで示されます)。表32c .
    あれば、印刷する2d .
    そうでなければ印刷する
  3. リストに数字がない場合は印刷する

表:

表1

この表はメインの参照シートです。名前、サーバー、プロジェクトに対するすべての UID がリストされます。

 Unique ID     Name         Server Address     Project
 10000         Company 1    Server 1           Project 1
 10001         Company 2    Server 2           Project 2
 10002         Company 3    Server 3           Project 3
 10003         Company 3    Server 3           Project 4
 10004         Company 3    Server 3           Project 5
 10005         Company 3    Server 3           Project 6
 10006         Company 4    Server 4           Project 7
 10007         Company 4    Server 4           Project 7
 10008         Company 4    Server 4           Project 7
 10009         Company 5    Server 5           Project 8
 10010         Company 6    Server 6           Project 9
 10011         Company 7    Server 7           Project 10
 10012         Company 8    Server 8           Project 11
 10013         Company 8    Server 8           Project 11
 10014         Company 8    Server 8           Project 11
 10015         Company 8    Server 8           Project 11
 10016         Company 8    Server 8           Project 11
 10017         Company 8    Server 8           Project 11
 10018         Company 8    Server 8           Project 11
 10019         Company 8    Server 8           Project 11
 10020         Company 8    Server 8           Project 11
 10021         Company 9    Server 9           Project 12
 10022         Company 10   Server 10          Project 13
 10023         Company 11   Server 10          Project 14
 10024         Company 12   Server 10          Project 15
 10025         Company 13   Server 10          Project 16
 10026         Company 14   Server 10          Project 17
 10027         Company 15   Server 10          Project 18
 10028         Company 16   Server 10          Project 19
 10029         Company 17   Server 10          Project 20
 10030         Company 18   Server 10          Project 21
 10032         Company 19   Server 10          Project 23
 10033         Company 19   Server 10          Project 24

表2

この表には、表1ただし、各 UID をそれぞれのプロジェクトにグループ化します。現在実際には使用していませんが、役立つかもしれません。役に立たない場合は削除します。

 Company Trading Name     Project     UID     UID     UID     UID
 Company 1                Project 1   10000
 Company 2                Project 2   10001
 -----------------------------------------------------
 Company 4                Project 7   10006   10007   10008

表3

このテーブルには監査結果が貼り付けられます。監査結果はこのレイアウトに正確に従っており、監査が不合格の場合はメモの列に「不合格」という単語が表示され(条件付き書式で現在強調表示されています)、UIDは単純なLEFT関数によって抽出されます。名前と会社の列では、UIDに対してVLOOKUPが使用されます。表1名前/サーバーを取得します。

Notes                                   Time Rec.      UID     Name        Server
Audit for company passed:10001          auto           10001   Company 2   Server 2  
Audit for company passed:10006          auto           10006   Company 4   Server 4
Audit for company failed:10007          auto           10007   Company 4   Server 4  

表4

これは監査シートです。数式は列 D に入力され、出力は各日の値としてコピー/貼り付けされます。ここでは、その後の外観の例をいくつか記入しました。

 Server     Name         Project (UID)                          Today's Date
 Server 1   Company 1    Project 1 (10000)                       P
 Server 2   Company 2    Project 2 (10001)                       N
 Server 3   Company 3    Project 3 (10002,10003,10004,10005)     F
 Server 4   Company 4    Project 4 (10006,10007,10008)           P
 -----------------------------------------------------
 Server 10  Company 10  Project 13 (10022)                       P
 Server 10  Company 11  Project 14 (10023)                       M
 Server 10  Company 12  Project 15 (10024)                       P
 Server 10  Company 13  Project 16 (10025)                       P
 Server 10  Company 15  Project 18 (10027)                       F
 Server 10  Company 16  Project 19 (10028)                       P
 Server 10  Company 17  Project 20 (10029)                       M
 Server 10  Company 18  Project 21 (10030)                       P
 Server 10  Company 19  Project 22 (100310)                      P
 Server 10  Company 19  Project 23 (10032)                       P
 Server 10  Company 19  Project 24 (10033)                       M

あるいは5番目のテーブルがあります。表5、不足しているIDを自動的に検索します表3次の式を使用します。

=INDEX(Reference!$A$2:$A$160, SMALL(IF(ISERROR(MATCH(Reference!$A$2:$A$160, Check!$D$2:$D$350, 0)), (ROW(Reference!$A$2:$A$160)-MIN(ROW(Reference!$A$2:$A$160))+1), ""), ROWS($A$1:A1)))

いつ表3空の場合(毎日クリアされます)、すべてのプロジェクトがリストされます。任意の数の監査を貼り付けると、表3しかし、リストには表5どれが不足しているかを表示するように更新されます。おそらく、これを最終的な数式に組み込む方法があるかもしれません。

ご希望の方がいらっしゃれば、匿名化されたバージョンもございます。

ありがとう。

編集1: 誰かがシステムの詳細を要求しました。これは、Excel 365 を使用している Windows 10 環境です。

答え1

私は、あまりスケーラブルではない、いくつかのヘルパー列を使用するアプローチをまとめようとしました。カンマで区切られた値を一度に検索する直接的な方法があるかどうかはよくわかりません。可能かもしれませんが、私は Excel の専門家ではありません。

さらに、Office 365 デスクトップ バージョンは VBA マクロをサポートしていると思います。デスクトップ バージョンをお持ちの場合は、より合理化された VBA マクロ ソリューションを選択できます。ただし、オンライン バージョンではマクロはサポートされていないと思います。

下のスナップショットをご覧ください。

ここに画像の説明を入力してください

ヘルパー列は 5 つあります。H、M、N、O、P。H はオプションですが、サーバー名の最後の文字が Server 1、Server 2 のように数字であるとは限らないため、単純な数字シーケンスを使用することをお勧めします。

M4 に次の数式を入力して下にドラッグします。

=SUBSTITUTE(RIGHT(K4,LEN(K4)-FIND("(",K4)),")","")

これにより、適切なカンマ区切りのUIDリストが作成されます。

N4 に次の数式を入力し、暫定的なセル数まで下にドラッグします。表示するものがない場合はセルの内容は空白になりますが、UID の数は変化する可能性があるため、後でプロビジョニングできるように下に拡張します。

=VALUE(TRIM(MID(SUBSTITUTE(TEXTJOIN(",",TRUE,$M$4:$M$22),",",REPT(" ",99)),(ROW(1:1)-1)*99+1,99)))

O4に次の数式を入力して下にドラッグします。

=IF(ISNUMBER(VALUE(N4)),MATCH("*"&N4&"*",$M$4:$M$22,0),"")

これは、後で使用される UID の位置をリストします。

P4に次の数式を入力して下にドラッグします。

=IF(ISNUMBER(VALUE(N4)),IF(ISNUMBER(FIND("passed",INDEX($B$4:$B$22,MATCH(VALUE(N4),$D$4:$D$22,0)))),"P",IF(ISNUMBER(FIND("failed",INDEX($B$4:$B$22,MATCH(VALUE(N4),$D$4:$D$22,0)))),"F","M")),"")

これにより、表 4 の各 UID のステータスが決定されます。

さて、私の例では出力列 L です。

L4に次の数式を入力して下にドラッグします。

=IF(COUNTIFS($O$4:$O$22,H4,$P$4:$P$22,"M")=COUNTIF($O$4:$O$22,H4),"M",IF(COUNTIFS($O$4:$O$22,H4,$P$4:$P$22,"P")+COUNTIFS($O$4:$O$22,H4,$P$4:$P$22,"M")=COUNTIF($O$4:$O$22,H4),"P","F"))

これにより、ヘルパー列の転置されたリストに基づいて監査ステータスの合格、不合格、または欠落を決定する最終ロジックが適用されます。

これらのデータ セットを Excel テーブルに変換し、Table[Header] 参照を使用してより動的にすることができます。

試してみて、これが役に立つかどうか判断してください。いくつかのヘルパー列を使用するので、それほど優れているわけではないことは承知しています。アイデアは、コンマ区切りのリストを連続したセルに転置し、ルックアップを適用することです。

関連情報