0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Googleスプレッドシート & GoogleAppScriptで、カロリーとタンパク質を管理してみた

0
Last updated at Posted at 2026-09-09

はじめに

最近ダイエットを始めました。
ダイエットではカロリー管理とタンパク質の摂取、運動が大事とのことでしたので、GoogleスプレッドシートとGoogle Apps Script(GAS)で簡単なカロリー管理ツールを作りました。

PCとスマホで管理したかったことや、シンプルな操作性にしたかったこともあり、既存アプリは使わずGoogleさんに頼りました。
決して、アプリを探すのがめんどくさかったとかいう理由ではありません。

今回作成したGASは、入力用のシートに記録した食事データを翌日の早朝に自動で記録用シートへ移し、入力用のシートを自動で初期化する簡易的なものです。

GASのソースコードはGitHubで公開しています。

使っているもの

今回使用したのは以下の2つです。

  • Googleスプレッドシート
  • Google Apps Script(GAS)

GASからGoogleスプレッドシートを操作することで、入力・保存・初期化といった一連の処理を自動化しています。

スプレッドシートの構成

スプレッドシートは、主に以下の2つのシートを利用しています。

シート名 用途
入力 当日の食事内容を手動入力する
記録用 過去の食事内容を管理する

「入力」シートは当日分の入力に使用し、「記録用」シートには過去のデータが残されていきます。

実際のシート構成は以下のようになっています。

入力シート
記録用シート

なぜGASを使ったのか

上記シート構成であれば、完全手動管理でも問題ないのではないか?という疑問も湧くと思います。

たしかに、完全手動で管理しても問題ありません。

ただ、自分自身ずぼらで忘れっぽい性格なため、シートに書き写すという行為を忘れたり、前日分が書いてあるところにまとめて書き足してしまうことが多々あります。

また、上記作業が毎日のように発生してしまうということが地味にめんどくさいこともあり、今回書き写すところを自動化するに至りました。

実装

今回の処理は Memory() という関数にまとめています。

まず、「入力」と「記録用」のシートを取得します。

let Input = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("入力");
let memory = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("記録用");

次に、前日の日付を取得します。

let day = new Date();
day.setDate(day.getDate() - 1);
let Yesterday = Utilities.formatDate(day, "JST", "yyyyMMdd");

ここでは、現在の日付から1日戻し、yyyyMMdd の形式にしています。
例えば2026年8月31日に実行すると、前日の2026年8月30日を

20260830

として取得します。

データを記録用シートへコピーする

入力シートにあるデータを、記録用シートへ値としてコピーします。

Input.getRange(2,1,IRow,3)
  .copyTo(
    memory.getRange(memoryRow,2).offset(1,0),
    SpreadsheetApp.CopyPasteType.PASTE_VALUES,
    false
  );

ここでは数式や書式ではなく、値としてコピーしています。

PASTE_VALUESを指定することで、入力シート側の数式や書式ではなく、その時点の計算結果だけを記録用シートへ貼り付けます。

日付を設定する

コピーしたデータの隣に、前日の日付を記載します。

for (i = 0; i < IRow-1; i++){
  memory.getRange(memoryRow + i,1)
    .offset(1,0)
    .setValue(Yesterday);
}

これによって、記録用シートではどの日の食事データなのかを後から確認できます。

入力シートをクリアする

最後に、入力シートの内容をクリアします。

Input.getRange(2,1,1000,3).clearContent();

入力欄を空にすることで、次の日はそのまま新しいデータを入力できます。

処理の流れ

全体の処理をまとめると、以下のようになります。

食事データを「入力」シートに入力
       ↓
翌日の早朝にGASを実行(トリガー)
       ↓
「記録用」シートへデータをコピー
       ↓
前日の日付を付与
       ↓
「入力」シートをクリア

まとめ

今回は、GoogleスプレッドシートとGASを使って、カロリーとタンパク質を管理してみました。

スマホやPCでサクッと記録ができて、すごく管理が捗ってます。
あと、Googleのサービスを使っているため、記録したデータをGeminiに読み取らせて、食事内容についてアドバイスをもらえるのも便利でした。

いずれは、体重や体脂肪率の管理も便利にできるようにすると、面白いかなとも思いました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?