カスタムデータ転置?


7

学生/メンターで構成されるグループのエクスポートを持っています。グループの全員が生徒でありメンターでもあります。メンターが割り当てられた学生ではなく、メンターが割り当てられた学生になるようにデータを変換する必要があります。

ソフトウェアは、生徒の名前とその生徒に割り当てられたメンターを含むシートの5つの列などのエクスポートを提供します。

ID Numbers of Students | Students | Mentor 1 | Mentor 2 | Mentor 3

1列のメンターと次のような対応する生徒とデータを参照するためのシートが必要です。

ID Numbers of Mentors | Mentors | Student 1 | Student 2 | Student 3 | Student 4

学生はメンターであり、メンターは学生です-それは同じ名前のセットです。メンターには最大4人の生徒が割り当てられます。メンターごとに1行のみ。

私は考えているのQUERY()かもしれませんARRAYFORMULA()が、割り当てられた使用法VLOOKUP()FILTER()を使用できませんでしたARRAYFORMULA()。私はそれでどこにも行きません。

説明されているようにデータを転置するには、どのGoogleスプレッドシートの数式を使用しますか?例を提供できますか?私はカスタム関数を受け入れますが、これは確かに既存のツールで実行できます。


ドキュメントを共有して、期待される結果を示してみませんか?
Jacob Jan Tuinstra 2013年

1
こんにちはジェイコブ。架空の例を次に示します。docs.google.com
Tom

回答:


4

例を使用すると、この式は行2で使用できます。

=TRANSPOSE(FILTER(B$2:B;MMULT(C$2:E=B2;TRANSPOSE(SIGN(COLUMN(C$2:E$2))))))

ただし、必要に応じて記入する必要があります。うまくいけば、参照を実際のデータに適合させることができますが、これが問題である場合はコメントしてください。

MMULTの使用法

データセット全体を自動的に入力する単一の数式が必要な場合、これはネイティブ関数で実行できますが、恐ろしく複雑で非常に非効率的です。単一の数式ソリューションが必要な場合は、カスタム関数をお勧めします。


甘い、答えをありがとうAdamL。単一の数式を探していましたが、そのように指定しませんでした。私はそれに順応するのに十分にそれに従っていない。サンプルシートを見ると、式はいくらか冗長であり続けます。それをチェックして説明できますか?これは、expand()ラッパーで機能しますか?
トム

行22に数式を挿入したため、現状の数式は正しく参照されません。F22の式はになります =TRANSPOSE(FILTER(B$22:B;MMULT(C$22:E=B22;TRANSPOSE(SIGN(COLUMN(C$2:E$2))))))
AdamL 2013年

最後に、AdamLのソリューションを使用できない理由を理解しました。C$ 2:Eの一部のセルには、式を完全に破壊する末尾または先頭の空白がありました。空白が削除されると、期待どおりに機能しました。AdamLに感謝します。
Tom

0

これは、Googleドキュメントのカスタム関数で実行できると思います。私は次のような関数を書きました:

  1. テーブルをスキャンして一意のメンターを探し、配列に保存します
  2. 見つかったメンターごとに、生徒を読んでメンター名の後ろの配列に保存します
  3. データを新しいシートに印刷します(データは基本的に配列の配列です)

そのため、元のテーブルのすべての行が異なる列数を持つことができます。

前提条件は次のとおりです。

  • 生徒がいる元のテーブルは「生徒」と呼ばれるシート上にある必要があります
  • 生徒がいる元のテーブルは、例と同じレイアウトでなければなりません(または、コードでスキャンするために開始行と列を編集する必要があります)。シートにこれ以上の情報を含めることはできません。そうしないと、スクリプトが壊れます。
  • 同じスプレッドシートで、新しいクリーンシート(「メンター」など)を作成する必要があり、結果が印刷されます。

テストしたサンプルスプレッドシートを参照してください。

残念ながら、Googleは私のコードを確認するのに少し時間がかかったため、Google Apps Scriptで簡単にコードを共有することはできません。ただし、pastebin:http : //pastebin.com/0hFMhC8eからコピーして、独自のカスタム関数を作成できます。(データを含む)スプレッドシートに移動し、新しいクリーンシートを作成し、[ ツール] > [ スクリプトマネージャー] > [ 新規]に移動し、新しいウィンドウで左側のスプレッドシートのリストから選択して、サンプルコードを削除し、コードをペーストビンからコピーして貼り付けます、新しい関数に「transposeColumns」という名前を付けて保存します。次に、スプ​​レッドシートとスクリプトマネージャーを開いた状態でウィンドウ/タブに移動します。ヒットリロードマネージャのボタンを、あなたはそこにあなたに新しい機能が表示されるはずです。だからそれを選んでヒットを実行します。スクリプトがGoogle Drive APIにアクセスするための許可を求められます。提出してください。これで、「学生」というシートからデータが自動的に取得され、現在のアクティブなシートに置き換えられます。権限の送信後に何も実行しない場合は、スクリプトを再実行してみてください。

次のようないくつかの問題があります:学生IDはどうでしょうか。これをスクリプトに簡単に追加して、コピーすることもできます。スクリプト自体は、possilbeと同じくらい単純なJavaScriptで記述されています。最適化できると思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.