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 出金欄に値を入力すると、自動で残高が更新されます。
 - 残高は常に前の行から継続して計算されます。
 - 過去の値を変更しても、全体の残高が再計算されます。
 
  
  
  
  