Google スプレッドシートで「現金出納帳」を管理するためのシンプルな Google Apps Script(GAS) のコードを以下にご提供します。
以下の構成では、入金・出金の登録や自動残高計算を行う簡単なシステムになります。
- 💡スプレッドシート構成(例)
- ✅ GASコード:入金・出金の記録と残高の自動計算
- ✍️ 手順
- 🔍 各部分の詳しい説明
- function onEdit(e) {
- const sheet = e.source.getActiveSheet();
- const editedRow = e.range.getRow();
- const editedCol = e.range.getColumn();
- if (sheet.getName() !== '現金出納帳') return;
- if (editedCol !== 3 && editedCol !== 4) return;
- const lastRow = sheet.getLastRow();
- for (let row = 2; row <= lastRow; row++) {
- const income = Number(sheet.getRange(row, 3).getValue()) || 0;
- const expense = Number(sheet.getRange(row, 4).getValue()) || 0;
- let prevBalance = 0;
- if (row > 2) { ... }
- const balance = prevBalance + income - expense;
- sheet.getRange(row, 5).setValue(balance);
- ✅ このスクリプトでできること
💡スプレッドシート構成(例)
日付 | 内容 | 入金 | 出金 | 残高 |
---|---|---|---|---|
2025/07/01 | 売上 | 10,000 | 10,000 | |
2025/07/02 | 仕入れ | 3,000 | 7,000 | |
… | … | … | … | … |
✅ GASコード:入金・出金の記録と残高の自動計算
function onEdit(e) {
const sheet = e.source.getActiveSheet();
const editedRow = e.range.getRow();
const editedCol = e.range.getColumn();
// 「現金出納帳」という名前のシートのみに対応
if (sheet.getName() !== '現金出納帳') return;
// 入金列または出金列に変更があった場合のみ実行
if (editedCol !== 3 && editedCol !== 4) return;
const lastRow = sheet.getLastRow();
for (let row = 2; row <= lastRow; row++) {
const income = Number(sheet.getRange(row, 3).getValue()) || 0;
const expense = Number(sheet.getRange(row, 4).getValue()) || 0;
let prevBalance = 0;
if (row > 2) {
prevBalance = Number(sheet.getRange(row - 1, 5).getValue()) || 0;
}
const balance = prevBalance + income - expense;
sheet.getRange(row, 5).setValue(balance);
}
}
✍️ 手順
Google スプレッドシートを作成し、シート名を「現金出納帳」にします。
1行目に以下の見出しを入力してください:
A1: 日付, B1: 内容, C1: 入金, D1: 出金, E1: 残高
メニューから「拡張機能」→「Apps Script」を開き、上記のコードを貼り付けて保存します。
スプレッドシートにデータ(入金または出金)を入力すると、自動的に残高が計算されます。
🔍 各部分の詳しい説明
function onEdit(e) {
- 目的:スプレッドシートのセルが編集されたときに自動で呼び出される関数(
onEdit
はトリガー関数)。 e
:編集イベントの情報(編集されたセルの場所や内容など)を含むオブジェクト。
const sheet = e.source.getActiveSheet();
- 編集されたシート全体の情報(
Sheet
オブジェクト)を取得します。
const editedRow = e.range.getRow();
const editedCol = e.range.getColumn();
- 編集されたセルの「行番号」と「列番号」を取得しています。
- 例えば、C3 を編集した場合 →
editedRow = 3
,editedCol = 3
- 例えば、C3 を編集した場合 →
if (sheet.getName() !== '現金出納帳') return;
- 他のシートで編集された場合は処理をやめるという条件です。
- このコードは「現金出納帳」という名前のシートにしか反応しません。
if (editedCol !== 3 && editedCol !== 4) return;
- 入金列(3列目)または出金列(4列目)以外を編集しても処理しないようにしています。
const lastRow = sheet.getLastRow();
- データが入っている一番下の行番号を取得します。
- ループ処理で残高を計算するために必要です。
for (let row = 2; row <= lastRow; row++) {
- 2行目(ヘッダーの次)から最後の行までループします。
- 各行の入金・出金・残高を順に計算していきます。
const income = Number(sheet.getRange(row, 3).getValue()) || 0;
- 指定行の入金セル(3列目)の値を取得し、数値に変換。
- 空欄のときは
0
を使います(|| 0
の部分)。
const expense = Number(sheet.getRange(row, 4).getValue()) || 0;
- 指定行の出金セル(4列目)の値を取得し、数値に変換。
- 同様に空欄のときは
0
を使用。
let prevBalance = 0;
- 前の行の残高を格納する変数を初期化。
if (row > 2) { ... }
- 2行目(最初の取引行)のときは前の行がないので
0
を基準とします。 - それ以降の行では、**前の行(row – 1)の残高(5列目)**を取得して使います。
const balance = prevBalance + income - expense;
- 残高を計算する式です:
新しい残高 = 前の残高 + 入金 – 出金
sheet.getRange(row, 5).setValue(balance);
- 計算した残高を現在の行の「5列目(残高列)」に書き込みます。
✅ このスクリプトでできること
- 入金 or 出金欄に値を入力すると、自動で残高が更新されます。
- 残高は常に前の行から継続して計算されます。
- 過去の値を変更しても、全体の残高が再計算されます。