見出し画像

GASを使って毎月の家計簿を作ろう。GAS初心者でも出来る。

家計簿にソフトを購入することはありません。無料で使えるGoogleスプレッドシートで一発でトップ画像の様に出来ます。
土日の場合にはセルの色変化、支出などの計算の関数は打ち込まれています。勘定科目はカスタマイズ可能です。
実行すると新しいシートが出来るようになっています。
GASの基本的な使い方を含めてご説明します。

GAS


GASとは

Googleが提供するプログラミング言語です。簡単に言えば。無料です。
家計簿の作り方は下に入れます。

①スプレッドシート 

スプレッドシートの拡張機能というところからApp Scriptを押します。

App Script選択

②GASの画面表示

GASの画面が表示されたら中央に、function my function など書いている4行を消します。次に下に書いてあるコードをコピペします。

GAS画面
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('家計簿メニュー') // メニューのタイトルを指定
    .addItem('家計簿作成', '家計簿作成') // メニューに項目を追加し、クリック時に実行する関数を指定
    .addToUi(); // メニューをUIに追加
}

function 家計簿作成() {
  // 年と月を入力プロンプトで取得
  const year = Browser.inputBox("家計簿作成", "何年の家計簿を作成しますか?", Browser.Buttons.OK_CANCEL);
  if (year == "cancel") return;

  const month = Browser.inputBox("家計簿作成", "何月の家計簿を作成しますか?", Browser.Buttons.OK_CANCEL);
  if (month == "cancel") return;

  const incomeEstimate = Browser.inputBox("家計簿作成", "収入見込みを入力してください(例: 350000)", Browser.Buttons.OK_CANCEL);
  if (incomeEstimate == "cancel") return;

  // 新しいシート名を生成
  const newSheetName = `${year}${month}月`;
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  
  // 同じ名前のシートが存在するか確認
  const existingSheet = spreadsheet.getSheetByName(newSheetName);
  if (existingSheet) {
    // シートが存在する場合、ダイアログで知らせる
    Browser.msgBox("エラー", "同じ名前のシートがすでに存在します。別の名前を使用してください。", Browser.Buttons.OK);
    return;
  }

  // 新しいシートを作成
  const newSheet = spreadsheet.insertSheet(newSheetName);

  // A1、B1にデータを書き込み
  const budgetHeader = `${year}${month}月`;
  newSheet.getRange("A1").setValue(budgetHeader).setFontWeight("bold"); // A1を太字に設定
  newSheet.getRange("B1").setValue("家計簿").setFontWeight("bold"); // B1を太字に設定
  newSheet.getRange("A4").setValue("※日付(例:11月1日の場合 11-1)")

  // F1に収入見込みを設定し、フォーマットを適用
  const incomeCell = newSheet.getRange("F1");
  incomeCell.setValue(Number(incomeEstimate));       // 数値として設定
  incomeCell.setNumberFormat("#,##0円");              // フォーマットを「0,000円」に設定

  // 支出と残金のラベルをE2、E3に設定
  newSheet.getRange("E2").setValue("支出");
  newSheet.getRange("E3").setValue("残金");

  // F2に合計支出の関数を設定
  const expenditureCell = newSheet.getRange("F2");
  expenditureCell.setFormula("=SUM(e5:e50)");       // 合計支出を計算する関数

  // F3に残金の関数を設定
  const balanceCell = newSheet.getRange("F3");
  balanceCell.setFormula("=F1-F2");                  // 残金を計算する関数

  // F列全体に「0,000円」形式のフォーマットを適用
  newSheet.getRange("F1:F50").setNumberFormat("#,##0円"); // F1からF50までのフォーマットを設定

  // セルの背景色を薄いオレンジに設定
  const lightOrange = "#FFEBCC"; // 薄いオレンジの色コード
  newSheet.getRange("E1:F3").setBackground(lightOrange); // E1:F3の背景色設定
  newSheet.getRange("A5:F5").setBackground(lightOrange); // A5:F5の背景色設定

  // 残金がマイナスの場合にフォントカラーを赤に設定
  const rule = SpreadsheetApp.newConditionalFormatRule()
    .whenFormulaSatisfied('=F3<0') // F3が負の場合
    .setFontColor("red")            // フォントカラーを赤に設定
    .setRanges([balanceCell])       // 適用範囲
    .build();

  const rules = newSheet.getConditionalFormatRules();
  rules.push(rule);
  newSheet.setConditionalFormatRules(rules);

  // F3の表示形式を「0,000円」に設定
  balanceCell.setNumberFormat("#,##0円"); // 表示形式を設定(マイナス時は自動で赤表示)

  // 5行目にヘッダーを書き込み
  newSheet.getRange("A5").setValue("日付");
  newSheet.getRange("B5").setValue("曜日");
  newSheet.getRange("C5").setValue("勘定科目");
  newSheet.getRange("D5").setValue("内容");
  newSheet.getRange("E5").setValue("金額");
  newSheet.getRange("F5").setValue("備考");

  // プルダウンリストの設定
  const categories = [
    "養育費",
    "住居費",
    "水道光熱費",
    "通信費",
    "保険料",
    "食費",
    "日用品費",
    "被服費",
    "美容費",
    "交際費",
    "趣味費",
    "交通費",
    "教育費",
    "医療費",
    "特別費",
    "雑費",
    "その他"
  ];

  // C6からC50までの範囲にプルダウンリストを設定
  const categoryRange = newSheet.getRange("C6:C50");
  const ruleForDropdown = SpreadsheetApp.newDataValidation()
    .requireValueInList(categories)
    .setAllowInvalid(false)
    .build();
  categoryRange.setDataValidation(ruleForDropdown);

  // B6からB50に曜日の関数を設定
  for (let i = 6; i <= 50; i++) {
    newSheet.getRange(`B${i}`).setFormula(`=IF(A${i}="", "", TEXT(A${i}, "dddd"))`); // A列の値に基づいて曜日を表示、A列が空の場合はブランク
  }

  // 条件付き書式を追加: 土曜日(薄いスカイブルー)と日曜日(薄いピンク)
  const saturdayRule = SpreadsheetApp.newConditionalFormatRule()
    .whenTextEqualTo('土曜日') // B列が土曜日
    .setBackground("#B2E0F0") // 薄いスカイブルー
    .setRanges([newSheet.getRange("A6:F50")]) // 
    .build();

  const sundayRule = SpreadsheetApp.newConditionalFormatRule()
    .whenTextEqualTo('日曜日') // B列が日曜日
    .setBackground("#F8D1D1") // 薄いピンク
    .setRanges([newSheet.getRange("A6:F50")]) // 
    .build();

  // ルールを追加して適用
  rules.push(saturdayRule);
  rules.push(sundayRule);
  newSheet.setConditionalFormatRules(rules);
}

③プロジェクトを保存します。

プロジェクト保存

④プロジェクトを実行します。

プロジェクト実行

⑤承認画面が出てきます。
基本的に大丈夫です。

承認画面

⑥この画面になったら、詳細を押します。

⑦プロジェクトのページに移動します。

⑧リクエスト 許可します。

⑨実行ログが終了していればセット完了です。再度実行を押します。

完了

⑩使用方法 スプレッドシートに戻り、メニューバーを見ると家計簿メニューと出ています。そこから家計簿作成を押します。
※先ほどのコードを削除しない限りは、このスプレッドシートを実行すればメニューバーに家計簿メニューと表示されます。他のスプレッドシートには影響ありません。

実行画面

⑪基本情報を入力します。何年、何月、見込み収入の3つを入れるだけです。それが終わると、出来上がりです。

基本情報入力
完成画面

⑫補足
勘定科目は自分で決めることが出来ます。今回作成したのはあくまで、予想で作っただけです。下記の項目の部分を調整してみてください。

const categories = [
    "養育費",
    "住居費",
    "水道光熱費",
    "通信費",
    "保険料",
    "食費",
    "日用品費",
    "被服費",
    "美容費",
    "交際費",
    "趣味費",
    "交通費",
    "教育費",
    "医療費",
    "特別費",
    "雑費",
    "その他"
  ];

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?