私は、授業が行われる時間、講師が誰であるか、どの年齢層が教えられているか、それがどのような科目であるかに関するすべての情報を含む大きなテーブルを検索することで、授業の時間割を動的に作成しようとしています。
FILTER
とQUERY
の組み合わせを使用して、すべての情報を生成できます。以下は、どのように表示したいか、どのように出力したいかです。
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
これは良いですが完璧ではありません。理想的なシナリオは、FILTER
とQUERY
によって生成された各行を、間に改行を入れて1つのセルに動的に連結できることです。
次の数式は、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)、 ":"))