見出し画像

夏季休業中の勤務態様表をスプレッドシートで一覧表示!日直の電話対応や学校日誌記入を効率化します

夏季休業中の勤務態様一覧表スプレッドシート作成と関数解説

 夏季休業中の勤務態様を一覧表示することで、日直の電話対応や学校日誌の記入を効率化するためのスプレッドシート作成について解説します。50人分の個人の予定表シートがあり、それぞれのシートには午前と午後の予定、研修・出張・職免等の用務名と用務先が記入されていることを前提とします。


作成する一覧表

  1. 日付別勤務一覧表: 縦軸に7月21日から8月31日までの日付、横軸に個人の午前と午後の予定を表示します。

  2. 個人別勤務一覧表: 縦軸に個人名、横軸に7月21日から8月31日までの日付、午前と午後の予定を表示します。

  3. 日直用職員動向一覧表:日付を選択し、その日の職員の動向が表示されます。

スプレッドシートの構成

  • 個人別予定表シート: 50人分のシート。シート名は「1」「2」…「50」のように連番で管理します。各シートのC6:D47の範囲に、日付ごとの午前の予定がC列、午後の予定がD列に記入されているとします。

  • 日付別勤務一覧表シート: 日付別に個人の予定を表示するシート

  • 個人別勤務一覧表シート: 個人別に日付ごとの予定を表示するシート

  • 日直用職員動向一覧表:選択した日付の職員の動向を表示するシート

各一覧表の作成と関数解説

1. 日付別勤務一覧表

この一覧表は、50個のシートから、日付ごとの午前と午後の個人の予定が横方向に一覧表示されます。

氏名はAIによって作成された架空のものです

数式:C4のセルにこの関数を一つ入れるだけで、一覧表が完成します

=REDUCE(TOROW(,1),SEQUENCE(1, 50),
LAMBDA(pv,cv, HSTACK(pv,INDIRECT(cv & "!C6:D47"))))

関数の目的:

この関数の目的は、Excelの複数のシート(シート名は "1", "2", "3"... "50")に存在する特定の範囲のデータ(C6:D47)を、1つのシートに横方向に連結して表示することです。つまり、各シートのC6:D47のデータが、1つのシートの連続した列に並べられます。

関数の構成要素と解説:

  1. `TOROW(,1)`:

    • `TOROW`関数は、配列や範囲を1行に変換する関数です。

    • `,1` は、空の行を作成するための引数です。`REDUCE`関数の初期値として使用され、ここに各シートのデータが追加されていきます。

  2. `SEQUENCE(1, 50)`:

    • `SEQUENCE`関数は、指定された開始値から指定された個数の連番を生成する関数です。

    • `1, 50` は、1から50までの連番を生成することを意味します。この連番は、シート名として使用されます。

  3. `LAMBDA(pv, cv, HSTACK(pv, INDIRECT(cv & "!C6:D47")))`:

    • `LAMBDA`関数は、無名関数を定義するための関数です。

    • `pv`: 累積された結果(前のLAMBDA関数の結果)。初期値は`TOROW(,1)`で作成された空の行です。

    • `cv`: 現在の連番の値(1から50)。

    • `HSTACK(pv, INDIRECT(cv & "!C6:D47"))`:

      • `INDIRECT(cv & "!C6:D47")`: `INDIRECT`関数は、文字列をセルの参照として解釈する関数です。この部分では、現在の連番`cv`をシート名として、C6:D47の範囲を参照します。例えば、`cv`が1の場合、`INDIRECT("1!C6:D47")`となり、シート "1" のC6:D47の範囲を参照します。

      • `HSTACK(pv, ...)`: `HSTACK`関数は、配列や範囲を横方向に連結する関数です。この部分では、前の累積結果`pv`と、現在のシートから抽出したC6:D47のデータを横に結合します。

処理の流れ:

  1. `SEQUENCE(1, 50)`で1から50までの連番が生成されます。

  2. `REDUCE`関数が開始され、初期値として`TOROW(,1)`で作成された空の行が設定されます。

  3. `REDUCE`関数は、連番の各値(1から50)に対して、`LAMBDA`関数を繰り返し適用します。

  4. `LAMBDA`関数では、現在の連番をシート名として、`INDIRECT`関数を使ってC6:D47の範囲を参照します。

  5. `HSTACK`関数を使って、前の累積結果と現在のシートから抽出したC6:D47のデータを横に結合します。

  6. `REDUCE`関数は、すべての連番に対して`LAMBDA`関数を適用し終えると、最終的な累積結果を返します。

  7. 最終的な累積結果として、すべてのシートのC6:D47のデータが横方向に連結されたデータが表示されます。

前提条件:

  • シート名が "1", "2", "3"... "50" と連番で付けられていること。

  • 各シートにC6:D47の範囲にデータが存在すること。

この関数は、複数のシートからデータを効率的に収集し、1つのシートにまとめて表示するための便利なツールです。シート名が連番で付けられているという前提条件がありますが、その条件下では非常に強力な関数です。

2. 個人別勤務一覧表

この一覧表は、特定の個人がいつどのような予定が入っているかを把握するのに役立ちます。

氏名はAIによって作成された架空のものです

数式:C4のセルにこの関数を一つ入れるだけで、一覧表が完成します

=MAP(A4:A53,
LAMBDA(_v,
TOROW(indirect(_v&"!C6:D42"))
)
)

関数の目的:

この関数は、指定された個人名の番号(A4:A53)に基づいて、各個人のシートから特定の範囲(C6:D42)のデータを抽出し、横方向に連結して一覧表示することを目的としています。

関数の構成要素と解説:

  1. `MAP(array1, lambda_function)`

    • `MAP` 関数は、指定された配列(`array1`)の各要素に対して、指定されたラムダ関数(`lambda_function`)を適用し、その結果を新しい配列として返します。

    • `array1`: この場合は、`A4:A53` で指定されるセル範囲です。この範囲には、個人名の番号(シート名)がリストとして入力されていることを想定しています。

    • `lambda_function`: この場合は、`LAMBDA(_v, ...)` で定義されるラムダ関数です。

  2. `LAMBDA(_v, TOROW(INDIRECT(_v&"!C6:D42")))`

    • `LAMBDA` 関数は、無名関数(名前のない関数)を定義します。

    • `v`: `MAP` 関数によって渡される、現在の配列要素(この場合は、A4:A53 のセルに入力された個人名番号(シート名)です。アンダースコア `` で始まる変数は、慣例的に「使用しない変数」または「重要でない変数」を示すために使われることがありますが、この場合は `INDIRECT` 関数内で使用されているため、実際には重要な変数です。

    • `TOROW(INDIRECT(_v&"!C6:D42"))`: この部分が、実際にデータを抽出して横方向に連結する処理を行います。

  3. `INDIRECT(_v&"!C6:D42")`

    • `INDIRECT` 関数は、文字列で指定されたセル範囲を参照します。

    • `_v&"!C6:D42"`: `_v`(個人名またはシート名)とセル範囲 "!C6:D42" を連結して、参照するセル範囲の文字列を作成します。例えば、`_v` が "1" の場合、`INDIRECT("1!C6:D42")` となり、"1" というシートのセル範囲 C6:D42 を参照します。

    • この関数は、指定された個人(シート)の C6:D42 の範囲にあるデータを配列として返します。

  4. `TOROW(...)`

    • `TOROW` 関数は、指定された配列または範囲を1行の配列に変換します。

    • `INDIRECT` 関数が返す配列(C6:D42 の範囲のデータ)を、横方向に連結して1行の配列にします。これにより、各個人のデータが横方向に並んだ一覧が作成されます。

処理の流れ:

  1. `MAP` 関数は、`A4:A53` のセル範囲にある各個人名番号(シート名)に対して、ラムダ関数を適用します。

  2. ラムダ関数は、与えられた個人名番号 `_v` を使って、以下の処理を行います。

    • `INDIRECT` 関数を使って、`_v` という名前のシートのセル範囲 C6:D42 を参照します。

    • `TOROW` 関数を使って、参照されたセル範囲のデータを横方向に連結して1行の配列にします。

  3. `MAP` 関数は、ラムダ関数の結果(各個人の横方向に連結されたデータ)を縦方向に並べた配列を返します。

前提条件:

  • `A4:A53` のセル範囲に、個人名番号(シート名)がリストとして入力されていること。

  • 各個人名番号(シート名)に対応するシートが存在し、そのシートに "C6:D42" の範囲にデータが存在すること。

  • C6:D42 の範囲には、一覧表示したいデータが適切に入力されていること。

  • 各行のデータは、日付順に並んでいることが望ましいです(一覧表の可読性を高めるため)。

この関数によって、指定された個人名番号に基づいて、各個人のシートから抽出されたデータが横方向に連結され、個人別の一覧表が作成されます。

3. 職員動向一覧表

日直用のシートで日付を選択すると、その日付に対応する職員の動向が一覧表で表示されます。

関数の目的:
この関数は、日直用のシートで、日付をダブルクリックでカレンダーから選択すると、その日付に対応する職員の動向を一覧表で表示することを目的としています。職員の動向は、別のシート(ここではシート名が "1")に日付と職員の動向が記録されていることを前提としています。

数式:D5のセルにこの関数を一つ入れるだけで、一覧表が完成します

= LET(r,
xmatch($C$2,'1'!A:A),
MAP(B5:B54,
LAMBDA(v,
indirect(v&JOIN(r,"!C",":G",""))
)
)
)

関数の構成要素と解説:

  1. `LET(name1, value1, name2, value2, ..., expression)`

    • `LET` 関数は、数式内で使用する変数に名前を付けて値を割り当てることで、数式をより読みやすく、管理しやすくします。

    • `name1, value1`: 変数名とその値を定義します。

    • `expression`: 定義された変数を使って計算を行う式です。

  2. `r, XMATCH($C$2,'1'!A:A)`

    • `r`: 変数名。この変数には、日付が一致する行番号が格納されます。

    • `XMATCH($C$2,'1'!A:A)`: `XMATCH` 関数は、指定された値が配列内で最初に見つかる位置を返します。

      • `$C$2`: 検索値。このセルには、カレンダーから選択された日付が入力されていることを想定しています。`$` 記号は、セル参照を絶対参照にするために使用されています。

      • `'1'!A:A`: 検索範囲。シート名が "1" の A列全体を検索範囲として指定しています。この列には、日付がリストとして入力されていることを想定しています。

      • `XMATCH` 関数は、`$C$2` の日付が `'1'!A:A` の範囲内で最初に見つかる行番号を返します。この行番号が変数 `r` に格納されます。

  3. `MAP(B5:B54, LAMBDA(v, INDIRECT(v&JOIN(r,"!C",":G",""))))`

    • `MAP` 関数は、指定された配列(`B5:B54`)の各要素に対して、指定されたラムダ関数(`LAMBDA(v, ...)`)を適用し、その結果を新しい配列として返します。

    • `B5:B54`: 配列。この範囲には、個人名の番号(シート名)がリストとして入力されていることを想定しています。

    • `LAMBDA(v, INDIRECT(v&JOIN(r,"!C",":G","")))`: ラムダ関数。

  4. `LAMBDA(v, INDIRECT(v&JOIN(r,"!C",":G","")))`

    • `LAMBDA` 関数は、無名関数(名前のない関数)を定義します。

    • `v`: `MAP` 関数によって渡される、現在の配列要素(この場合は、`B5:B54` のセルに入力された個人名の番号(シート名)です。

    • `INDIRECT(v&JOIN(r,"!C",":G",""))`: この部分が、実際に職員の動向を抽出する処理を行います。

  5. `JOIN(r,"!C",":G","")`

    • `JOIN` 関数は、複数の文字列を連結して1つの文字列にします。

    • `r`: `XMATCH` 関数で取得した行番号(日付が一致する行番号)です。

    • `"!C"`: 文字列。シート名、"!"、"C" を連結します。

    • `":G"`: 文字列。":" と "G" を連結します。

    • `""`: 区切り文字。ここでは区切り文字を指定しないため、空文字列 "" を指定します。

    • `JOIN` 関数は、これらの文字列を連結して、参照するセル範囲の文字列を作成します。例えば、`r` が 10 の場合、`JOIN(r,"!C",":G","")` は `"!C10:G"` という文字列を返します。

  6. `INDIRECT(v&JOIN(r,"!C",":G",""))`

    • `INDIRECT` 関数は、文字列で指定されたセル範囲を参照します。

    • `v&JOIN(r,"!C",":G","")`: 個人名の番号(シート名)`v` と、`JOIN` 関数で作成されたセル範囲の文字列を連結します。例えば、`v` が "1" で、`JOIN(r,"!C",":G","")` が `"!C10:G"` の場合、`INDIRECT("1!C10:G")` となり、シート "1" の 10行目の C列からG列までの範囲を参照します。

    • `INDIRECT` 関数は、指定されたセル範囲の値を返します。

処理の流れ:

  1. `XMATCH` 関数は、`$C$2` に入力された日付が、シート "1" の A列で最初に見つかる行番号を検索し、変数 `r` に格納します。

  2. `MAP` 関数は、`B5:B54` のセル範囲にある個人名の番号(シート名)に対して、ラムダ関数を適用します。

  3. ラムダ関数は、与えられた個人名の番号(シート名) `v` を使って、以下の処理を行います。

    • `JOIN` 関数を使って、`r`(日付が一致する行番号)とセル範囲の文字列を連結して、参照するセル範囲の文字列を作成します。

    • `INDIRECT` 関数を使って、作成されたセル範囲の文字列に基づいて、職員の動向を抽出します。

  4. `MAP` 関数は、ラムダ関数の結果(各職員の動向)を縦方向に並べた配列を返します。

前提条件:

  • シート名が "1" のシートの A列に、日付がリストとして入力されていること。

  • `$C$2` のセルに、カレンダーから選択された日付が入力されること。

  • `B5:B54` のセル範囲に、個人名の番号(シート名)がリストとして入力されていること。

  • 各職員のシートが存在し、シート名が個人名の番号(シート名)と一致すること。

  • 各職員のシートの、日付が一致する行の C列からG列に、職員の動向が記録されていること。

この関数によって、日直用のシートで日付を選択すると、その日付に対応する職員の動向が一覧表で表示されます。

4.共有データのリンク:

夏季休業中職員勤務態様表のスプレッドシート

コピーを作成するをクリックすると、マイドライブに保存されます

免責事項

  • 私が投稿したデータについて、ダウンロードや使用に許可は不要です。

  • 各学校内で共有していただくことは構いませんが、SNSやHPなどでのインターネット上での再配布(改変しての再配布含む)はご遠慮ください。

まとめ:夏季休業中の勤務態様一覧表作成と日直業務効率化

夏季休業中の学校運営を円滑に進めるためには、教職員の勤務状況を把握し、日直業務を効率化することが重要です。本稿では、以下の2つの勤務態様一覧表を作成し、日直業務を支援する方法について解説しました。

  1. 日付別勤務一覧表: 特定の日付に誰がどのような予定が入っているかを一目で把握できます。

  2. 個人別勤務一覧表: 特定の教職員がいつどのような予定が入っているかを把握できます。

  3. 日直用職員動向一覧表:日付を選択し、その日の職員の動向が把握できます。

これらの表は、Google スプレッドシート上で、`LET`、`MAP`、`SEQUENCE`、`INDIRECT`、`XMATCH`、`JOIN` などの関数を組み合わせることで実現可能です。特に、`INDIRECT` 関数は、シート名やセル範囲を文字列として動的に指定できるため、複数のシートからデータを集計する際に非常に強力なツールとなります。

日直業務においては、カレンダーから日付を選択するだけで、その日の教職員の動向が一覧表示されるように工夫することで、電話対応や来客対応、学校日誌の記入などを大幅に効率化できます。

ただし、`INDIRECT` 関数は計算負荷が高くなる傾向があるため、シート数やデータ量が多い場合は、パフォーマンスに注意が必要です。必要に応じて、より効率的な関数や数式構造への見直しを検討してください。

本稿で解説した内容を参考に、各学校の状況に合わせてスプレッドシートをカスタマイズすることで、夏季休業中の日直業務をよりスムーズに進め、教職員の負担軽減に繋げることが期待できます。



いいなと思ったら応援しよう!

カフロイ@ICT支援の杜 よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!