見出し画像

【効率化の秘訣】GASで複数のスプレッドシートのデータを1つに統合する方法

「複数のスプレッドシートを1つのデータに統合したい!」
「GASで業務効率化ができるって聞いたけどよくわからん」
「非エンジニアでも簡単にできる方法教えて!」

本記事ではこのような方を対象に、GAS(Google App Script)を使って複数のスプレッドシートのデータを1つのスプレッドシートに統合する方法をご紹介します。

■本記事で分かること
GASを使って複数のスプレッドシートのデータを1つのスプレッドシートに統合する方法

■本記事の信頼性
私は、本業でChatGPTなどのAIツールを活用して効率化を実現し、ほぼ毎日定時で帰宅。家族との充実した時間を確保している「なおき」といいます。

AIと全く無縁の体育系で文系出身(数学Ⅱで終わりました)の私でもできる時短術をわかりやすく説明できるよう、Xなどを活用して情報発信しています。

この記事を読んでくださった方々が1分でも早く帰れることを願い、今回はGASを使って複数のスプレッドシートのデータを1つのスプレッドシートに統合する方法をご紹介します!


1.Googleスプレッドシートの準備


まずは、Googleスプレッドシートで重複した内容が記載されているデータを作成します。

今回は複数のスプレッドシートデータを1つに統合するため、2つのデータを作成します。

1つ目のシート名は「メインシート」
2つ目のシート名は「関連シート」とします。

2つの異なるシートを作成

ここで、統合するデータの関連性を持たせるため、「ID」だけは共通のデータとして設定します。

これにより「IDが3の修一さん」と「IDが4の人事の方」は異なるデータということが分かります。

今回は、メインシートを基準にデータを統合します。
このため、統合時にID3の修一さんには統合すべきデータがないということになります。

実際に統合した際の状況は最後の方に出てくるので、まずは作業を進めて下さい。

2.GAS(Google App Script)の設定


それでは次にGASの設定に入っていきます。

ステップ1:Apps Scriptを開く

Googleスプレッドシートのメニューバーから
「拡張機能」→「Apps Script」を選択します。

ステップ2:コードの入力と一部修正

Apps Scriptが開いたら、デフォルトで入力されている部分のコードを削除してください。

同じところに以下のコードをコピペします。

// スプレッドシートのIDとシート名を設定
var mainSpreadsheetId = 'メインデータソースのスプレッドシートID';
var relatedSpreadsheetId = '関連データソースのスプレッドシートID';
var mainSheetName = 'メインシート';
var relatedSheetName = '関連シート';
var outputSheetName = '統合データ';

function integrateData() {
  var mainSs = SpreadsheetApp.openById(mainSpreadsheetId);
  var relatedSs = SpreadsheetApp.openById(relatedSpreadsheetId);
  var mainSheet = mainSs.getSheetByName(mainSheetName);
  var relatedSheet = relatedSs.getSheetByName(relatedSheetName);
  
  var mainData = mainSheet.getDataRange().getValues();
  var relatedData = relatedSheet.getDataRange().getValues();
  var integratedData = [];

  // ヘッダー行の統合
  integratedData.push(mainData[0].concat(relatedData[0].slice(1))); // 2つ目のデータソースの最初の列(ID列)を除外して統合

  // メインデータソースの各行に対して関連データを検索し統合
  for (var i = 1; i < mainData.length; i++) {
    var rowData = mainData[i];
    var match = relatedData.find(row => row[0] === rowData[0]); // IDでマッチング
    if (match) {
      integratedData.push(rowData.concat(match.slice(1))); // ID以外のデータを統合
    } else {
      integratedData.push(rowData.concat(Array(relatedData[0].length - 1).fill(''))); // 関連データが見つからない場合は空のデータで埋める
    }
  }

  // 統合データを新しいシートに出力
  var outputSheet = mainSs.getSheetByName(outputSheetName) || mainSs.insertSheet(outputSheetName);
  outputSheet.clear(); // 既存のデータをクリア
  outputSheet.getRange(1, 1, integratedData.length, integratedData[0].length).setValues(integratedData);
}

このコードは、メインシートに対して関連シートから関連するデータを統合し、統合データというシートを新たに作成するコードです。

使用にあたってはご自身のスプレッドシートと同様の形式にしていく必要があるので、以下の部分を修正してください。

var mainSpreadsheetId = 'メインデータソースのスプレッドシートID';
var relatedSpreadsheetId = '関連データソースのスプレッドシートID';

「メインデータソースのスプレッドシートID」と「関連データソースのスプレッドシートID」の部分を実際のシートのIDと同じにしてください。

IDはそれぞれのスプレッドシートのURLの👇の部分です。

赤枠部分がID

実際に修正したコードは以下のようになります。
修正後は必ず保存マーク💾を押してください。

赤枠部分のみ変更すればOKです。

ステップ3:実行及び権限の承認

保存出来たら、「▷実行」の部分をクリックして関数integrateDataを実行します。

実行すると権限の承認を求められるので、以下の画像の赤枠部分をクリックしていってください。

3.GAS(Google App Script)の実行

ここまでの作業が終了したら、最初に作成したGoogleスプレッドシートに戻ってください。

メインシートのあった1つ目のスプレッドシートに「統合データ」が新たに作成され、メインシートに関連する部分だけが統合されていることが分かります。

ID3の修一は関連データがないので部署とアドレスは空白

以上で作業は終わりです!
お疲れ様でした!

4.まとめ

今回は、「GASを使って複数のスプレッドシートのデータを1つのスプレッドシートに統合する方法」をテーマに紹介しましたが、いかがだったでしょうか?

  1. 関連するデータを持つ2つのGoogleスプレッドシートの準備

  2. GAS(Google App Script)のコードに対する各ID入力

  3. GASの実行

上記の内容が実行できれば、ワンクリックで複数のスプレッドシートのデータを1つのスプレッドシートに統合できるようになります!

データベースが複数に渡り、1つ1つをコピペで結合していたような方は、今回のコードを実際に使用しているデータ形式にカスタマイズすることができれば、業務効率化につながるのではないでしょうか?

そして、ChatGPTで自分に合ったGASコードを作成するためのプロンプト集を作成しましたので、是非ご覧ください!

今回紹介した内容で皆さんの業務が少しでも効率化できれば、スキ、SNSでの紹介をしていただけると大変励みになりますので、何卒よろしくお願いします!

このほか、AI×時短術の知識をX(旧Twitter)で紹介していますので、是非フォローしてください!


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