要約
「JOIN」関数で複数選択のドロップダウン列を結合する際に、一部の項目が抜けてしまうという問題が発生しています。これにより、正確な全参加地区数をカウントできなくなっています。
具体的な問題点としては、「JOIN」関数を使用すると、「All Districts」セルにすべての地区が連続したテキストとして表示され、個々の項目として認識されなくなることです。そのため、COUNTM関数が正しい数を取得できなくなっています。
現在、Smartsheetには複数のドロップダウンリストから構成リストを取得する関数がないため、いくつかの回避策が提案されています。例えば、テキスト関数(FIND、LEFT、MIDなど)を使用して個々の地区を抽出する方法や、別のシートや列を使って個別に抽出する方法があります。
これらのアプローチを試してみて、問題が解決するかどうか確認してください。
翻訳
質問
ステファニー・ラペラ ✭✭✭✭
参加地区をリストするドロップダウン列 (複数選択) があります。各行は異なるプログラムで、異なる地区が含まれる場合もあれば、地区が重複する場合もあります。参加した地区の数をカウントしようとしています。
別の列 (ドロップダウン – 複数選択) で、JOIN を使用してすべての地区を取得し、カウントできるようにしています。
列:
- 地区: プログラムごとの地区
- すべての地区: すべての地区を結合 (単一セル)
- 合計地区数: すべての地区の合計数 (単一セル)
すべての地区列の式: =JOIN([Districts:Districts, CHAR(10))
合計地区の式: =COUNTM([すべての地区]@row)
問題は、JOIN がすべての地区を取得していないことがわかっていることです。いくつかの地区が除外されているため、地区の合計値が不正確になります。
JOIN を分割して、一度にいくつかのセルだけを実行すると、問題なく動作し、何も見逃されません。しかし、すべてを一緒に実行しようとすると、なぜ一部の地区が結合から除外されるのかわかりません。すべてを 1 つにまとめる必要があるため、地区を複数回カウントしないようにします。これは、結合を小さなセルに分割すると発生します。
ご意見やご助力をいただければ幸いです。ありがとうございます!
タグ:
ベストアンサー
- jmyzk_cloudsmart_jp コミュニティチャンピオン
- 12/15/24 答え✓
- こんにちは@Stephanie Lapera
問題は、JOIN 関数を使用した後、「[すべての地区]」セルにすべての地区の値が範囲または個別の項目のセットではなく、単一のテキスト文字列として保持されることです。このため、COUNTM はセルの内容を個別の値として解釈せず、1 つの連続したテキストとして認識します。
残念ながら、Smartsheet には現在、複数のドロップダウン リストから構成リストの範囲を取得する機能があります。
ただし、試すことができる回避策がいくつかあります。
置換法
地区の値が「A、B、C、D」の場合、まず FIND、LEFT、MID などのテキスト関数を使用して A を検索します。
次に、SUBSITUTE 関数を使用して「B、C、D」を取得します。
同じテキスト関数を使用して B を取得します。
このプロセスを繰り返して、すべての要素を取得します。
以下に、このような方法を使用したソリューションの例を示します。スマートシート
- 数式は一番下に記載しておきます。
別のシート – FIND 関数メソッドを使用します。
もう 1 つの方法は、結合されたテキストを 1 つのセルに保存し、FIND 関数と MID 関数を利用して各地区を個別に抽出するヘルパー シート (または列) を使用することです。Excel と同様に、数式を下にドラッグすると、改行 (CHAR(10)) を識別して各地区名を独自のセルに分離できます。個々の地区の列ができたら、COUNT(DISTINCT(…)) を使用して一意の地区の数を返すことができます。
以下のデモ シートでは、シート サマリーの ALL Districts 値に、JOIN が別のシートの範囲を参照していることを除いて、同じ数式が使用されています。
=JOIN({地区}, CHAR(10))
Districts 列では、[Find CHAR(10)] 列の CHAR(10) 位置を使用して、MID 関数によって「All Districts」フィールドのすべての値が入力されます。
2 行目の数式は次のようになります。
=FIND(CHAR(10), [すべての地区]#)
=FIND(CHAR(10), [すべての地区]#, [CHAR(10)を検索]2 + 1)
=FIND(CHAR(10), [すべての地区]#, [CHAR(10)を検索]3 + 1)
=FIND(CHAR(10), [すべての地区]#, [CHAR(10)を検索]3 + 1)
この方法のメリットは、数式がセルの数式であるため、Excel と同じようにプルダウンして同じ構造の数式をコピーし、行の位置を変更できることです。
Districts 列の値を取得したら、COUNT(DISTINCT({range})) 関数を使用して数値を取得できます。
=COUNT(DISTINCT(地区:地区))スマートシート
- 置換法の式
注: [D0] は数式を短くするためのヘルパー列です。
[D0] =Districts@row
[D1] =IFERROR(MID([D0]@row, 1, FIND(CHAR(10), [D0]@row)), “”)
[D2] =IF(NOT(CONTAINS(CHAR(10), [D-1]@row)), [D-1]@row, MID([D-1]@row, 1, FIND(CHAR(10), [D-1]@row)))
[D3] =IF(NOT(CONTAINS(CHAR(10), [D-2]@row)), [D-2]@row, MID([D-2]@row, 1, FIND(CHAR(10), [D-2]@row)))
. . .
[D9] =IF(NOT(CONTAINS(CHAR(10), [D-8]@row)), [D-8]@row, MID([D-8]@row, 1, FIND(CHAR(10), [D-8]@row)))
[D10] =IF(NOT(CONTAINS(CHAR(10), [D-9]@row)), [D-9]@row, MID([D-9]@row, 1, FIND(CHAR(10), [D-9]@row)))
[D-1] =IFERROR(SUBSTITUTE([D0]@row, [D1]@row, “”), “”)
[D-2] =IFERROR(SUBSTITUTE([D-1]@row, [D2]@row, “”), “”)
[D-3] =IFERROR(SUBSTITUTE([D-2]@row, [D3]@row, “”), “”)
. . .
[D-9] =IFERROR(SUBSTITUTE([D-8]@row、[D9]@row, “”), “”)
[D-10] =IFERROR(SUBSTITUTE([D-9]@row、[D10]@row, “”), “”)
回答
- jmyzk_cloudsmart_jp コミュニティチャンピオン
- 12/15/24 答え✓
- こんにちは@Stephanie Lapera
問題は、JOIN 関数を使用した後、「[すべての地区]」セルにすべての地区の値が範囲または個別の項目のセットではなく、単一のテキスト文字列として保持されることです。このため、COUNTM はセルの内容を個別の値として解釈せず、1 つの連続したテキストとして認識します。
残念ながら、Smartsheet には現在、複数のドロップダウン リストから構成リストの範囲を取得する機能があります。
ただし、試すことができる回避策がいくつかあります。
置換法
地区の値が「A、B、C、D」の場合、まず FIND、LEFT、MID などのテキスト関数を使用して A を検索します。
次に、SUBSITUTE 関数を使用して「B、C、D」を取得します。
同じテキスト関数を使用して B を取得します。
このプロセスを繰り返して、すべての要素を取得します。
以下に、このような方法を使用したソリューションの例を示します。スマートシート
- 数式は一番下に記載しておきます。
別のシート – FIND 関数メソッドを使用します。
もう 1 つの方法は、結合されたテキストを 1 つのセルに保存し、FIND 関数と MID 関数を利用して各地区を個別に抽出するヘルパー シート (または列) を使用することです。Excel と同様に、数式を下にドラッグすると、改行 (CHAR(10)) を識別して各地区名を独自のセルに分離できます。個々の地区の列ができたら、COUNT(DISTINCT(…)) を使用して一意の地区の数を返すことができます。
以下のデモ シートでは、シート サマリーの ALL Districts 値に、JOIN が別のシートの範囲を参照していることを除いて、同じ数式が使用されています。
=JOIN({地区}, CHAR(10))
Districts 列では、[Find CHAR(10)] 列の CHAR(10) 位置を使用して、MID 関数によって「All Districts」フィールドのすべての値が入力されます。
2 行目の数式は次のようになります。
=FIND(CHAR(10), [すべての地区]#)
=FIND(CHAR(10), [すべての地区]#, [CHAR(10)を検索]2 + 1)
=FIND(CHAR(10), [すべての地区]#, [CHAR(10)を検索]3 + 1)
=FIND(CHAR(10), [すべての地区]#, [CHAR(10)を検索]3 + 1)
この方法のメリットは、数式がセルの数式であるため、Excel と同じようにプルダウンして同じ構造の数式をコピーし、行の位置を変更できることです。
Districts 列の値を取得したら、COUNT(DISTINCT({range})) 関数を使用して数値を取得できます。
=COUNT(DISTINCT(地区:地区))スマートシート
- 置換法の式
注: [D0] は数式を短くするためのヘルパー列です。
[D0] =Districts@row
[D1] =IFERROR(MID([D0]@row, 1, FIND(CHAR(10), [D0]@row)), “”)
[D2] =IF(NOT(CONTAINS(CHAR(10), [D-1]@row)), [D-1]@row, MID([D-1]@row, 1, FIND(CHAR(10), [D-1]@row)))
[D3] =IF(NOT(CONTAINS(CHAR(10), [D-2]@row)), [D-2]@row, MID([D-2]@row, 1, FIND(CHAR(10), [D-2]@row)))
. . .
[D9] =IF(NOT(CONTAINS(CHAR(10), [D-8]@row)), [D-8]@row, MID([D-8]@row, 1, FIND(CHAR(10), [D-8]@row)))
[D10] =IF(NOT(CONTAINS(CHAR(10), [D-9]@row)), [D-9]@row, MID([D-9]@row, 1, FIND(CHAR(10), [D-9]@row)))
[D-1] =IFERROR(SUBSTITUTE([D0]@row, [D1]@row, “”), “”)
[D-2] =IFERROR(SUBSTITUTE([D-1]@row, [D2]@row, “”), “”)
[D-3] =IFERROR(SUBSTITUTE([D-2]@row, [D3]@row, “”), “”)
. . .
[D-9] =IFERROR(SUBSTITUTE([D-8]@row、[D9]@row, “”), “”)
[D-10] =IFERROR(SUBSTITUTE([D-9]@row、[D10]@row, “”), “”) - ステファニー・ラペラ ✭✭✭✭
- 12/16/24
- ありがとうございます。これらのさまざまな方法を試して、効果があるかどうか確認してみます。
JOIN 関数と COUNTM 関数をうまく使ってきました。今年は、いくつかの地区を追加したときに、数式が正しく機能しなくなったようです。以前は、地区を 1 つのセルに正しく取り込み、カウントしていました。現在もそのように機能していますが、カウントが間違っています (おそらく 3 つか 4 つだけずれています)。
あなたの提案がうまくいくことを願っています。試してみる時間ができたら、フォローアップを投稿します。
再度、感謝します! - フマシャンカール ✭✭✭✭✭
- 12/16/24
- よく説明されています!
- jmyzk_cloudsmart_jp コミュニティチャンピオン
- 12/16/24
- @ステファニー・ラペラ
シートのコピーが必要な場合は、私のプロフィールページからメールでご連絡ください。