web-dev-qa-db-ja.com

Googleスプレッドシートで動的配列の要素を参照するにはどうすればよいですか?

私は、授業が行われる時間、講師が誰であるか、どの年齢層が教えられているか、それがどのような科目であるかに関するすべての情報を含む大きなテーブルを検索することで、授業の時間割を動的に作成しようとしています。

FILTERQUERYの組み合わせを使用して、すべての情報を生成できます。以下は、どのように表示したいか、どのように出力したいかです。

enter image description here

JOINを使用してすべての情報を1つのセルにグループ化し、改行区切り文字を使用してそれらを分割できますが、配列内の各項目を好きなように配置できません。たとえば、1行に複数のフィールドを配置したり、QUERYの結果に基づいて条件付きロジックを適用したりできるように、セルを動的に連結したいと考えています。たとえば、1つの列が空白の場合は、IFステートメントを使用して省略します。

私が知る必要があるのは、クエリに基づいて配列を作成する方法です。次に、同じ数式行で、その配列内の個々の要素を参照します。したがって、IF(ThisArray[0]<>"", ThisArray[0] & ThisArray[1])などのようになります。

これは私が現在使用している式です:

=JOIN(CHAR(10), QUERY(FILTER('Timetable'!$B$2:$R$620, 'Timetable'!$B$2:$B$620=B$3, 'Timetable'!$J$2:$J$620=$A4, 'Timetable'!$H$2:$H$620=$A$3), "SELECT Col13, Col15, Col14, Col5"))

これを行う方法はありますか?

編集:私はTEXTJOIN式を発見しました。これは、特に2D配列を結合できるため、現在のソリューションよりも優れています。したがって、同じセルに複数のレッスンを保存できます。ただし、読みやすくするために行の間に余分な改行を入れる方法が見つからないため、次のように生成されます。

Philosophy
16-17
John Smith
English Language
13-15
Jane Doe

これは良いですが完璧ではありません。理想的なシナリオは、FILTERQUERYによって生成された各行を、間に改行を入れて1つのセルに動的に連結できることです。

1
Lou

次の数式は、OPクエリの数式を取り、3番目と4番目の列の間に値「:」を持つ追加の列を挿入します。次に、外側のQUERYは1つの列のすべての列を破壊し、すべての値に一意の文字♦を追加します。

次に、textjoinはすべてのデータをchar(10)>>で結合します。これは、セット間の空の行です。

次に、一連の正規表現置換が適用されて、最終出力の内部が微調整され、特殊文字が新しい行に置き換えられます。

中央の1つは、その前の「医学」の場合、新しい行を削除し、外側の1つは、各セットの2番目の行の問題を修正します。

= ARRAYFORMULA(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(TEXTJOIN(CHAR(10)、1、
 QUERY(TRANSPOSE( "♦"&QUERY(FILTER( 'Source table'!$ A $ 2:$ G $ 6、 'Source table '!$ A $ 2:$ A $ 6 = $ B3)、
 "select Col2、Col3、': '、Col4、Col5、Col6 label': '' '")), 999 ^ 99)) 、 "♦"、
 CHAR(10))、 "^"&CHAR(10)、)、 ""&CHAR(10)& ":"&CHAR(10)、 ":"))

0

1
user0