(license)みなさん、こんにちは!タカハシ(@ntakahashi0505)です。Googleスプレッドシート上に勤怠管理集計システムを作るのを目標にシリーズ連載をしています。今回はこちらの記事の続きです。Scriptでチャットワークからの打刻情報をシートの最終行に追加する方法Googleスプレッドシート上に勤怠管理集計システムを作っています。Scriptでチャットワークからの打刻情報をappendRowでシートの最終行に追加する方法です。tonari-it.com2016.09.19チャットワークから取得した出勤に関するデータをデータシートに追加するというところをお伝えしました。システムとしてはチャットワークから新たなデータを受け取った際に、同日、同社員のレコードが既に存在しているかを判断する必要があります。その結果いかんでその後の処理が変わってきます。その準備として、以下の記事で判定用の関数を作成しました。Scriptで「スプレッドシート内に特定の値が存在しているかどうかを判定したい、または取り出したい」ということがよくあります。頻度が高いので、汎用的に使える関数を作っていきます。tonari-it.com2016.10.03今回は、この関数を活用して、新たなデータを受け取ったときの処理の分岐について組み立てつつ、出勤・退勤打刻データの入力処理を一気に作ってていきます。社員マスタから社員IDを「VLOOKUP」する数値と文字列の連結について条件分岐箇所のスクリプトまとめ連載目次:チャットワークのメッセージ送信で出勤・退勤の打刻をするこれまでのおさらいこれまでで作成したスクリプトはこちらです。",退勤");}}}catch(e){Logger.log('エラーが発生しました');Logger.log(e.message);}}全体のアルゴリズムとしてはスプレッドシートの設定チャットワークとURLリクエストの設定tryJSON内オブジェクトから日付、時刻、アカウントIDを取り出す取得した全てのメッセージについてJSON内オブジェクトから日付、時刻、アカウントIDを取り出すデータが「出勤」であった場合(★ここから)シートにデータを一行追加データが「退勤」であった場合ログ出力(★ここまで)tryの中でエラーが発生した場合エラー内容をログ出力という流れになります。今回は、「★ここから」~「★ここまで」の条件分岐を含む処理を変更していきます。アルゴリズムはこうなります。同日同社員のレコードが存在している退勤フィールドがnull退勤時刻を入力ちょっと複雑な感じもしますね...。同日同社員のレコードが存在していないか判定する同日同社員のレコードが「データ」シートに存在しているかどうかの判定ですが、シートではこのようにA列「打刻ID」が日付(シリアル値)と社員IDを結合したものになっており、これがシート上では一意の値となっています。従って、この列の中に、同日同社員のレコードが存在していないか判定すれば良さそうです。Date型オブジェクトをシリアル値に変換まず、日付を格納したDate型のオブジェクトdate_Dをシリアル値に変換するためには、以下関数dateToSnを使います。DATES_OFFSET;}こちらは以下記事から引用させて頂きました。Excelは「1900年1月0日」を0とする数値を「9999年12月31日」までの各日付に割り振っている。*...qiita.com社員マスタから社員IDを「VLOOKUP」する次に社員IDが必要なのですが、これは「社員マスタ」シートからチャットワークのアカウントIDをキーとして抽出してきます。スプレッドシート関数でいうとVLOOKUPですね。この処理は、前回作った関数findRowを使います。0;}解説はこちらをご覧ください。Scriptで「スプレッドシート内に特定の値が存在しているかどうかを判定したい、または取り出したい」ということがよくあります。頻度が高いので、汎用的に使える関数を作っていきます。//社員IDということで取得できます。数値と文字列の連結について上記から日付のシリアル値と社員IDが求められましたので、これらを文字列として連結したものを「データ」シートでfindRowすれば、同日同社員のデータが存在するかどうかを判定することができます。dataRow=findRow(wsData,dateToSn(date_D)+staffID.toString(),1);これで存在していればdataRowには発見した行数が、存在していない場合は0が格納されます。ここで第二引数を単純にdateToSn(date_D)+staffIDとしてしまうと、数値+数値で加算されてしまいます。staffIDにtoStringメソッドをかまして文字列に変換してあげることで、数値+文字列の演算になるので、文字列の連結となります。覚えておくと良いですよ。条件分岐箇所のスクリプトこれをもとに冒頭のスクリプトの26行目~43行目までを以下のように修正をしました。wsData.getRange(dataRow,6);if(!rng.getValue()){rng.setValue(date_T);}}}if文が大量に増えましたね(汗)。条件式に比較演算子を使っていない場合がたくさんあるように見えますが、JavaScriptの場合はnull,0はfalseとして扱われるので、それを利用しています。これも覚えておくと良いですね。まとめチャットワークから受け取った出勤・退勤の打刻データについて条件に応じてシートに追加する処理を一気に作っていきました。システムとしては、簡易ではありながら最低限の機能は実装された状態となりました。相手は人間...色々な操作をしますし、システムに受け入れられない操作をしているということもなかなか気づかない場合もあります。そのような場合はちゃんとお知らせしてあげる必要がありますね。次回は、処理の結果についてメッセージを返してあげるという処理を作っていきたいと思います。Scriptとスプレッドシートを用いて作っていきます。プランノーツ代表、コミュニティ「ノンプロ研」主宰。ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ★フォロー頂ければ嬉しいです。「コミュニティ+講座」形式で継続性&教え合える環境も提供。!ノンプログラマーがプログラミングスキルを身に着ける支援ををするコミュニティ。セミナー・もくもく会・Facebookグループのサポートで「自らで学び続ける力をつける」支援、「教え合うことで学びの価値を上げる」場の提供をしています。#GAS活ガイアックス様主催のエンジニア交流会にて登壇をしてまいりました。Script活用ミートアップ」!"GAS活"にて話したことと学んだことについてレポートをしています。ScriptでGoogleカレンダーの記録をスプレッドシートに出力するGoogleカレンダーの記録を活用して仕事の生産性を測定する方法を進めています。Scriptを紹介します。SQLのデータベースにアクセスする方法をシリーズでお伝えしています。SQLのデータベースに複数のSQLを実行する方法です。2020.01.06iPhone・アプリチャットワークのiPhoneアプリアップデートで追加されたシェアエクステンションとはチャットワークのiPhoneアプリが大幅アップデートされました。今回個人的に注目している機能が「シェアエクステンション」。今回はそのシェアエクステンションとその便利な使い方について紹介していきます。2016.06.09Excel・VBA活用術エクセルVBAでマクロの実行完了と処理時間をチャットワークに通知する方法エクセルVBAでHTTP通信を行う方法についてあれこれお伝えしています。今回は一つ便利な使用例として、マクロの実行完了についてチャットワークへの通知してお知らせする方法についてお伝えします。Script【GAS】定期的に発生するタスクをチャットワークに自動でタスク追加(完全版)チャットワークのタスク機能ですが、定期のタスク追加は面倒ですよね。Scriptで毎月、毎週、毎日の定期タスクを自動でチャットワークに追加するプログラムを作成します。PM初めまして!突然のご連絡申し訳ありません。「findRow」が定義されていません。以降に進めなくなってしまっており、困っております。アドバイス等いただけますと幸いです。PM正田さまコメントありがとうございます。findRow()を定義されていないものと思います。0;}スクリプト内にこちらも記述して実行してみてくださいませ。「コミュニティ+講座」形式で継続性&教え合える環境も提供。詳細・お申込はこちら隣ITを応援する当ブログを「応援したい!」「役に立ったよ!」というお気持ちを、コチラからお支払いただくことができます。日々更新の活力倍増いたします。※PayPalアカウントが必要です。※金額は変更可能です。Platform23HTML・CSS32iPhone・アプリ29Monaca・スマホアプリ開発7PC全般・Windows86PowerPoint・VBA28Python87RPA1VBScript15Vue.js・JavaScript13WEBサービス・クラウド68WordPress・ブログ88Word・VBA42コミュニティ・イベント109セミナーのお知らせ11チャットワーク72データ分析・アクセス解析40仕事・生産性・働き方73動画配信8商業出版21起業・フリーランス72電子書籍・Kindle3運営会社プランノーツは"IT×働き方改革"をお手伝いする会社です。「コミュニティ+講座」形式で継続性&教え合える環境も提供。詳細・お申込はこちら隣ITを応援する当ブログを「応援したい!」「役に立ったよ!」というお気持ちを、コチラからお支払いただくことができます。日々更新の活力倍増いたします。※PayPalアカウントが必要です。※金額は変更可能です。Platform23HTML・CSS32iPhone・アプリ29Monaca・スマホアプリ開発7PC全般・Windows86PowerPoint・VBA28Python87RPA1VBScript15Vue.js・JavaScript13WEBサービス・クラウド68WordPress・ブログ88Word・VBA42コミュニティ・イベント109セミナーのお知らせ11チャットワーク72データ分析・アクセス解析40仕事・生産性・働き方73動画配信8商業出版21起業・フリーランス72電子書籍・Kindle3運営会社プランノーツは"IT×働き方改革"をお手伝いする会社です。Scriptが「V8ランタイム」をサポート!モダンなECMAScript構文が使えるようになった2020.02.072020.02.08GASでコピーしたGoogleスライドのプレゼンテーションを取得する方法2020.02.052020.02.05Facebookページいつも隣にitのお仕事タイトルとURLをコピーしました。