3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

もっと!ローコードアプリでシフト作成の時間を短縮したい|あざらしの野望

3
Last updated at Posted at 2026-07-09

紙文化とDX

c9646e07-d69a-4e96-bcd8-690918194eb6.png

いま最も時間がかかっている作業は、毎月のシフト作成だ。

紙文化が未だ根強い職場では、50人分の休み希望を紙で集計し、それを見ながら手打ちで転記して、作業の割り振りや人数を調整して……そんなこんなで午後がつぶれるので、担当者は他の仕事に手が回らないことも多い。

やっぱり、現場で一番負担になっていることを解決したい。
そこで今回は、紙文化が未だ根強い現場の課題解決のためのアプリを開発した。

といっても、いきなりシフト作成から作業割り振りまで実装するのは初心者には難しい。
まずはこれさえあれば!というものを作るため、内容は 「紙からExcelへの転記作業削減」 に絞って制作を行った。

参考:前回の制作

「おばちゃんデジタルとかよくわからないし、それよりも紙で早くもらえた方が嬉しい」――そんな現場の声を受けて開発。
PowerAppsに連絡事項を入力すると、Excelに用意したテンプレートに体裁を整えた状態で自動反映され、印刷までにかかる時間を短縮するアプリケーションである。

正直記事を書き始めた頃は、DXをするからには、現場にデジタルを浸透させなければと思い込んでいたような気がする。
しかし前回半ば開き直って、制作の方向性を 「紙で早く出す」 にシフトチェンジしたことで、課題解決のための新たな糸口を見出すことができた。

制作の目標

シフト作成担当者の転記作業を減らす

今回は50人いる部署から同じ担当の8人分を対象に制作したが、実際のところ、50人分の休み希望を紙で集約→Excelに転記する作業だけで1日の午後がつぶれてしまう。
せめてその作業だけでも楽にしよう、時間を短縮しよう、そして定時で帰ろう!というのが、今回の制作最大の目的である。

休み希望をアプリから提出し、Excelにそのまま反映できる仕組みを作る

紙の方がなじみがあるという人が多い一方で、休み希望を記入する紙自体が見づらいのは否めない。
また、休日が続くと休み希望をなかなか記入できず、出勤してきたら調査用紙が回収されていたんだけど……と言われることも少なくない。
スマートフォンから入力できるアプリなら、時と場所を選ばずに入力することができる。

UIにこだわる

今回アプリを作成するにあたって、どうしても実装したかった内容が2つある。

  1. 社員番号を入れたら自動で名前を照合する
    社員番号の打ち間違いとそれによるエラーを防ぎたいと思い、今回SharePointには社員番号マスタリストを作成している。(あと単純にいわゆる大手のアプリっぽいことがしてみたかった)
  2. カレンダー型のUI
    見やすさや操作性を考えた時に、カレンダーをタップして選択できるUIは最適だと思った。
    使ってもらった反応もわかりやすいと好意的だったので、今回大成功した要素の最たるものかもしれない。

どちらも動作した時はすさまじい達成感があったので、こだわってよかったと思っている。

全体の構成

ChatGPT Image 2026年7月9日 21_32_06.png

SharePoint①社員番号マスタ

先述した社員番号と名前の自動照合を行うため、まずSharePointに以下のリストを作成した。(※社員番号と氏名はAIに生成させた架空のものです)

社員番号 氏名
1000001 山下健太
1000002 西野美咲
1000003 日高翔太
1000004 岩田彩花
1000005 近江拓海
1000006 諸岡真由美
1000007 半田直樹
1000008 相内優奈

社員番号をIDに応用すれば、今後様々なデータ管理に展開させていくことができるだろう。
今回は提出の実の一通アプリになってしまっているので、例えば社員番号と提出済みの休み希望を紐づけて、後から修正できるようにするなども将来的には実装したい。

PowerApps

画面①社員番号・氏名入力

image.png
まず作成したのが、社員番号を打つと氏名を自動で照合する画面。
入力画面と分けたのは画面が下に長くなることを避けるためだったが、かえって間延びしてしまった感は否めない。

ツリービュー

image.png

主な機能に使用した関数

氏名を参照して自動入力:name[Text]
LookUp(
    従業員番号マスタ,
    社員番号 = number.Text,
    氏名
)
次のページに進むボタン:btn.next[OnSelect]
Set(
    varEmployeeNo,
    number.Text
);

Set(
    varEmployeeName,
    name.Text
);

Navigate(
    scrRequest,
    ScreenTransition.Fade
)

画面②休み希望入力・送信

image.png
こだわりのカレンダーUI!
声を大にして言うが、本当にこだわってよかったと思える見栄えだ。
1回タップ:希望休、2回タップ:有給、3回タップ:取り消しの動作にもこだわった。

image.png
希望日を選択して確認ボタンを押すと、日付と休み希望の一覧ポップアップが出るようになっている。
今回は提出後の確認まで実装できなかったので、せめてこの画面でスクリーンショットを取ってもらえれば、後から確認はできるだろう。

ツリービュー

image.png

主な機能に使用した関数

内容一覧ポップアップ:conConfirm - lblComfirmList[Text]
Concat(
    Filter(
        SelectedDates,
        !IsBlank(Value)
    ),
    Text(Value,"m/d") & " " & Type & Char(10)
)
カレンダーを翌月に進めるボタン:btnNextMonth[OnSelect]
Set(
    varCalendarMonth,
    DateAdd(
        varCalendarMonth,
        1,
        TimeUnit.Months
    )
);

ClearCollect(
    CalendarDays,
    ForAll(
        Sequence(42),
        {
            Value: DateAdd(
                varCalendarMonth,
                Value - Weekday(
                    varCalendarMonth,
                    StartOfWeek.Sunday
                ),
                TimeUnit.Days
            )
        }
    )
)
カレンダーの数字を表示させている部分:galCalendar - Title1[OnSelect]
If(
    IsBlank(
        LookUp(
            SelectedDates,
            Value = ThisItem.Value
        )
    ),
    
    Collect(
        SelectedDates,
        {
            Value: ThisItem.Value,
            Type: "希望休"
        }
    ),

    If(
        LookUp(
            SelectedDates,
            Value = ThisItem.Value
        ).Type = "希望休",

        Patch(
            SelectedDates,
            LookUp(
                SelectedDates,
                Value = ThisItem.Value
            ),
            {
                Type: "有給"
            }
        ),

        RemoveIf(
            SelectedDates,
            Value = ThisItem.Value
        )
    )
)
選択した日付を塗りつぶす動作をしている部分:galCalemdar - rectangle1[Fill]
Switch(
    LookUp(
        SelectedDates,
        Value = ThisItem.Value
    ).Type,

    "希望休",
    Color.LightBlue,

    "有給",
    Color.LightGreen,

    Color.Transparent
)

SharePoimt②休み希望一覧

image.png
アプリから送信した休み希望は、こうしてSharePointに集約されていく。
確認済み欄はチェックボックスの形式で作成していて、作成したシフトの確認作業等で使えるようにしておいた。

Excel

①休み希望テーブル

image.png
SharePointに保存された内容と同じものがExcelにも共有された。
ここから、シフト表のシートでは関数を使って、休み希望を自動反映するようにしてく。
なお今回はとりあえず動作することを目的にしているので、有給と希望休の区別は次の課題にしている。

②シフト表

image.png
Sharepointを経由してテーブルに追加された休み希望は、こうして自動で反映されていく。
集計と同時にシフト表本体に直接反映されれば、煩わしい転記作業からは解放される。

休み希望テーブルから参照する関数
E15岩田彩花 7/13の場合

=IF(COUNTIFS(INDEX(休み希望table,0,2),$A15,INDEX(休み希望table,0,5),E$3)>0,"●","")

動作画面

周囲の反応

  • スマホで入力できるのが楽。出勤日じゃなくてもできるのが助かる
  • Excelに転記する手間がなくなったのがいい。入力作業が1つでも短縮されるとありがたい
  • カレンダーをタッチするやり方なのが分かりやすい
  • 送信前に確認画面が出るのがいい
  • 申請内容の確認と変更が入力側からできない
  • カレンダーに曜日表示が欲しい(完全に失念していた…)
  • 通知機能が充実するといいね
  • すでに申請中のところはカレンダーに色付きで表示されて、編集できるとなおよさそう(某企業でSEをしている身内より)

検討したが未実装の機能

  • 休み希望が提出されたらOutlookに通知する
  • 社員番号と提出済みの休み希望を紐づけて、後から修正できるようにする
  • 提出後に自分の希望休を確認できるようにする
  • 条件付き書式でもっと見やすく

どれも実装したらより便利になる機能ばかりなので、できそうなものから、前向きに検討していきたい。

終わりに

今回は「まず動くものを作る」ことを優先し、必要最低限の機能に絞って試作品を完成させた。
実際に作ってみると、技術的な課題だけでなく、「利用者にとって分かりやすいUI」や「運用しやすい仕組み」を考えることの重要性を改めて実感した。

また、今回は8/50人と小規模で実験しているが、これが大人数になったときには、動作がかなり重くなるかもしれない。

今後は実際の運用を通して改善を重ね、シフト作成まで支援できるシステムへ発展させていきたい。

S__328572931.jpg

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?