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?

More than 1 year has passed since last update.

gasでスプレッドシートを差分比較するコード

Last updated at Posted at 2023-05-10
  function compareSheets() {
  // 比較する2つのスプレッドシートを指定
  var sheet1 = SpreadsheetApp.openById('スプレッドシート1のID').getSheetByName('シート名');
  var sheet2 = SpreadsheetApp.openById('スプレッドシート2のID').getSheetByName('シート名');

  // 2つのスプレッドシートのデータを取得
  var data1 = sheet1.getDataRange().getValues();
  var data2 = sheet2.getDataRange().getValues();

  // 2つのスプレッドシートの行数と列数を取得
  var numRows1 = sheet1.getLastRow();
  var numRows2 = sheet2.getLastRow();
  var numCols1 = sheet1.getLastColumn();
  var numCols2 = sheet2.getLastColumn();

  // 差分を格納する配列
  var diff = [];

  // スプレッドシート1にしか存在しない行を検索
  for (var i = 0; i < numRows1; i++) {
    var row1 = data1[i];
    var found = false;
    for (var j = 0; j < numRows2; j++) {
      var row2 = data2[j];
      if (row1.toString() == row2.toString()) {
        found = true;
        break;
      }
    }
    if (!found) {
      diff.push(["-"].concat(row1));
    }
  }

  // スプレッドシート2にしか存在しない行を検索
  for (var i = 0; i < numRows2; i++) {
    var row2 = data2[i];
    var found = false;
    for (var j = 0; j < numRows1; j++) {
      var row1 = data1[j];
      if (row2.toString() == row1.toString()) {
        found = true;
        break;
      }
    }
    if (!found) {
      diff.push(["+"].concat(row2));
    }
  }

  // 2つのスプレッドシートに共通する行で値が異なる行を検索
  for (var i = 0; i < numRows1; i++) {
    var row1 = data1[i];
    for (var j = 0; j < numRows2; j++) {
      var row2 = data2[j];
      if (row1.toString() == row2.toString()) {
        var rowDiff = [];
        for (var k = 0; k < numCols1; k++) {
          if (row1[k] != row2[k]) {
            rowDiff.push(k);
          }
        }
        if (rowDiff.length > 0) {
          var diffRow = ["*"].concat(row1);
          for (var k = 0; k < rowDiff.length; k++) {
            var col = rowDiff[k];
            diffRow[col + 1] = row2[col];
          }
          diff.push(diffRow);
        }
      }
    }
  }

  // 差分を出力するスプレッドシートを作成
  var diffSheet = SpreadsheetApp.create('差分').getActiveSheet();
   
  // 差分を出力するスプレッドシートにヘッダーを追加
  diffSheet.appendRow(["種類"].concat(sheet1.getDataRange().getValues()[0]));
  
  // 差分を出力するスプレッドシートに差分データを追加
  for (var i = 0; i < diff.length; i++) {
    diffSheet.appendRow(diff[i]);
  }

このコードはGoogle Apps Scriptで書かれたスプレッドシート上で動作するものです。
スプレッドシート1とスプレッドシート2のデータを比較し、異なるデータを含む新しいスプレッドシートを作成します。

このコードを実行するには、次の2つのスプレッドシートのIDを置き換える必要があります。

var sheet1 = SpreadsheetApp.openById('スプレッドシート1のID').getSheetByName('シート名');
var sheet2 = SpreadsheetApp.openById('スプレッドシート2のID').getSheetByName('シート名');

また、スプレッドシートのアクセス権限によっては、このコードを実行することができない場合があります。スプレッドシートのアクセス権限を確認し、適切な権限を与える必要があります。

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?