グーグルスプレットシートとGAS(Google Apps Script)をつかった簡単家計簿作成

GAS(Google Apps Script)をつかった簡単家計簿のつくり方

今回はグーグルスプレットシートとGAS(Google Apps Script)をつかった簡単家計簿のつくり方について投稿します。

ちょっとしたプログラミングが必要ですが、自作に挑戦してはいかがでしょうか?

グーグルスプレットシートとは

グーグルスプレットシートは、Excelに類似した表計算ソフトです。Google社が提供しています。

グーグルが提供しているため、グーグルのアカウントがあれば無料で利用することができます。

スマホでも利用できるため、利便性に優れています。

GAS(Google Apps Script)とは

GASはグーグルが提供しているプログラミング言語です。JavaScriptのような表記でWEB上で動作することができます。

グーグルスプレットシートの使い方

Chromeブラウザを起動し、右上のGoogle アプリ、プレッドシートの順に選択をします。

選択したら空白のスプレッドシートを選択します。

スプレットシートが表示されたら、左下の「+」ボタンを押下してシートを追加します。追加後は、シート名を「メイン」と「1月」に変更します。

シートの追加

月の家計簿シート作成

シートを作成後「1月」のシートを選択します。選択後にその月で使った金額を入力します。

ここでは「B列」の「3行」から表を作成します。左から「日付」、「カテゴリ」、「クレジット」、「店名」、「金額」を設定します。

カテゴリは後で集計に使用します。ここでは、「食費」と「カフェ」としています。

月の家計簿作成

重要な項目は、「カテゴリ」と「金額」です。この2つは必須項目なので必ず入力してください。

月が替わったらシートを増やしてください。

メインシートの作成

メインのシートの内容を作成します。

列に「カテゴリ」、行に「年月」を記載します。

月の家計簿作成

カテゴリを増やしたい場合は手動で追加してください。

メインのシートは値の設定は行わず、各月単位でカテゴリ毎の集計を算出します。

GASのコーディング

月の内容を集計するプログラムをコーディングします。

「ツール」の「スクリプトエディタ」を選択してスクリプトエディタを起動します。

コーディング

以下のような画面が表示されます。

コーディング

コードの内容は以下の通りです。

    
function mounthSummary() {
    
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var month_array = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'];
    for (var i = 0; i < month_array.length; i++) {
      var category_array = {}
      // カテゴリ作成
      var summary_sheet = sheet.getSheetByName('メイン');
      var summary_last_row = summary_sheet.getLastRow();
      for (var k = 4; k <= summary_last_row; k++) {
        category_array[summary_sheet.getRange(k, 2).getValue()] = 0;
      }
      var active_sheet = sheet.getSheetByName(month_array[i]);
      if (active_sheet) {
        var last_row = active_sheet.getLastRow();
        // 読み込み
        for (var j = 3; j <= last_row; j++) {
          if (category_array[active_sheet.getRange(j, 3).getValue()] !== undefined) {
            category_array[active_sheet.getRange(j, 3).getValue()] += active_sheet.getRange(j, 6).getValue();
          }
        }

        // 書き出し
        for (var k = 4; k <= summary_last_row; k++) {
            Logger.log(summary_sheet.getRange(k, 2).getValue());
            if (category_array[summary_sheet.getRange(k, 2).getValue()] !== undefined) {
                summary_sheet.getRange(k, i + 3).setValue(category_array[summary_sheet.getRange(k, 2).getValue()]);
            }
        }
      }
    };
}
    
  
    
var sheet = SpreadsheetApp.getActiveSpreadsheet();
    
  

スプレットシートのオブジェクトを取得します。

    
var month_array = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'];
    
  

12ヶ月分のシート名を配列に格納します。

    
for (var i = 0; i < month_array.length; i++) {
・・・
}
    
  

上記で作成した年月のシート数処理を繰り返します。

    
var summary_sheet = sheet.getSheetByName('メイン');
    
  

「メイン」のシートのオブジェクトを格納します。

    
var summary_last_row = summary_sheet.getLastRow();
    
  

月のシートの最後の行数を取得します。

    
for (var k = 4; k <= summary_last_row; k++) {
    category_array[summary_sheet.getRange(k, 2).getValue()] = 0;
}
    
  

メインのカテゴリを全行調べて配列に格納します。

    
var active_sheet = sheet.getSheetByName(month_array[i]);
if (active_sheet) {
・・・
}
    
  

月のシートをアクティブにします。シートが存在している場合は、処理を継続してシートが存在しない場合は次の月を処理します。

    
var last_row = active_sheet.getLastRow();
// 読み込み
for (var j = 3; j <= last_row; j++) {
    if (category_array[active_sheet.getRange(j, 3).getValue()] !== undefined) {
        category_array[active_sheet.getRange(j, 3).getValue()] += active_sheet.getRange(j, 6).getValue();
    }
}
    
  

月のシート最終行を取得し繰り返します。月のシートのカテゴリとマスターで取得したカテゴリの配列の値が存在する(カテゴリがマッチする)場合に金額を足しこみをおこないます。

    
// 書き出し
for (var k = 4; k <= summary_last_row; k++) {
    Logger.log(summary_sheet.getRange(k, 2).getValue());
    if (category_array[summary_sheet.getRange(k, 2).getValue()] !== undefined) {
        summary_sheet.getRange(k, i + 3).setValue(category_array[summary_sheet.getRange(k, 2).getValue()]);
    }
}
    
  

最後に書き込みを行います。

実行

実行ボタンを押下してスクリプトを実行します。実行すると以下のように結果がマスタのシートに書き込まれます。

コーディング

まとめ

グーグルスプレットシートとGAS(Google Apps Script)をつかった簡単家計簿について紹介しました。

JavaScriptのような記述ができ、ソースコードもそんなに複雑ではないと思います。

応用もできるとおもいますので試してみてはいかがでしょうか?

コメント

0 件のコメント:

コメントを投稿

コメントをお待ちしています。