Googleを使って、在庫調べを簡単に!(家庭の薬在庫数を例に)

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

薬の在庫調べは、子どもにおまかせ!スマホで数を入力してもらったら、母はLINEで数を確認するだけ。

私の子どもには持病があり、毎日、薬を飲んでいます💊

そのため、定期的に家にある薬の在庫数を確認・・・するのですが、薬の種類が多く、毎度の在庫確認がとても面倒です😅

そこで、”簡単に(薬の)数をメモできる””調べた在庫は、すぐに確認できる”ような仕組み「薬の在庫調べツール」を作って、子どもに自分の薬在庫を確認してもらうことにしました。

完成したら、このようになります:

このフォームを送信すると、私のLINE Notify に内容が送信され、簡単に在庫の数を教えてもらうことができました!

設定そのものが面倒くさい・・・という点は否めませんが、一度作ってしまうとあとが楽です。
スプレッドシートにデータが溜まっていくので、何かしら振り返りが必要になった時にもきっと、重宝すると思います 。

・・・というわけで、薬の在庫調べツールをご紹介します。

毎度まいど、薬の在庫を調べるのが大変なのです・・・。

  • 薬の種類が多くて大変
  • 飲み方の違いがあって大変(1日何回、何錠飲むのか?)
  • 薬の正式名称は、メモするだけでも大変

子どもが小さいうちは私が数えていたのですが、大きくなってからは(めんどくさくて)、子どもにバトンタッチ。

・・・とはいえ、薬の種類や数はそうそう変わりませんし、さすがに子どもも大変です。
子どもに仕事を丸投げしただけで、状況は改善していません。

そこで、Googleサービスを使った仕組みで子どもに入力させてみたところ、楽しんで入力してくれましたし、私も確認が簡単でした。

病院受診前の憂鬱(?)とも、オサラバです!

このフォームでできること・減った手間数

  • スマホで在庫数がメモ(入力)できる
  • 長~い薬の名前を毎度メモしなくて済む
  • 薬の数え忘れを防ぐ
  • それぞれ何日分の在庫があるか?自動計算できる
  • メモした在庫数はスマホ(LINE)ですぐに、確認できる

薬在庫調べの流れ

  1. 薬の数を数える(在庫調べ)
  2. スマホでGoogleフォームに入力
    1. Googleスプレッドシートにデータが反映される
  3. Google Apps Scriptを使ってLINE通知
  4. スマホ(LINE)で在庫数を確認

必要な物

  • Googleアカウント
  • LINEアカウント
  • スマホ
  • (ファイル共有などの若干の基礎知識)

使うもの・使うアプリ

  • Googleフォーム(以下、フォーム)
  • Googleスプレッドシート(以下、スプレッドシート)
  • Google Apps Script(以下、GAS)
  • LINE Notify

注意事項とお願い

在庫数を数える・メモするだけとはいえ、薬=病気に関わることですので、ご利用は自己責任にてお願いします。

参考サイト

GASを勉強するにあたって、ものすごく参考にさせてもらっています:
いつも隣にitのお仕事
↑↑このサイトの運営者さんが書かれたこちらの本↓↓も、かなりおすすめです。

薬在庫調べのフォームを作る

手順その1:各ファイルの準備

まずは、スプレッドシート・フォーム・GASファイルの3枚を準備します。

在庫調べの”ベース”になるスプレッドシートを準備します
  • Googleスプレッドシートで新規ファイルを作成
    • 左上のファイル名を確認
    • 「無題のスプレッドシート」から、ファイル名を変更
      1. ここでは「薬在庫シート」とします
  • スプレッドシートの「ツール」→「フォームを作成」
在庫数を入力するためのフォーム(入力画面)を準備します
  • Googleフォームの新規ファイルが開くので、ファイル名を確認
    • 左上のファイル名を確認
      1. 「スプレッドシートのファイル名」などのファイル名になっています
    • ファイル名は、任意の名前でOK
      1. ここでは「薬在庫シート(フォーム)」とします
    • ファイルの上、中央にある「回答」をクリック
    • 右側にある緑色のスプレッドシートマークをクリックして、先程作ったスプレッドシートと連携させておきます。
入力した在庫数をLINEに送るためのGASファイルを準備します

一度、スプレッドシートに戻ります。

  • スプレッドシートの「ツール」→「スクリプトエディタ」を選択
  • GASの新規ファイルが開くので、ファイル名を確認する
    • 「無題のプロジェクト」から、ファイル名を変更します
    • ここでは「薬在庫スクリプト」とします

GASを初めて使う場合は、簡単な初期設定・確認項目が出てきますが、ここでは割愛。

GASを実行する際に「 承認が必要です 」という表示が出る場合は、こちらを参考にしてください。
参考:【初心者向けGAS】スクリプト実行時の「承認」でびっくりしないために

合計3枚のファイルを準備

ここまでで

  • 「薬在庫シート」←スプレッドシート
  • 「薬在庫シート(フォーム)」←フォーム
  • 「薬在庫スクリプト」←GASファイル

という名前のファイルができました。

手順その2:フォームの作成(入力ページ)

ここから、Googleフォームを使った在庫入力ページを作成していきます。

先ほど作成したGoogleフォームを開きます

項目(薬の名前)に対する回答(在庫数)を入力していくページをこれから作成していきます。

タイトルを付ける

「薬在庫シート」のままでも良いですし、わかりやすい名前に変更もOKです。

  • ここでは「薬の在庫調べ」とします。
フォームの説明を入力する

説明や注意書きがあれば、入力します。

私は

  • 数字は半角で入力してください。
  • 全く在庫が無い場合は、「0」を入力してください。

のようにしています。

質問(薬名)と解答欄を作る

質問の部分に薬の名前を入力します。

  • 解答欄は記述式テキスト(短文回答)
    • 右上のプルダウンメニューから選択可
  • 回答の検証を付け加えます(任意)
    • 右下の3点マークの中にあります。
    • 回答の検証をすることで、数字が入っているかどうか?をチェックできます
    • 「数値」「数字」を選択
    • エラーテキスト「数字を入力してください。」など
  • 薬に対する説明が必要なら、右下3点ボタンより「説明」を入力します
    • 例)1日3回服用
  • 入力モレを防ぐため、必須ボタンをチェックしておきましょう

これで、薬入力の項目が一つできました。

あとはこれを必要数コピペして、入力フォームを完成させていきます。

我が家の場合はとにかく薬の種類が多いので、ある程度入力したら、セクションを分けて入力ミスを防いでいます。

種類が選べる薬の場合

栄養剤など、味が選べるお薬もあります。この場合は

  • 質問その1で味を選ぶ
    • 回答項目でプルダウンを選択
    • 栄養剤の名前(何種類か)を入力
  • 質問その2で数を入力

といった工夫をしています。(GASの部分で少し気を付ける場所がありますので、後述します

入力フォームをブックマークする

フォームが完成したら

  1. 画面右上の「送信」ボタンをクリック
  2. 送信方法の真ん中にある、リンクボタンを選択
  3. リンクアドレスをコピー
    1. URLを短縮したほうが、扱いやすいです
  4. リンクを開いたら、忘れずにお使いのブラウザへ「ブックマーク」登録をしておきます
入力フォームのテスト(次のページへ)

一通りテスト入力して、完了ページまで進むかどうか?試します。

スプレッドシートの作成(データを保管する。扱いやすくする。)

ここからは、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. 何日分の薬があるのか?
    (スプレッドシートでできる計算は、スプレッドシート内で処理しておきます)
  2. 最新の在庫状況は?

の計算と、データの整形を行います。

また、在庫数のデータが横並びなので(フォームの回答 1シート・表示調整シート)、データを使いやすくするために縦書きに変更していきます。

現在庫表示シートを用意したら、以下のように書きます。

  • 1行目:
    • A1→薬名、B1→回数(1日に飲む回数)、C1→現在個数
  • 2行目:
    • A2に以下を記入。
      =TRANSPOSE('フォームの回答 1'!A1:S1)
    • B2に以下を記入。
      =TRANSPOSE('フォームの回答 1'!A2:S2)
    • C1に以下を記入。
      =TRANSPOSE('表示調整'!A1:S1)
      • 薬名が縦並びに表示されました。

スプレッドシートはここまで。

GoogleappScript(GAS)ファイルの作成

ここからはGASファイルを作成していきます。
・・・がその前に、LINEでの受け取り準備を済ませてしまいましょう。

LINE Notifyでトークンを取得する

ファイルに保存ができたら次は、LINE Notifyでトークンを取得します。

  • LINE Notifyとはどんなサービスですか?
    Webサービスと連携すると、LINEが提供する公式アカウント「LINE Notify」から通知を受信する事ができるサービスです。
  • 無料で利用できますか?
    LINE Notifyは無料で利用することができます。

他のWebサービスと連携する際、サービスによっては有料アカウントでのみ利用できる機能などもあります。

参考:LINE Notify ヘルプセンター

・・・ということでLINE Notify は、LINEを通して色々なWebサービスから、自分の知りたい通知を受け取れる便利なサービスです。

まずは、LINE Notify の利用申込みをしましょう。
利用申込みができたら

  1. こちらのページ(LINE Notify)から「LINE IDでログイン」→「マイページ」→「アクセストークンの発行(開発者向け)」から、「トークンを発行」します。

  2. トークン名を決め、表示する場所を決めたら→「発行する」
    1. 薬の在庫表示なので、表示する場所は「1:1でLINE Notifyから通知を受け取る」でOKです。
  1. トークンをメモします。後で使います。(他人に絶対知られないように、取り扱いに注意すること!
  2. LINE Notify から通知が来るので、スマホにてLINE Notifyを招待

これで、LINEの設定は終了です。

GASファイルにスクリプトを記入する

まずは、先程用意したGASファイル「薬在庫スクリプト」に以下をコピペしてください。

function postLineNotify() {
  
  //  各種設定
  var ssheetId = PropertiesService.getScriptProperties().getProperty('ssheetId');//spreadsheet id 
  var notifyToken = PropertiesService.getScriptProperties().getProperty('notifyToken');//LINE Notify Token 
  
  var obj = SpreadsheetApp.openById(ssheetId); 
  
  var sheet = obj.getSheetByName("現在庫表示"); 
  
  //  getRangeでスプレッドシートの連携したい箇所を指定  filter(String)で文字だけをフィルタリング
  var medName = sheet.getRange("A:A").getValues().filter(String);//薬名
  var medFrqncy = sheet.getRange("B:B").getValues().filter(String);//回数
  var medStock = sheet.getRange("C:C").getValues().filter(String);//現在庫数
  
  //  取得するシートの配列
  var message = new Array();
  
  //  配列に変換
  for(var i = 0; i < medName.length; i++){
    
    //  回数表示が要らない場合、空欄に。
    if(!medFrqncy[i]){
      medFrqncy[i] = '';
    }
    
    //  何日分の薬?を計算。「*日分」計算はNaNになるため、”*”の表示設定。
    var medDays = Math.floor( medStock[i] / medFrqncy[i] );
    if ( isNaN ( medDays ) ) {
      medDays = "*";// NaN
    }
    
    message.push(medName[i]+'(1日',medFrqncy[i]+'回)'+' -- ',medStock[i]+'個 - ',medDays +'日分\n------------------\n');
  }
  //  配列を改行で連結
  var sendMessage = message.join('');
  
  //  LINE Notify へ送信。
  var options = {
    'method' : 'post',
    'headers': {
      'Authorization': 'Bearer ' + notifyToken
    },
    'payload' : {
      'message': sendMessage
    }
  };
  var response = UrlFetchApp.fetch('https://notify-api.line.me/api/notify', options);
  
}
各スクリプトの簡単な説明

何が書かれているのか?簡単な説明と手順です。

各種設定

スプレッドシートとLINEでやり取りするための設定です。

  1. 「ファイル」→「プロジェクトのプロパティ」→「スクリプトのプロパティタブ」→「プロパティ」→「notifyToken」と入力(このまま入力すること。大文字、小文字もしっかり同じに入力してください。
  2. 右側の値に「先ほど取得したトークン」を入力
  3. 「プロパティ」→「ssheetId」と入力(このまま入力すること。大文字、小文字もしっかり同じに入力してください。
  4. 右側の値に「スプレッドシートのID」を入力
    スプレッドシートのIDの見方
  5. 保存
スクリプトの中身

上から順番に

  • スプレッドシートとシート名を設定
  • スプレッドシートの内容を参照して、データを扱いやすく加工
    • 途中で何日分の薬なのか?を計算
  • 準備できたデータをLINE Notifyに送る

という流れです。

これでLINE Notify との繋がりができたので、一度実行ボタンを押して動作確認をしておいてください。

GASを実行する際に「 承認が必要です 」という表示が出る場合は、こちらを参考にしてください。
参考:【初心者向けGAS】スクリプト実行時の「承認」でびっくりしないために

フォームとの連携

これまでの作業を「フォームの送信ボタンを押す」→「GASが動く」→「LINE通知で確認」という流れにするために、”キッカケ”の部分を設定します。

  1. GASの左上にある、「時計のアイコン」をクリック。
  2. トリガーを設定します
  3. 右下の「トリガーを追加」
  4. 「実行する関数を選択」→「postLineNotify」
  5. 「デプロイ時に実行」→「Head」
  6. 「イベントのソースを選択」→「スプレッドシートから」
  7. 「イベントの種類を選択」→「フォーム送信時」
  8. 「エラー通知設定」→「毎日通知を受け取る」(エラー通知はお好みで)
  9. 保存

これで、フォームで在庫数を入力→送信ボタン押下→LINEで通知がくるはずです。

テストするだけ・在庫数の入力は済んでいる・・・なら、フォームの送信ボタンを押さないでGASファイルの三角ボタン▶を押すだけでも、LINEで通知が来るはずです。

テストする際に、試してみてください。

まとめ

子どもが小さいうちは、自分で入力。

子どもが大きくなったら、子どもに入力してもらうと簡単です。(自分の薬!という意識も高まる・・・かも?)

実感として、すごく管理しやすくなったと思ってます😊

追加事項

体調は日々、変化していくものです。

  • 新しい薬が増えた・・・。
  • 薬が減った(飲まなくてよくなった!)

という場合について・・・。

薬が減った場合
  1. 「フォーム」の「該当薬欄」を削除
  2. 「スプレッドシート」→「フォームの回答1」より、該当薬の一列を削除
  • 「表示調整」の該当薬にあたる列を削除
    • 2番で該当薬の列を削除したので、エラー表示されている箇所があるはずです。その列を削除すればOK
薬が増えた場合
  1. 「フォーム」に「該当薬欄」を追加
    • テスト入力してみてください
  2. 「スプレッドシート」→「フォームの回答1」を確認
    • 列の最後に、新しい薬が追加されます
  3. 「フォームの回答1」→該当薬の「1日の服用回数」を記入
  4. 「表示調整」の該当薬にあたる列に計算式を追加
  5. 「現在庫表示」→一番上に書いた計算式を変更
    • 該当薬にあたる列のアルファベットに変更

どちらの場合も、何度かテストしてみてください。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

Ads