1. ホーム
  2. 記事一覧
  3. Googleスプレッドシートでデータを口座ごとに分けて合計金額を表示する方法

2024.06.17

Googleスプレッドシートでデータを口座ごとに分けて合計金額を表示する方法

この記事では、Googleスプレッドシートを使用してデータを口座ごとに分け、各シートの最後の行に月間および年間の合計金額を表示する方法を説明します。スクリプトを使用して自動化することで、手作業でのミスを防ぎ、効率的に作業を進めることができます。さらに、このアプローチはデジタルトランスフォーメーション(DX)につながり、業務の効率化を図ることができます。

なぜスクリプトを使うのか?

手作業の問題点

手動でデータを管理すると、以下のような問題が発生しがちです。この対応に追われると担当者は非常に疲れてしまいます。

  • データのミスや漏れ
  • 作業時間の長期化
  • データの一貫性の欠如

スクリプトの利点

スクリプトを使用することで、これらの問題を簡単に解決できます。スクリプトは、手作業では困難なデータ操作を迅速かつ正確に行うための自動化ツールです。具体的な利点は次のとおりです。

  • ミスの削減

    データの入力や操作における人為的なミスを減らせます。

  • 時間の節約

    手動で行うと時間がかかる作業を瞬時に実行できます。

  • 一貫性の向上

    同じ操作を繰り返し実行することで、データの一貫性を保てます。

DX(デジタルトランスフォーメーション)への貢献

スクリプトの使用はDXの一環として捉えることができます。DXは、デジタル技術を活用して業務を革新し、効率化を図ることを目的としています。スクリプトを用いた自動化により、日常的な業務プロセスが改善され、より高い生産性と正確性が実現できます。

スクリプトを使用した自動化の具体例

サンプルデータ

以下のようなサンプルデータを使用します。シート名は「データシート」とします。スプレッドシート名は適当で構いません。

費目月間年間口座
サブスク¥2,000¥24,000口座A
通信費¥5,000¥60,000口座A
交通費¥3,000¥36,000口座A
食費¥30,000¥360,000口座B
外食費用¥10,000¥120,000口座B
医療費¥5,000¥60,000口座A
保険¥2,500¥30,000口座B
その他¥1,500¥18,000口座C

このデータをもとにGoogle Apps Scriptを使用して、自動化の手順を説明します。

Google Apps Scriptとは?

Google Apps Scriptは、Googleのアプリケーションを自動化するためのスクリプト言語です。これはVBA(Visual Basic for Applications)に似ており、特にExcelの自動化に慣れている人にとっては親しみやすいものです。しかし、Google Apps Script(GAS)はGoogleのクラウドサービスと統合されているため、インターネットを介して簡単にデータの操作や自動化が可能です。

GASの利点

GASを習得すると、以下のような利点があります。

  • クラウドとの連携

    Googleドライブ、Googleスプレッドシート、Gmailなど、Googleのクラウドサービスと簡単に統合できます。

  • 自動化の強力なツール

    日常業務の自動化やデータ処理の効率化に役立ちます。

  • アクセスの簡便さ

    ブラウザ上で動作し、インターネット接続さえあればどこからでもスクリプトを実行できます。

GASを使いこなすことで、業務の効率化やデータ管理の精度向上が期待でき、ビジネス環境において非常に役立つスキルとなります。

手順

1. Googleスプレッドシートを開く

Googleドライブにアクセスし、新しいスプレッドシートを作成します。シート名を「データシート」に変更し、上記のサンプルデータを入力します。

2. Google Apps Scriptエディタを開く

次に、スプレッドシートのメニューから 拡張機能Apps Script を選択します。これにより、新しいプロジェクトが自動的に作成されます。

3. スクリプトを入力する

以下のスクリプトをエディタにコピーして貼り付けます。このスクリプトは、データを口座ごとに分け、各シートの最後の行に月間および年間の合計金額を表示します。

function splitDataByAccount() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = 'データシート'; // 確認したシート名をここに指定
  Logger.log('Attempting to get sheet: ' + sheetName);
  var sheet = ss.getSheetByName(sheetName);
  if (!sheet) {
    // シートが見つからない場合のエラーメッセージ
    SpreadsheetApp.getUi().alert('指定されたシートが見つかりません。シート名を確認してください。');
    Logger.log('Sheet not found: ' + sheetName);
    return;
  }
  Logger.log('Sheet found: ' + sheetName);
  
  var data = sheet.getDataRange().getValues();
  var headers = data[0];
  var accountIndex = headers.indexOf('口座'); // 口座列のインデックスを取得
  var monthlyAmountIndex = headers.indexOf('月間'); // 月間金額列のインデックスを取得
  var yearlyAmountIndex = headers.indexOf('年間'); // 年間金額列のインデックスを取得
  var accountData = {};
  
  // データを口座ごとにグループ化
  for (var i = 1; i < data.length; i++) {
    var row = data[i];
    var account = row[accountIndex];
    if (account === "") {
      continue; // 口座名が空白の場合はスキップ
    }
    if (!accountData[account]) {
      accountData[account] = [];
    }
    accountData[account].push(row);
  }
  
  // 各口座ごとに新しいシートを作成しデータをコピー
  for (var account in accountData) {
    var newSheet = ss.getSheetByName(account);
    if (!newSheet) {
      newSheet = ss.insertSheet(account);
    } else {
      newSheet.clear(); // 既存のシートをクリア
    }
    newSheet.appendRow(headers); // ヘッダーをコピー
    var rows = accountData[account];
    var totalMonthlyAmount = 0;
    var totalYearlyAmount = 0;
    for (var j = 0; j < rows.length; j++) {
      newSheet.appendRow(rows[j]);
      var monthlyAmount = rows[j][monthlyAmountIndex];
      var yearlyAmount = rows[j][yearlyAmountIndex];
      if (typeof monthlyAmount === 'string') {
        monthlyAmount = parseFloat(monthlyAmount.replace('¥', '').replace(/,/g, '')); // 月間金額を数値に変換
      }
      if (typeof yearlyAmount === 'string') {
        yearlyAmount = parseFloat(yearlyAmount.replace('¥', '').replace(/,/g, '')); // 年間金額を数値に変換
      }
      totalMonthlyAmount += monthlyAmount; // 月間金額を合計
      totalYearlyAmount += yearlyAmount; // 年間金額を合計
    }
    // 合計金額を表示
    newSheet.appendRow(['合計', '¥' + totalMonthlyAmount.toLocaleString(), '¥' + totalYearlyAmount.toLocaleString(), '', '']);
  }
  
  SpreadsheetApp.getUi().alert('口座ごとにシートを分ける処理が完了しました。');
  Logger.log('Process completed.');
}

4. スクリプトを保存し、実行する

エディタの ファイル保存 を選択してスクリプトを保存し、ツールバーの実行ボタン(再生アイコン)をクリックしてスクリプトを実行します。スプレッドシートのタブに移動してみてください。

5. 確認メッセージ

スクリプトが実行されると、「口座ごとにシートを分ける処理が完了しました。」というアラートが表示されます。

6. 結果の確認

スクリプトが正常に実行されると、スプレッドシート内に「口座A」「口座B」「口座C」のシートが作成され、それぞれのシートに対応するデータがコピーされます。各シートの最後の行には「合計」というラベルとともに、月間および年間の合計金額が表示されます。

スクリプトの応用例

フィルタリングとデータの追加

スクリプトを使えば、単にデータを口座ごとに分けるだけでなく、特定の条件に基づいてデータをフィルタリングしたり、新しいデータを追加することも可能です。たとえば、特定の月間支出が一定金額を超える項目のみを抽出するスクリプトや、新しい列を追加して計算結果を保存するスクリプトを作成することができます。

例:月間支出が10,000円以上の項目を抽出するスクリプト

以下のスクリプトは、月間支出が10,000円以上の項目のみを新しいシートに抽出します。

function filterHighMonthlyExpenses() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = 'データシート';
  var sheet = ss.getSheetByName(sheetName);
  if (!sheet) {
    SpreadsheetApp.getUi().alert('指定されたシートが見つかりません。シート名を確認してください。');
    return;
  }
  
  var data = sheet.getDataRange().getValues();
  var headers = data[0];
  var monthlyAmountIndex = headers.indexOf('月間');
  
  var filteredData = data.filter(function(row, index) {
    if (index === 0) return true; // ヘッダー行を保持
    var monthlyAmount = parseFloat(row[monthlyAmountIndex].replace('¥', '').replace(/,/g, ''));
    return monthlyAmount >= 10000;
  });
  
  var newSheet = ss.getSheetByName('HighMonthlyExpenses');
  if (!newSheet) {
    newSheet = ss.insertSheet('HighMonthlyExpenses');
  } else {
    newSheet.clear();
  }
  newSheet.getRange(1, 1, filteredData.length, filteredData[0].length).setValues(filteredData);
  SpreadsheetApp.getUi().alert('月間支出が10,000円以上の項目を抽出しました。');
}

このように、Google Apps Scriptを活用すれば、さまざまなデータ操作を自動化することができます。業務の効率化やデータ分析の精度向上に大いに役立ちます。

まとめ

この記事では、Googleスプレッドシートを使用してデータを口座ごとに分け、各シートの最後の行に月間および年間の合計金額を表示する方法を説明しました。スクリプトを使用することで、手作業のミスを防ぎ、作業効率を大幅に向上させることができます。さらに、このような自動化はデジタルトランスフォーメーション(DX)の一環として、業務の革新に貢献します。

Google Apps Script(GAS)を身につけることで、日常の業務をより効率的に、そして正確に行うことができるようになります。これからも学び続けることで、業務の改善だけでなく、自分自身のスキルアップにも大いに役立ちます。評価が上がること間違いなしです!

参考資料

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 今すぐ読む

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事