この記事にはプロモーションが含まれています
薬の在庫調べは、子どもにおまかせ!スマホで数を入力してもらったら、母はLINEで数を確認するだけ。
私の子どもには持病があり、毎日、薬を飲んでいます💊
そのため、定期的に家にある薬の在庫数を確認・・・するのですが、薬の種類が多く、毎度の在庫確認がとても面倒です😅
そこで、”簡単に(薬の)数をメモできる”、 ”調べた在庫は、すぐに確認できる”ような仕組み「薬の在庫調べツール」を作って、子どもに自分の薬在庫を確認してもらうことにしました。
完成したら、このようになります:
このフォームを送信すると、私のLINE Notify に内容が送信され、簡単に在庫の数を教えてもらうことができました!
・・・というわけで、薬の在庫調べツールをご紹介します。
目次
毎度まいど、薬の在庫を調べるのが大変なのです・・・。
- 薬の種類が多くて大変
- 飲み方の違いがあって大変(1日何回、何錠飲むのか?)
- 薬の正式名称は、メモするだけでも大変
子どもが小さいうちは私が数えていたのですが、大きくなってからは(めんどくさくて)、子どもにバトンタッチ。
・・・とはいえ、薬の種類や数はそうそう変わりませんし、さすがに子どもも大変です。
子どもに仕事を丸投げしただけで、状況は改善していません。
そこで、Googleサービスを使った仕組みで子どもに入力させてみたところ、楽しんで入力してくれましたし、私も確認が簡単でした。
このフォームでできること・減った手間数
- スマホで在庫数がメモ(入力)できる
- 長~い薬の名前を毎度メモしなくて済む
- 薬の数え忘れを防ぐ
- それぞれ何日分の在庫があるか?自動計算できる
- メモした在庫数はスマホ(LINE)ですぐに、確認できる
薬在庫調べの流れ
- 薬の数を数える(在庫調べ)
- スマホでGoogleフォームに入力
- Googleスプレッドシートにデータが反映される
- Google Apps Scriptを使ってLINE通知
- スマホ(LINE)で在庫数を確認
必要な物
- Googleアカウント
- LINEアカウント
- スマホ
- (ファイル共有などの若干の基礎知識)
使うもの・使うアプリ
- Googleフォーム(以下、フォーム)
- Googleスプレッドシート(以下、スプレッドシート)
- Google Apps Script(以下、GAS)
- LINE Notify
注意事項とお願い
在庫数を数える・メモするだけとはいえ、薬=病気に関わることですので、ご利用は自己責任にてお願いします。
参考サイト
- 【初心者向け】GASを使ったスプレッドシートとSlackの連携(bot制作):
https://qiita.com/unadesuga/items/971c5f7587a7bf8d076d - GASでスプレッドシートの内容をSlackに投稿:
https://qiita.com/dragonnn/items/1fe9ff402e3546391144 - Webブラウザーで作ったプログラムからLINEに好きなメッセージを送信:
https://qiita.com/takatama/items/fc1e3b098e68657741cb - 【コピペでOK】スプレッドシートの関数で『動的な』最終行の行番号・内容を取得する方法:
https://tanuhack.com/get-last-row/
GASを勉強するにあたって、ものすごく参考にさせてもらっています:
いつも隣にitのお仕事
↑↑このサイトの運営者さんが書かれたこちらの本↓↓も、かなりおすすめです。
Google フォーム徹底解説!
効率的なアンケート作成・自動集計をマスター
Google フォームで使用できる機能を網羅的に体験し、アンケート制作や集計を効率的にする方法を学ぶコースです。 紙でのアンケートに限界を感じていませんか?出席管理、製品満足度調査、イベントアンケートなどの実装例を一緒に操作しながら学びます
薬在庫調べのフォームを作る
手順その1:各ファイルの準備
まずは、スプレッドシート・フォーム・GASファイルの3枚を準備します。
在庫調べの”ベース”になるスプレッドシートを準備します
- Googleスプレッドシートで新規ファイルを作成
- 左上のファイル名を確認
- 「無題のスプレッドシート」から、ファイル名を変更 → ここでは「薬在庫シート」とします
- スプレッドシートの「ツール」→「フォームを作成」
在庫数を入力するためのフォーム(入力画面)を準備します
- Googleフォームの新規ファイルが開くので、ファイル名を確認
- 左上のファイル名を確認
→ 「スプレッドシートのファイル名」などのファイル名になっています - ファイル名は、任意の名前でOK
→ ここでは「薬在庫シート(フォーム)」とします - ファイルの上、中央にある「回答」をクリック
- 右側にある緑色のスプレッドシートマークをクリックして、先程作ったスプレッドシートと連携させておきます。
- 左上のファイル名を確認
入力した在庫数をLINEに送るためのGASファイルを準備します
一度、スプレッドシートに戻ります。
- スプレッドシートの「拡張機能」→「Apps Script」をクリック
- GASの新規ファイルが開くので、ファイル名を確認する
- 「無題のプロジェクト」から、ファイル名を変更します
- ここでは「薬在庫スクリプト」とします
GASを初めて使う場合は、簡単な初期設定・確認項目が出てきますが、ここでは割愛。
合計3枚のファイルを準備
ここまでで
- 「薬在庫シート」←スプレッドシート
- 「薬在庫シート(フォーム)」←フォーム
- 「薬在庫スクリプト」←GASファイル
という名前のファイルができました。
手順その2:フォームの作成(入力ページ)
ここから、Googleフォームを使った在庫入力ページを作成していきます。
先ほど作成したGoogleフォームを開きます
項目(薬の名前)に対する回答(在庫数)を入力していくページをこれから作成していきます。
タイトルを付ける
「薬在庫シート」のままでも良いですし、わかりやすい名前に変更もOKです。
- ここでは「薬の在庫調べ」とします。
フォームの説明を入力する
説明や注意書きがあれば、入力します。
私は
- 数字は半角で入力してください。
- 全く在庫が無い場合は、「0」を入力してください。
のようにしています。
質問(薬名)と解答欄を作る
質問の部分に薬の名前を入力します。
- 解答欄は記述式テキスト(短文回答)
- 右上のプルダウンメニューから選択可
- 回答の検証を付け加えます(任意)
- 右下の3点マークの中にあります。
- 回答の検証をすることで、数字が入っているかどうか?をチェックできます
- 「数値」「数字」を選択
- エラーテキスト「数字を入力してください。」など
- 薬に対する説明が必要なら、右下3点ボタンより「説明」を入力します
- 例)1日3回服用
- 入力モレを防ぐため、必須ボタンをチェックしておきましょう
これで、薬入力の項目が一つできました。
あとはこれを必要数コピペして、入力フォームを完成させていきます。
種類が選べる薬の場合
栄養剤など、味が選べるお薬もあります。この場合は
- 質問その1で味を選ぶ
- 回答項目でプルダウンを選択
- 栄養剤の名前(何種類か)を入力
- 質問その2で数を入力
といった工夫をしています。(GASの部分で少し気を付ける場所がありますので、後述します)
入力フォームをブックマークする
フォームが完成したら
- 画面右上の「送信」ボタンをクリック
- 送信方法の真ん中にある、リンクボタンを選択
- リンクアドレスをコピー → URLを短縮したほうが、扱いやすいです
- リンクを開いたら、忘れずにお使いのブラウザへ「ブックマーク」登録をしておきます
Google フォーム徹底解説!
効率的なアンケート作成・自動集計をマスター
Google フォームで使用できる機能を網羅的に体験し、アンケート制作や集計を効率的にする方法を学ぶコースです。 紙でのアンケートに限界を感じていませんか?出席管理、製品満足度調査、イベントアンケートなどの実装例を一緒に操作しながら学びます
入力フォームのテスト(次のページへ)
一通りテスト入力して、完了ページまで進むかどうか?試します。
スプレッドシートの作成(データを保管する。扱いやすくする。)
ここからは、Googleスプレッドシートを作成していきます。
手順その1:テスト入力したデータを確認
先ほどテスト入力をしたことで、スプレッドシートに「フォームの回答 1」というシートができています。
入力データの説明
- 1行目:
先ほど作った入力フォームの質問部分 + タイムスタンプが入力されています - 2行目:
テスト入力した在庫数のデータが入力されていますが「行を挿入」して、1日の服用回数を計算するための行にします。
- A2→「1日の服用回数」
- B2、C2、D2・・・→各薬の服用回数を入力してください(半角で)
- 栄養剤の種類など回数表示の必要がないものには「*(アスタリスク)」を記入します
- 行を固定しておくと、見やすいです
- 固定したい行を選択
- 「表示」→「固定」
- 3行目:
在庫数が記入されています
手順その2:データを扱いやすくするために、シートを作成します
「フォームの回答 1」のシートではデータとして扱いにくいので、LINEに数データを送るためのシートを、新規で2枚追加します。
- 「表示調整」シート
- 「現在庫表示」シート
表示調整シート
最新のデータを取得するためのシートです。
「フォームの回答 1」を参照して、一番新しいデータを抜き出します。
A1に以下をコピペ(すべて選択して、コピーしてください。)
=INDEX('フォームの回答 1'!A:A, MAX(MATCH(MAX('フォームの回答 1'!A:A)+1,'フォームの回答 1'!A:A,1),MATCH("",'フォームの回答 1'!A:A,-1)))
セルを選択して、セルの右下にカーソルを合わせると「+」になります。
その状態で薬の数ぶん横にドラッグ。
すると、薬の名前の下に最新の在庫数が表示されているはずです。
このシートはここまで。
プルダウンの選択肢を使った場合
選択肢部分だけがエラーになるので
=INDEX('フォームの回答 1'!C:C, MAX(MATCH(MAX('フォームの回答 1'!C:C)+1,'フォームの回答 1'!C:C,1),MATCH("",'フォームの回答 1'!C:C,-1)))
↓
=INDEX('フォームの回答 1'!C:C, MAX(MATCH(MAX('フォームの回答 1'!A:A)+1,'フォームの回答 1'!A:A,1),MATCH("",'フォームの回答 1'!A:A,-1)))
のように変更して、参照する場所を少し変えてあげると、うまくいきます。
現在庫表示シート
このシートではLINEに表示させたい情報2つ
- 何日分の薬があるのか?
(スプレッドシートでできる計算は、スプレッドシート内で処理しておきます) - 最新の在庫状況は?
の計算と、データの整形を行います。
また、在庫数のデータが横並びなので(フォームの回答 1シート・表示調整シート)、データを使いやすくするために縦書きに変更していきます。
現在庫表示シートを用意したら、以下のように書きます。
- 1行目:
- A1→薬名、B1→回数(1日に飲む回数)、C1→現在個数
- 2行目:
- A2に以下を記入。
=TRANSPOSE('フォームの回答 1'!A1:S1)
- B2に以下を記入。
=TRANSPOSE('フォームの回答 1'!A2:S2)
- C1に以下を記入。
=TRANSPOSE('表示調整'!A1:S1)
- 薬名が縦並びに表示されました。
- A2に以下を記入。
スプレッドシートはここまで。
【IT初心者でもわかる!Google スプレッドシート入門編】
基本機能を活用したワンランク上の使い方、情報処理をマスター
Google スプレッドシートを用いて表計算ソフトの一般的な機能を体験するコースです。 四則演算や絶対参照、キーボードショートカットからはじまり、 関数SUM / IF / VLOOKUP や、フィルタ、並べ替え、ピボット、グラフまでを体験
GoogleappScript(GAS)ファイルの作成
ここからはGASファイルを作成していきます。
・・・がその前に、LINEでの受け取り準備を済ませてしまいましょう。
LINE Notifyでトークンを取得する
ファイルに保存ができたら次は、LINE Notifyでトークンを取得します。
- LINE Notifyとはどんなサービスですか?
Webサービスと連携すると、LINEが提供する公式アカウント「LINE Notify」から通知を受信する事ができるサービスです。 - 無料で利用できますか?
LINE Notifyは無料で利用することができます。
・・・ということでLINE Notify は、LINEを通して色々なWebサービスから、自分の知りたい通知を受け取れる便利なサービスです。
まずは、LINE Notify の利用申込みをしましょう。
利用申込みができたら
- こちらのページ(LINE Notify)から「LINE IDでログイン」→「マイページ」→「アクセストークンの発行(開発者向け)」から、「トークンを発行」します。
- トークン名を決め、表示する場所を決めたら→「発行する」
→ 薬の在庫表示なので、表示する場所は「1:1でLINE Notifyから通知を受け取る」でOKです。 - トークンをメモします。後で使います。(他人に絶対知られないように、取り扱いに注意すること!)
- LINE Notify から通知が来るので、スマホにてLINE Notifyを招待。
これで、LINEの設定は終了です。
GASファイルにスクリプトを記入する
まずは、先程用意したGASファイル「薬在庫スクリプト」に以下をコピペしてください。
function postLineNotify() {
// 各種設定
const ssheetId = PropertiesService.getScriptProperties().getProperty('ssheetId');//spreadsheet id
const notifyToken = PropertiesService.getScriptProperties().getProperty('notifyToken');//LINE Notify Token
const obj = SpreadsheetApp.openById(ssheetId);
const sheet = obj.getSheetByName("現在庫表示");
// getRangeでスプレッドシートの連携したい箇所を指定 filter(String)で文字だけをフィルタリング
const medName = sheet.getRange("A:A").getValues().filter(String);//薬名
const medFrqncy = sheet.getRange("B:B").getValues().filter(String);//回数
const medStock = sheet.getRange("C:C").getValues().filter(String);//現在庫数
// 取得するシートの配列
const message = new Array();
// 配列に変換
for(let i = 0; i < medName.length; i++){
// 回数表示が要らない場合、空欄に。
if(!medFrqncy[i]){
medFrqncy[i] = '';
}
// 何日分の薬?を計算。「*日分」計算はNaNになるため、”*”の表示設定。
let medDays = Math.floor( medStock[i] / medFrqncy[i] );
if ( isNaN ( medDays ) ) {
medDays = "*";// NaN
}
message.push(medName[i]+'(1日',medFrqncy[i]+'回)'+' -- ',medStock[i]+'個 - ',medDays +'日分\n------------------\n');
}
// 配列を改行で連結
const sendMessage = message.join('');
// LINE Notify へ送信。
const options = {
'method' : 'post',
'headers': {
'Authorization': 'Bearer ' + notifyToken
},
'payload' : {
'message': sendMessage
}
};
const response = UrlFetchApp.fetch('https://notify-api.line.me/api/notify', options);
}
各スクリプトの簡単な説明
何が書かれているのか?簡単な説明と手順です。
各種設定
スプレッドシートとLINEでやり取りするための設定です。
2022-05-10 追記:新エディターの場合、スクリプトのプロパティ設定場所が変更されています。
詳しくはこちらからどうぞ
【解決】Google Apps Script 新エディターでのプロパティ設定場所
- 「ファイル」→「プロジェクトのプロパティ」→「スクリプトのプロパティタブ」→「プロパティ」→「notifyToken」と入力(このまま入力すること。大文字、小文字もしっかり同じに入力してください。)
- 右側の値に「先ほど取得したトークン」を入力
- 「プロパティ」→「ssheetId」と入力(このまま入力すること。大文字、小文字もしっかり同じに入力してください。)
- 右側の値に「スプレッドシートのID」を入力
スプレッドシートのIDの見方 - 保存
スクリプトの中身
上から順番に
- スプレッドシートとシート名を設定
- スプレッドシートの内容を参照して、データを扱いやすく加工
- 途中で何日分の薬なのか?を計算
- 準備できたデータをLINE Notifyに送る
という流れです。
これでLINE Notify との繋がりができたので、一度実行ボタンを押して動作確認をしておいてください。
フォームとの連携
これまでの作業を「フォームの送信ボタンを押す」→「GASが動く」→「LINE通知で確認」という流れにするために、”キッカケ”の部分を設定します。
- GASの左上にある、「時計のアイコン」をクリック。
- トリガーを設定します
- 右下の「トリガーを追加」
- 「実行する関数を選択」→「postLineNotify」
- 「デプロイ時に実行」→「Head」
- 「イベントのソースを選択」→「スプレッドシートから」
- 「イベントの種類を選択」→「フォーム送信時」
- 「エラー通知設定」→「毎日通知を受け取る」(エラー通知はお好みで)
- 保存
これで、フォームで在庫数を入力→送信ボタン押下→LINEで通知がくるはずです。
テストするだけ・在庫数の入力は済んでいる・・・なら、フォームの送信ボタンを押さないでGASファイルの三角ボタン▶を押すだけでも、LINEで通知が来るはずです。
テストする際に、試してみてください。
ビジネスパーソンに贈る業務効率化大全
〜Google Apps Scriptによる業務の自動化〜
Google Apps Scriptを用いてG Suite(Googleフォーム、Googleスプレッドシート、Gmail等)の連携を行い、様々な業務を自動化してみよう。
まとめ
子どもが小さいうちは、自分で入力。
子どもが大きくなったら、子どもに入力してもらうと簡単です。(自分の薬!という意識も高まる・・・かも?)
実感として、すごく管理しやすくなったと思ってます😊
追加事項
体調は日々、変化していくものです。
- 新しい薬が増えた・・・。
- 薬が減った(飲まなくてよくなった!)
という場合について・・・。
薬が減った場合
- 「フォーム」の「該当薬欄」を削除
- 「スプレッドシート」→「フォームの回答1」より、該当薬の一列を削除
- 「表示調整」の該当薬にあたる列を削除
- 2番で該当薬の列を削除したので、エラー表示されている箇所があるはずです。その列を削除すればOK
薬が増えた場合
- 「フォーム」に「該当薬欄」を追加
- テスト入力してみてください
- 「スプレッドシート」→「フォームの回答1」を確認
- 列の最後に、新しい薬が追加されます
- 「フォームの回答1」→該当薬の「1日の服用回数」を記入
- 「表示調整」の該当薬にあたる列に計算式を追加
- 「現在庫表示」→一番上に書いた計算式を変更
- 該当薬にあたる列のアルファベットに変更
どちらの場合も、何度かテストしてみてください。