2016-09-11 5 views
1

私はこのようなテーブルを持っています。実際の生活では、それは1000行以上あります。内部にフィルターとコンケナーが入ったARRAYFORMULA

 
Client | Group 
-------------- 
Merry | A 
Merry | C 
Susan | B 
Mike | C 
Susan | A 
Joe | A 
Tom | B 
Tom | C 

Googleフォームから入力されたすべてのクライアントのリストがあります。私は最初の行でarrayformulaだけを使用して、すべてのクライアントのグループでGroupカラムを埋めたい。私の所望の出力はこれです:まだ

 
Name | Groups 
---------------- 
Joe  | A 
Tom  | B, C 
Mike | C 
Merry | A, C 
Susan | A, B 
Peter | 

私の最高の結果がこれです:それは私が何をしたいんよう

 
Name | Groups | | | | | | | | 
---------------------------------------------- 
Joe  |  | | | | | A | | | 
Tom  |  | | | | | | B | C | 
Mike |  | | | C | | | | | 
Merry | A | C | | | | | | | 
Susan |  | | B | | A | | | | 
Peter |  | | | | | | | | 

は見えますが、私は1つに、すべてのこれらの列に参加することはできません。式は次のとおりです。

= ARRAYFORMULA( "">名前<(IF; IF(名前= TRANSPOSE(FILTER(クライアント、LEN(クライアント))); TRANSPOSE(FILTER(グループ; LEN(グループ))); );))

"name"、 "client"、 "group"を列ヘッダーに従って名前付き範囲として使用しました。 「最良の結果は」この時点でリンクされたスプレッドシートにH3:O8上にあることを考えると https://docs.google.com/spreadsheets/d/1VFnmyDTQhlCaANAvkzLgzKRKchPsGzFn4hDZYOoJF_M/edit?usp=sharing

+0

代わりの編集とGoogleスプレッドシートスプレッドシートを共有します読者に元のスプレッドシートが表示されるようにするためにのみ、誰でも閲覧権限で共有してください。名前付き範囲は共有スプレッドシートに設定されていません。 –

+0

あなたのソリューションは素晴らしいです、私はあなたの数式と鉱山を組み合わせることができ、大きなデータセットであっても1つの数式セルで所望の結果を得ることができます。グループ名にスペースが含まれていると、エレガントな回避策がありますか?この場合、数式はすべてのスペースをコンマで置き換えます。追加のタブですべてのグループ名に区切り記号を追加することで解決できますが、それほど醜いです。 –

+0

グループ名にスペースがある場合は、&演算子を使用して区切り記号を連結します。さらに詳しい情報が必要な場合は、新しい質問としてフォローアップの質問を投稿してください。 –

答えて

0

サンプルシートはこちら(表示のみ)です。

以下の式は、所望の結果を返す:

=ArrayFormula(substitute(transpose(trim(query(transpose(H3:O8);"select *";ROWS(A:A))));" ";",")) 

説明

QUERYは、空白文字で区切った行の値を連結します。上記の式では、この機能を使用してOPまでに得られた結果を連結し、TRIMを使用して余分なスペースを削除し、SUBSTITUTEを使用して残りのスペースをカンマで置き換えます。ルベンのソリューションに加えて

+0

私は期待どおりに動作します、ありがとう!最後の式は です。 '= ArrayFormula(transpose(trim(query)(トランスフォーム(配列) "select *"; ROWS(クライアント))))))))))) –

1

、また

=arrayformula(regexreplace({ unique(A3:A), trim(transpose(query(if((transpose(unique(A3:A)) = A3:A) * len(A3:A), B3:B & ",",), "select *", 50000))) }, ",$", "")) 

注意してみてください:あなたにロケールによっては、あなたの代わりにこの数式を使用する必要がある場合があります

=arrayformula(regexreplace({ unique(A3:A)\ trim(transpose(query(if((transpose(unique(A3:A)) = A3:A) * len(A3:A); B3:B & ",";); "select *"; 50000))) }; ",$"; "")) 
+1

ありがとうJPV!あなたの公式は私に良いレポートを与えますが、私の状況では名前の列は一定で、私はグループの列に触れることができます。 ARRAYFORMULAの高度な使い方については、どこで私に指示を与えることができますか?私は私の問題の解決策を見つけましたが、ARRAYFORMULA内でROWSまたはLEN関数を使用して、私の心を包み込むことはできません。 –

関連する問題