スプレッドシート移行でつまずく介護事業所向け!ExcelマクロをGoogle Apps Scriptで再現する方法
スプレッドシート移行でつまずく介護事業所向け!ExcelマクロをGoogle Apps Scriptで再現する方法
この記事では、介護事業所における日々の訪問予定管理を効率化するためにExcelのマクロを活用していたものの、スプレッドシートへの移行につまずいている方を対象に、Google Apps Script(GAS)を用いた解決策を提示します。Excelマクロの知識がなくても、GASを使って同様の機能を実装し、業務効率を格段に向上させるための具体的なステップを解説します。
初めての質問です。分かりづらい文章で長文ですが、ご教授頂ければ助かります。
現在、エクセルのマクロを使用しておりますが、今後スプレッドシートへ移行しなくてはならなくなり、分からなくなってしまいました。というのも、介護の事業所で日々の訪問予定の管理を効率良くしたくエクセルのマクロを始めたのですが、周りにパソコンが出来る人がいなく、私自身もエクセルを触ったことも無い状態から試行錯誤してめちゃくちゃに作成したため、ちゃんと理解も出来ていない状態です。
本題です。
現在やっているエクセルでは1つのブックに左から右へ向かい月~土のシートと続けて1日~31日のシートが作成してあります。
月~土のシートにはそれぞれ訪問予定が入っております。
1日のシートに月を入力すると31日のシートまで月日、曜日が入力される様な数式を入力しています。
セル G1:年 G2:月 I2:日 K2:曜日
1日のシートの月(G2セル)の入力をトリガーとしてマクロが起動。
1~31日それぞれのシートの曜日が入力されるセル(K2)を参照し、その曜日に合った月~土のシートへ移動し、A3セルからN35セルをコピー。
元のシートへ戻りA3セルを選択しペースト。
このマクロが1~31日のシートそれぞれに作成されており、1日のシートの月を入力することで、1~31日までのマクロが連続実行されるようになっています。
また、曜日が日曜の場合はそのシートのA3セルからN35セルをDeleteする様になっています。
【参考】
If Range(“k2”) = “(月)” Then
Sheets(“月”).Select
ActiveSheet.Unprotect
Range(“A3:N35”).Select
Selection.Copy
Sheets(“1日”).Select
Range(“A3:N35”).Select
ActiveSheet.Paste
上記の”月”が月~土まで同様の式がずっと連なり、日曜のみ下記の式で削除する様にしています。
If Range(“k2”) = “(日)” Then
Range(“A3:N35”).Select
Selection.Delete
End If
上記が1日のシートから31日のシートまでそれぞれセレクトするシート名の部分だけ変更して入力してあります。
そして下記が連続実行のマクロです。(G2)セルが月を入力するセルです。
Private Sub worksheet_change(ByVal target As Range)
If target.Address = “$G$2” And Len(Range(“G2”).Value) < 3 Then
Call 連続実行
End If
これらを今度はスプレッドシートで同様の事を行いたいです。
エクセルのマクロとやり方が違う為、全然理解できず、期間も今月中に業務の合間を縫って完成させなければならずお手上げ状態です。
もしもっと簡単な方法などもあれば教えて頂けると嬉しいです。
シート名や曜日など変数を使った方がすっきりするのでは?とか素人考えで思ってはいるんですが、やり方がよく分からず・・・
完全に素人初心者で詳しくもないので、皆様のお知恵をお借りしたいです。
よろしくお願い致します。補足説明不足がありました。まとまりがなく分かりづらい文章で申し訳ないです。
予定表は図の様な感じで作成してます。1日あたりの訪問予定が結構ぎっしり詰まっている為、予定表を1シートに1枚作成し、毎日プリントアウトして出勤した従業員が見る様にしています。
月~土のシートに予定の原本を作成。原本はよく変更がありますので(介護なので・・)一つのファイルを原本として保存し予定を都度更新。
月が替わる前に原本ファイルのコピーファイルを作成し当該月の名前に変更。月~土のシートを1~31日の該当曜日シートへコピー。その日ごとに訪問が中止になる方、時間が変わる方等がいる為、個別の日付シートで変更に対応。当日の朝プリントアウトという感じです。
なので、月~土の元となるシートを1~31日の該当する曜日のシートへ必要な部分(A3セルからN35セル)だけコピペという作業を自動化出来ないかなと考えています。
はじめに:なぜスプレッドシートへの移行が必要なのか?
介護事業所において、日々の訪問予定管理は非常に重要な業務です。正確な情報共有は、サービスの質を維持し、利用者様の安全を守るために不可欠です。Excelマクロは、この業務を効率化するための強力なツールですが、スプレッドシートへの移行は、以下のようなメリットをもたらします。
- クラウドベースの利便性: スプレッドシートはオンラインでアクセスできるため、場所を選ばずに情報にアクセスできます。
- 共同作業の容易さ: 複数のスタッフが同時に同じドキュメントを編集できるため、情報共有がスムーズになります。
- バージョン管理: 変更履歴が自動的に保存されるため、誤った編集やデータの損失を防ぐことができます。
- コスト削減: Microsoft Officeのライセンス料を削減できます。Google Workspaceは、無料または低コストで利用できます。
1. Google Apps Script(GAS)とは?
Google Apps Script(GAS)は、Googleのサービスを拡張・自動化するためのスクリプト言語です。スプレッドシート、ドキュメント、Gmailなど、さまざまなGoogleサービスと連携し、複雑な処理を簡単に実現できます。Excelのマクロと同様に、GASを使用することで、スプレッドシートの操作を自動化し、業務効率を向上させることができます。
2. GASでExcelマクロを再現するための準備
GASでExcelマクロと同様の機能を実現するためには、以下の準備が必要です。
- Googleアカウントの準備: Googleアカウントが必要です。
- スプレッドシートの作成: 訪問予定管理用のスプレッドシートを作成します。
- シート構成:月~土のシートと、1日~31日のシートを作成します。
- データの配置:Excelと同様に、日付、曜日、訪問予定などを配置します。
- GASエディタの起動: スプレッドシートを開き、「ツール」→「スクリプトエディタ」を選択します。これにより、GASのコードを記述するためのエディタが開きます。
3. GASでExcelマクロの機能を実装する
Excelマクロで実現していた機能を、GASで再現するための具体的なステップを説明します。
3.1. シート間のデータコピー
Excelマクロでは、特定の曜日シートに、月~土のシートからデータをコピーしていました。GASでは、この機能を以下のように実装します。
function copyDataToDailySheets() {
// スプレッドシートとアクティブなシートを取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
const activeSheet = ss.getActiveSheet();
// 年と月を取得(G1セル、G2セルから取得する場合)
const year = activeSheet.getRange("G1").getValue();
const month = activeSheet.getRange("G2").getValue();
// 1日から31日までのシートをループ
for (let day = 1; day <= 31; day++) {
// 日付シート名を作成
const dailySheetName = String(day);
const dailySheet = ss.getSheetByName(dailySheetName);
// シートが存在しない場合はスキップ
if (!dailySheet) continue;
// 曜日を取得
const date = new Date(year, month - 1, day); // 月は0から始まるため-1
const dayOfWeek = date.getDay(); // 0:日曜日, 1:月曜日, ..., 6:土曜日
// 曜日ごとのシート名
let sourceSheetName;
switch (dayOfWeek) {
case 0: sourceSheetName = "日"; break;
case 1: sourceSheetName = "月"; break;
case 2: sourceSheetName = "火"; break;
case 3: sourceSheetName = "水"; break;
case 4: sourceSheetName = "木"; break;
case 5: sourceSheetName = "金"; break;
case 6: sourceSheetName = "土"; break;
default: continue; // 予期せぬ値の場合はスキップ
}
// コピー元シートを取得
const sourceSheet = ss.getSheetByName(sourceSheetName);
// コピー元シートが存在しない場合はスキップ
if (!sourceSheet) continue;
// データのコピー範囲
const sourceRange = sourceSheet.getRange("A3:N35");
const destinationRange = dailySheet.getRange("A3:N35");
// データのクリア
destinationRange.clearContent();
// データのコピー
sourceRange.copyTo(destinationRange, {contentsOnly: true});
}
}
このスクリプトは、以下の処理を行います。
- スプレッドシートとアクティブなシートを取得します。
- 年と月を取得します(G1セル、G2セルから取得する場合)。
- 1日から31日までのシートをループします。
- 各日付シートの曜日を計算し、対応する曜日シートの名前を取得します。
- コピー元シートから、各日付シートの指定範囲にデータをコピーします。
- コピー前に日付シートのデータをクリアします。
3.2. トリガーの設定
Excelマクロでは、G2セルの変更をトリガーとしてマクロが起動していました。GASでは、スプレッドシートの変更をトリガーとしてスクリプトを実行できます。トリガーを設定するには、以下の手順に従います。
- スクリプトエディタで、上記の
copyDataToDailySheets関数を作成します。 - スクリプトエディタの左側の時計マーク(トリガー)をクリックします。
- 「トリガーを追加」をクリックします。
- 設定を以下のようにします。
- 実行する関数:
copyDataToDailySheets - 実行するイベントのソース:
スプレッドシートから - イベントの種類を選択:
変更時 - 変更の種類:
すべての変更
- 実行する関数:
- 「保存」をクリックします。
- 初めてトリガーを設定する際には、Googleアカウントの認証が必要になります。指示に従って認証を完了してください。
これにより、G2セルの値を変更するたびに、copyDataToDailySheets関数が自動的に実行され、データのコピーが行われます。
3.3. 日曜日のデータの削除
Excelマクロでは、日曜日のシートのデータを削除していました。GASでは、この機能を以下のように実装します。
function clearSundayData() {
// スプレッドシートとアクティブなシートを取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
const activeSheet = ss.getActiveSheet();
// 年と月を取得(G1セル、G2セルから取得する場合)
const year = activeSheet.getRange("G1").getValue();
const month = activeSheet.getRange("G2").getValue();
// 日付シートのデータをクリア
for (let day = 1; day <= 31; day++) {
const dailySheetName = String(day);
const dailySheet = ss.getSheetByName(dailySheetName);
if (!dailySheet) continue;
const date = new Date(year, month - 1, day);
const dayOfWeek = date.getDay();
if (dayOfWeek === 0) { // 日曜日
const rangeToClear = dailySheet.getRange("A3:N35");
rangeToClear.clearContent();
}
}
}
このスクリプトは、以下の処理を行います。
- スプレッドシートとアクティブなシートを取得します。
- 年と月を取得します(G1セル、G2セルから取得する場合)。
- 1日から31日までのシートをループします。
- 各日付シートの曜日を計算し、日曜日の場合は、指定範囲のデータをクリアします。
この関数を、トリガーcopyDataToDailySheets関数の後に実行するように修正します。
function copyDataToDailySheets() {
// スプレッドシートとアクティブなシートを取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
const activeSheet = ss.getActiveSheet();
// 年と月を取得(G1セル、G2セルから取得する場合)
const year = activeSheet.getRange("G1").getValue();
const month = activeSheet.getRange("G2").getValue();
// 1日から31日までのシートをループ
for (let day = 1; day <= 31; day++) {
// 日付シート名を作成
const dailySheetName = String(day);
const dailySheet = ss.getSheetByName(dailySheetName);
// シートが存在しない場合はスキップ
if (!dailySheet) continue;
// 曜日を取得
const date = new Date(year, month - 1, day); // 月は0から始まるため-1
const dayOfWeek = date.getDay(); // 0:日曜日, 1:月曜日, ..., 6:土曜日
// 曜日ごとのシート名
let sourceSheetName;
switch (dayOfWeek) {
case 0: sourceSheetName = "日"; break;
case 1: sourceSheetName = "月"; break;
case 2: sourceSheetName = "火"; break;
case 3: sourceSheetName = "水"; break;
case 4: sourceSheetName = "木"; break;
case 5: sourceSheetName = "金"; break;
case 6: sourceSheetName = "土"; break;
default: continue; // 予期せぬ値の場合はスキップ
}
// コピー元シートを取得
const sourceSheet = ss.getSheetByName(sourceSheetName);
// コピー元シートが存在しない場合はスキップ
if (!sourceSheet) continue;
// データのコピー範囲
const sourceRange = sourceSheet.getRange("A3:N35");
const destinationRange = dailySheet.getRange("A3:N35");
// データのクリア
destinationRange.clearContent();
// データのコピー
sourceRange.copyTo(destinationRange, {contentsOnly: true});
}
clearSundayData(); // 日曜日のデータをクリア
}
これで、G2セルの値を変更すると、データのコピーと日曜日のデータの削除が自動的に実行されます。
4. より効率的な方法:データの構造化と数式活用
上記の方法でも、Excelマクロと同様の機能をGASで再現できますが、スプレッドシートの特性を活かし、より効率的な方法も検討できます。
4.1. データの構造化
月~土のシートに訪問予定を直接入力するのではなく、別途「予定リスト」のようなシートを作成し、日付、曜日、訪問先、内容などの情報を構造的に管理します。これにより、データの検索や集計が容易になります。
4.2. 数式の活用
スプレッドシートの数式を活用することで、データのコピーや曜日判定を自動化できます。例えば、日付シートでは、=IF(WEEKDAY(DATE(G1,G2,A2))=1, "", 予定リスト!A:N)のような数式を使用し、曜日が日曜日の場合は空白、それ以外の場合は予定リストから該当するデータを参照するようにします。
5. 実践的なアドバイスと注意点
- テストとデバッグ: スクリプトを実装したら、必ずテストを行い、正しく動作することを確認してください。エラーが発生した場合は、エラーメッセージを参考に、コードを修正してください。
- バックアップ: スプレッドシートとスクリプトは、定期的にバックアップを取ることをお勧めします。
- セキュリティ: スクリプトで個人情報などの機密情報を扱う場合は、適切なセキュリティ対策を講じてください。
- GASの学習: GASの基礎知識を学ぶことで、より高度な機能を実現できます。Googleの公式ドキュメントや、オンラインのチュートリアルを活用してください。
6. 成功事例
多くの介護事業所が、スプレッドシートとGASを活用して、業務効率を向上させています。例えば、
- 訪問予定の自動作成
- スタッフのシフト管理
- 請求書の自動作成
- 利用者情報の管理
これらの事例を参考に、自社の業務に合わせたカスタマイズを行いましょう。
7. まとめ:スプレッドシートへの移行で介護事業所の業務効率を最大化
この記事では、介護事業所がExcelマクロからスプレッドシートに移行し、Google Apps Script(GAS)を活用して業務効率を向上させるための具体的な方法を解説しました。GASの基本的な使い方から、Excelマクロの機能を再現する方法、そしてより効率的な方法まで、実践的なステップを提示しました。スプレッドシートへの移行は、業務の効率化だけでなく、情報共有の円滑化、コスト削減など、多くのメリットをもたらします。ぜひ、この記事を参考に、スプレッドシートとGASを活用し、介護事業所の業務効率を最大化してください。
もっとパーソナルなアドバイスが必要なあなたへ
この記事では一般的な解決策を提示しましたが、あなたの悩みは唯一無二です。
AIキャリアパートナー「あかりちゃん」が、LINEであなたの悩みをリアルタイムに聞き、具体的な求人探しまでサポートします。
無理な勧誘は一切ありません。まずは話を聞いてもらうだけでも、心が軽くなるはずです。
```
最近のコラム
>> 「死にたい」と「未来への不安」…今の仕事が辛すぎるあなたへ。専門家が教える、心のSOSへの対処法