見出し画像

年末大掃除を少しだけ楽しむアプリ

この記事は、Power Apps Advent Calendar 2022 12月23日担当分の記事です。

年末大掃除、やる気はあるけど気が重い。
誰がどの場所を担当するか、くじ引きで決めることで、抽選中だけでも大掃除を楽しめたら…そんな思いでアプリ作ってみました。

思いついた経緯

職場では週2回、掃除の時間があります。
どこを誰が担当するかをパートさんが決めてくれていたのですが、1回15分はフリーズしていました。
1週間で30分、1ヶ月で2時間、1年で24時間…
これは時短してもらいたい作業!と思い改善提案しました。

改善提案

Excelでサクサクっと作ります。
A列=RAND()
B列=RANK.EQ(A1,$A$1:$A$10,1)→10人用
C列=参加者名

ボタンにRANK関数の結果をソートさせるマクロを組み込む

掃除場所を入力したセルの横にソートした参加者名をリンクさせる。
以上っ!

これだと2分かかりません。
1週間で26分、1ヶ月で1時間44分、1年で20時間48分の時短に成功です!

アプリで作ったらどうなるか?

PowerAppsで作ったらどんな感じになるんだろう??と、ウズウズし始めたので、即実践!

完成予想図

イメージとしては
①掃除メンバーリストをギャラリーで表示
②参加できるメンバーにチェックを入れる
③チェックが入ったメンバーだけで掃除場所のくじ引きをさせ担当を振り分ける
④掃除場所ギャラリーに担当者の抽選結果を表示させる
こんなのが作りたい!

RAND関数は、PowerAppsだとShuffle関数に置き換えられるんじゃない!?
参加者を絞り込むのはチェックボックスを使ったらいいんじゃない!?
と、方向性は決まって行きました。

準備したデータソース

①掃除メンバーリスト
②掃除場所リスト

【参加者を絞り込む画面の作成】

ギャラリーのデータソース:掃除メンバー
ギャラリーの中にチェックボックスを挿入

★チェックボックス
OnCheck=Collect(参加,{Member:ThisItem.メンバー})
(翻訳 チェックボックスにチェックが入っとる人の名前を参加コレクションのMember列に格納してね)

★抽選開始ボタン
Onselect=Navigate(Member_View)
(翻訳 ボタンを押したら掃除場所を知らせる画面に切り替えてね)

【掃除場所を知らせる画面の作成】

左のギャラリーのデータソース:掃除場所
右のギャラリー:Collectしたものをシャッフルして参加者名を表示させる

悩む日々

さて、Shuffle関数を使えば上手くいくイメージは沸いてるのに、どこにコードを入れたらいいの?と、解決させるのに10日くらい悩みました。

★「掃除場所を知らせる画面」の参加者名を表示させるギャラリー
Items=Suffle(参加)
(翻訳 参加コレクションをシャッフルしたデータを利用してね)

★ギャラリー内のラベル
Text=ThisItem.Member
(翻訳 参加コレクションをシャッフルさせた順番で参加者名を表示させてね)
なんとなく形にはなりましたが、ThisItemとParentについてまだ理解が深まっていないので要復習です。

「パンダにキッチンは任せられん!」「父ちゃんも兄ちゃんさぼるな!」と異議申し立てが発生した場合も考慮して、やり直しも出来るようにしたい。

★異議あり!ボタン
Onselect=Navigate(Member_Edit)
    ;Clear(参加)
(翻訳 参加者を絞り込む画面に移動するときに、参加コレクションを空っぽにしてね)

掃除箇所が参加人数よりも少ない場合は、既存の場所のヘルプに入ってもらおう!

★ギャラリー外にラベルを挿入
Text=If(CountRows(参加)<=7,"","外回りのお手伝い")
(翻訳 もしも参加コレクションの行に7人以上登録されたら、掃除場所に「外回りのお手伝い」を表示させてね)

上図の抽選結果では、キッチンを父上には任せられん!と意義が出そうですが、きちんと動いてくれてるので、これでひとまず完成🎊
ここからはオプションです。

オプション

全員参加する時には一括で操作できたら楽だろうなぁと思ったので、全員参加チェックボックスを付け加えることにしました。

チェックボックスをギャラリー外に追加挿入して…さて、コードをどこに書くか?

「全員参加」のチェックボックス側に書こうとするのが 今までの私
「ギャラリー側」のチェックボックス側に書こうとするのが 今の私

★ギャラリー側のチェックボックス
Default=Check_All.Value
(翻訳:すべてのにチェックのチェックボックスにチェックが入ったら、こっちにもチェックを入れてね)

チェックが入った〜!と喜びながら、抽選開始ボタンをポチっとな・・・
すべてにチェックが入っているのに抽選結果が表示されません。???
コレクションを見に行ってみると、空っぽでした。残念。

思い通りにならないこと(=エラー)の確認・検証をどこですればよいか、すぐに分かっただけでもステップアップしてると自分を褒めて、次のトライに向かいます!

視覚的にはチェックが入ったように見えますが、OnCheckのアクションに何も追記していない。そりゃそうだ!このままで動くわけがない!トライ&エラーが楽しい!もはやパズルゲーム感覚です。

試行錯誤すること数日・・・。
掃除場所を知らせる画面の右のギャラリーを「個別にチェックした時用」と「全員参加にチェックした時用」に分けて考えよう!という結論に至りました。分けて重ねる。PowerPlatform塾を受講した際、Akira先生が作成してくださったテキストを読み返していてひらめきました。Akira先生に感謝です!

★全員参加のチェックボックス
Oncheck=Collect(参加,掃除メンバー.member)

★全員参加にチェックした時用の参加者名を表示させるギャラリー
Items=Suffle(参加)
今まで書いてきたのと同じコードで全然OK!発想の転換って大事ですね。

弱々戦士のあとがき

私は「ローコード」を全くローと感じない弱々戦士です。加えて、英語も苦手です。毎日30分の継続学習を続けていて、ある日突然「コードは言語だ」と実感したんです。
やりたいことをイメージしてトライ&エラーを繰り返し、実装できたら、あえて自分が書いたコードだけを見てそれを翻訳してみる。文法のお勉強してるみたいで意外と面白いです。
PowerPlatform強強戦士の皆様にお見せすると、ツッコミどころ万歳の内容かと思いますが、動けばOK!と開き直って、来年も引き続き、楽しみながらPowerPlatformの沼にはまっていこうかなと思います。

おまけ

大掃除がおわったら、忘年会用にカラオケロシアンルーレットにするのも良いですね。

この記事が気に入ったらサポートをしてみませんか?