例文を使って繰り返し業務を時短

【GAS】スプシをインポート、マッチングして最終列に転記

【GAS】スプシをインポート、マッチングして最終列に転記する GAS

アクティブなシートに別のスプシをインポートしてマッチングする

このGoogle Apps Script(GAS)のコードは、Googleスプレッドシート上で、2つの別のスプレッドシートファイルをインポートして、それらのデータを突き合わせるプログラムです。具体的には、以下の処理を行います。

概要(流れ)

  1. 自身のスプレッドシートを取得し、最後の行と最後の列を取得する。
  2. 1つ目の外部スプレッドシートを取得し、最後の行と最後の列を取得する。
  3. 1つ目の外部スプレッドシートのデータを自身のスプレッドシートにコピーする。
  4. 2つ目の外部スプレッドシートを取得し、最後の行と最後の列を取得する。
  5. 2つ目の外部スプレッドシートのデータと、自身のスプレッドシートのデータを突き合わせ、新しい列にマッチング結果を表示する。
  6. 2つ目の外部スプレッドシートを閉じ、削除する。
  7. 処理完了を通知する。

詳細解説

1.自身のスプレッドシートを取得し、最後の行と最後の列を取得する。
*現在アクティブなスプレッドシートを取得し、その最後の行と最後の列を取得しています。

var ss1 = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss1.getActiveSheet();
var lastRow1 = sheet1.getLastRow();
var lastColumn1 = sheet1.getLastColumn();

2.1つ目の外部スプレッドシートを取得し、最後の行と最後の列を取得する。
外部のスプレッドシートをURLから取得し、そのファイルIDを指定して、DriveAppでファイルを取得しています。その取得したファイルをopen()メソッドで開き、最初のシートを取得しています。また、そのシートの最後の行と最後の列を取得しています。

var file1 = DriveApp.getFileById(UrlFetchApp.fetch("https://docs.google.com/spreadsheets/d/【ファイルID】/export?format=xlsx").getBlob().setName('temp_file').getId());
var ss2 = SpreadsheetApp.open(file1);
var sheet2 = ss2.getSheets()[0];
var lastRow2 = sheet2.getLastRow();
var lastColumn2 = sheet2.getLastColumn();

3.1つ目の外部スプレッドシートのデータを自身のスプレッドシートにコピーする。

sheet1.getRange(1, 1, lastRow1, lastColumn1).clearContent();
sheet2.getRange(1, 1, lastRow2, lastColumn2).copyTo(sheet1.getRange(1, 1), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false

4.「突合処理」を行う
まず、myDicという空のオブジェクトを作成します。
その後、sheet3の2行目から最終行までを順番に読み取り、各行の1列目の値をキー、2列目の値を値として、myDicに格納していきます。つまり、sheet3のデータをキーと値のペアに変換して、myDicというオブジェクトに格納することで、データを効率的に扱えるようにします。

5.次に、sheet1の2行目から最終行までを順番に読み取ります。
各行の1列目の値をキーとして、myDicから値を取得します。もしmyDicにそのキーが存在している場合、sheet1の最終列にその値をセットします。このようにして、sheet1のデータを、sheet3のデータと突合し、一致する場合には値をセットすることができます。

最後に、sheet1の最終列に「新規追加」という文字列をセットしています。これは、突合い処理の結果、sheet3に存在するがsheet1に存在しないデータを示すためのものです。

 // 突合処理
  var myDic = {};
  for (var i = 2; i <= lastRow3; i++) {
    var key = sheet3.getRange(i, 1).getValue();
    var value = sheet3.getRange(i, 2).getValue();
    myDic[key] = value;
  }

 for (var i = 2; i <= lastRow1; i++) {
    var key = sheet1.getRange(i, 1).getValue();
    if (myDic[key]) {
      sheet1.getRange(i, lastColumn1 + 1).setValue(myDic[key]);
    }
  }

sheet1.getRange(1, lastColumn1 + 1).setValue("新規追加");

完全なコード

function importAndMatch() {
  // このスプレッドシート
  var ss1 = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss1.getActiveSheet();
  var lastRow1 = sheet1.getLastRow();
  var lastColumn1 = sheet1.getLastColumn();

  // 1つ目のインポートするファイルを開く
  var file1 = DriveApp.getFileById(UrlFetchApp.fetch("https://docs.google.com/spreadsheets/d/【ファイルID】/export?format=xlsx").getBlob().setName('temp_file').getId());
  var ss2 = SpreadsheetApp.open(file1);
  var sheet2 = ss2.getSheets()[0];
  var lastRow2 = sheet2.getLastRow();
  var lastColumn2 = sheet2.getLastColumn();

  // ファイルをインポート
  sheet1.getRange(1, 1, lastRow1, lastColumn1).clearContent();
  sheet2.getRange(1, 1, lastRow2, lastColumn2).copyTo(sheet1.getRange(1, 1), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);

  // 2つ目のインポートするファイルを開く
  var file2 = DriveApp.getFileById(UrlFetchApp.fetch("https://docs.google.com/spreadsheets/d/【ファイルID】/export?format=xlsx").getBlob().setName('temp_file').getId());
  var ss3 = SpreadsheetApp.open(file2);
  var sheet3 = ss3.getSheets()[0];
  var lastRow3 = sheet3.getLastRow();
  var lastColumn3 = sheet3.getLastColumn();

  // 突合処理
  var myDic = {};
  for (var i = 2; i <= lastRow3; i++) {
    var key = sheet3.getRange(i, 1).getValue();
    var value = sheet3.getRange(i, 2).getValue();
    myDic[key] = value;
  }

  for (var i = 2; i <= lastRow1; i++) {
    var key = sheet1.getRange(i, 1).getValue();
    if (myDic[key]) {
      sheet1.getRange(i, lastColumn1 + 1).setValue(myDic[key]);
    }
  }

  sheet1.getRange(1, lastColumn1 + 1).setValue("新規追加");

  // ファイルを閉じる
  ss3.getSpreadsheetTimeZone();
  ss3.saveAndClose();
  file2.setTrashed(true);

  sheet1.getRange("A1").activate();
  SpreadsheetApp.flush();

  SpreadsheetApp.getUi().alert("完了しました。");
}

コメント

タイトルとURLをコピーしました