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

【GAS】別ブックのデータをアクティブシートに転記する

【GAS】別ブックのデータをアクティブシートに転記する GAS

別のシートからアクティブシートに転記する

GAS(Google Apps Script)を使用して、別のスプレッドシートからデータを取得し、アクティブなスプレッドシートに転記する方法は次のようになります。

function myFunction() {
  var ss = SpreadsheetApp.openById('スプレッドシートID');
  var sheet = ss.getSheetByName('シート1');
  var data = sheet.getDataRange().getValues();
  var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  activeSheet.getRange(1, 1, data.length, data[0].length).setValues(data);
}

解説

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

var ss = SpreadsheetApp.openById('スプレッドシートID');

2.データを取得する

var sheet = ss.getSheetByName('シート名');
var data = sheet.getDataRange().getValues();

3.アクティブなスプレッドシートにデータを転記する

var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
activeSheet.getRange(1, 1, data.length, data[0].length).setValues(data);

これにより、別のスプレッドシートからデータを取得し、アクティブなスプレッドシートに転記することができます。ただし、転記先のスプレッドシートに十分な権限があることを確認する必要があります。また、スプレッドシートIDやシート名は、それぞれのスプレッドシートに合わせて変更する必要があります。

指定したシートに転記する場合

5行目の「指定したシート名」の箇所を転記する先のシート名に設定する

function myFunction() {
var ss = SpreadsheetApp.openById('スプレッドシートID');
var sheet = ss.getSheetByName('シート1');
var data = sheet.getDataRange().getValues();
var targetSheet = ss.getSheetByName('指定したシート名');
targetSheet.getRange(1, 1, data.length, data[0].length).setValues(data);
}

アクティブなスプレッドシートの右隣りに新規シートを作成して貼り付け

var activeSheet = SpreadsheetApp.getActiveSpreadsheet();
var newSheet = activeSheet.insertSheet();
newSheet.setName('新しいシート名');

別のスクリプト

別のスプレットシートの特定のシートをアクティブシートに貼り付け

function copyDataFromOtherSheet() {
  // 1. 取得元スプレッドシートの情報
  var sheetName = "<sheet-name>"; // 取得するシート名
  var spreadsheetId = "<spreadsheet-id>"; // 取得元スプレッドシートのID

  // 2. アクティブなスプレッドシートとシートの情報
  var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheet = activeSpreadsheet.getActiveSheet();

  // 3. 取得元スプレッドシートのシートを取得
  var sourceSpreadsheet = SpreadsheetApp.openById(spreadsheetId);
  var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);

  // 4. データを取得してアクティブなスプレッドシートに転記
  var data = sourceSheet.getDataRange().getValues(); // データを取得
  activeSheet.getRange(1, 1, data.length, data[0].length).setValues(data); // データをアクティブなスプレッドシートに転記
}

解説

  1. 取得元スプレッドシートの情報を指定します。sheetName変数には取得するシート名、spreadsheetId変数には取得元スプレッドシートのIDを指定します。
    • <sheet-name><spreadsheet-id>を取得元スプレッドシートのシート名とIDに置き換える必要があります
  2. アクティブなスプレッドシートとシートの情報を取得します。activeSpreadsheet変数にはアクティブなスプレッドシートのオブジェクトを、activeSheet変数にはアクティブなシートのオブジェクトを取得します。
  3. 取得元スプレッドシートのシートを取得します。sourceSpreadsheet変数には取得元スプレッドシートのオブジェクトを、sourceSheet変数には取得するシートのオブジェクトを取得します。
  4. 取得元スプレッドシートのデータを取得し、アクティブなスプレッドシートに転記します。data変数には取得したデータを、activeSheet.getRange()メソッドを使用してアクティブなスプレッドシートの指定されたセル範囲に転記します。

別のスクリプト

別のスプレットシートの特定のシートにあるデータをアクティブシートに転記する

function copyDataFromAnotherSpreadsheet() {
  var sourceSpreadsheetId = "<source-spreadsheet-id>"; // コピー元のスプレッドシートIDを入力
  var sourceSheetName = "Sheet1"; // コピー元のシート名を入力

  var sourceSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetId);
  var sourceSheet = sourceSpreadsheet.getSheetByName(sourceSheetName);

  var sourceData = sourceSheet.getDataRange().getValues();
  
  var targetSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var targetSheet = targetSpreadsheet.insertSheet();

  targetSheet.getRange(1, 1, sourceData.length, sourceData[0].length).setValues(sourceData);
}

解説

  1. copyDataFromAnotherSpreadsheet():関数の名前です。
  2. var sourceSpreadsheetId = "<source-spreadsheet-id>";:コピー元のスプレッドシートのIDを指定するための変数です。<source-spreadsheet-id>をコピー元のスプレッドシートのIDに置き換えてください。
  3. var sourceSheetName = "Sheet1";:コピー元のスプレッドシート内のコピー元のシートの名前を指定するための変数です。"Sheet1"をコピー元のシート名に置き換えてください。
  4. var sourceSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetId);:指定されたIDのスプレッドシートを開くための変数です。
  5. var sourceSheet = sourceSpreadsheet.getSheetByName(sourceSheetName);:指定された名前のシートを取得するための変数です。
  6. var sourceData = sourceSheet.getDataRange().getValues();:シート内のデータを取得するための変数です。getDataRange()は、シート内のすべてのセルを含む範囲を取得します。getValues()は、この範囲内のデータを二次元配列として取得します。
  7. var targetSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();:アクティブなスプレッドシートを取得するための変数です。
  8. var targetSheet = targetSpreadsheet.insertSheet();:アクティブなスプレッドシートに新しいシートを挿入するための変数です。
  9. targetSheet.getRange(1, 1, sourceData.length, sourceData[0].length).setValues(sourceData);:新しいシートにデータを貼り付けるためのコードです。getRange(1, 1, sourceData.length, sourceData[0].length)は、新しいシートの最初のセルからデータを貼り付ける範囲を指定します。setValues(sourceData)は、指定された範囲にデータを貼り付けます。sourceDataは、コピー元のスプレッドシートから取得したデータの二次元配列です。

別シートの特定のセルの値を転記

function myFunction() {
  const ss = SpreadsheetApp.openByUrl("スプレットシートのURLを記入"); // スプレッドシートを指定
  const sheet = ss.getSheets()[0]; // シートを指定

  const recipient = sheet.getRange(1, 1).getValue(); // 1行目、1列目を取得
  console.log(recipient);
}

別のスプレッドシートのセルの値を取得する方法

1.getValue() メソッドを使用する方法 指定されたセルの値を取得す

function getCellValue() {
  var sheet = SpreadsheetApp.openById('スプレッドシートのID').getSheetByName('シートの名前');
  var cell = sheet.getRange('A1');
  var value = cell.getValue();
  Logger.log(value);
}

2.importRange() 関数を使用する方法 指定された範囲の値を取得

function getCellValue() {
  var value = SpreadsheetApp.openById('スプレッドシートのID').getSheetByName('シートの名前').getRange('A1').getValue();
  Logger.log(value);
}

3.query() 関数を使用する方法 別のスプレッドシートのデータをクエリーにする

function getCellValue() {
  var query = 'SELECT A1 FROM シートの名前';
  var value = SpreadsheetApp.openById('スプレッドシートのID').getSheetByName('シートの名前').query(query).getValues()[0][0];
  Logger.log(value);
}

別のスプレッドシートからデータをアクティブシートに転記する

1.getRange() メソッドを使用する方法 転記先のセルを指定

function copyData() {
  var sourceSheet = SpreadsheetApp.openById('元のスプレッドシートのID').getSheetByName('元のシートの名前');
  var sourceCell = sourceSheet.getRange('A1');
  var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var targetCell = targetSheet.getRange('B2');
  targetCell.setValue(sourceCell.getValue());
}

転記元のスプレットシートのID、シートの名前、セルを指定して、
アクティブシートの指定したセルに貼付け

2.copyTo() メソッドを使用する方法 元のセルの内容を複製して、転記先のセルに貼り付け

function copyData() {
  var sourceSheet = SpreadsheetApp.openById('元のスプレッドシートのID').getSheetByName('元のシートの名前');
  var sourceCell = sourceSheet.getRange('A1');
  var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var targetCell = targetSheet.getRange('B2');
  sourceCell.copyTo(targetCell);
}

3.setValues() メソッドを使用する方法 元のセルの内容を取得して、転記先のセルに設定

function copyData() {
  var sourceSheet = SpreadsheetApp.openById('元のスプレッドシートのID').getSheetByName('元のシートの名前');
  var sourceCell = sourceSheet.getRange('A1');
  var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var targetCell = targetSheet.getRange('B2');
  var value = sourceCell.getValue();
  targetCell.setValues([[value]]);
}

別のスプレッドシートからデータを取得し、新しいシートに転記する

function copyDataFromOtherSheet() {
  // 1. 取得元スプレッドシートの情報
  var sheetName = "<sheet-name>"; // 取得するシート名
  var spreadsheetId = "<spreadsheet-id>"; // 取得元スプレッドシートのID

  // 2. 新規シートの作成
  var date = new Date();
  var formattedDate = Utilities.formatDate(date, "GMT+9", "yyyy/MM/dd HH:mm:ss"); // 現在の日付と時刻を取得
  var newSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(formattedDate); // 新しいシートを作成
  var newSheetName = formattedDate + "_" + sheetName;
  newSheet.setName(newSheetName); // シート名を設定

  // 3. 取得元スプレッドシートのシートを取得
  var sourceSpreadsheet = SpreadsheetApp.openById(spreadsheetId);
  var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);

  // 4. データを取得して新規シートに転記
  var data = sourceSheet.getDataRange().getValues(); // データを取得
  newSheet.getRange(1, 1, data.length, data[0].length).setValues(data); // データを新規シートに転記
}

解説

  1. 取得元スプレッドシートの情報を指定します。sheetName変数には取得するシート名、spreadsheetId変数には取得元スプレッドシートのIDを指定します。
    • <sheet-name><spreadsheet-id>を取得元スプレッドシートのシート名とIDに置き換える必要があります
  2. 新しいシートを作成し、シート名を設定します。現在の日付と時刻を含むシート名を作成するために、Utilities.formatDateを使用して、現在の日付と時刻を取得します。SpreadsheetApp.getActiveSpreadsheet()を使用して、アクティブなスプレッドシートを取得し、insertSheetを使用して、新しいシートを作成します。newSheet.setNameを使用して、シート名を設定します。
  3. 指定されたスプレッドシートからデータを取得するために、openByIdを使用してスプレッドシートを開き、getSheetByNameを使用してシートを取得します。
  4. getDataRangeを使用してデータを取得し、setValuesを使用して新しいシートに転記します。

2つのスプシデータを取り込み、新規シートを作成して転記する

function copyDataFromOtherSheet() {
  // 1. スプレッドシート1の情報
  var sheetName1 = "<sheet-name>"; // 取得するシート名
  var spreadsheetId1 = "<spreadsheet-id>"; // 取得元スプレッドシートのID

  // 2. スプレッドシート2の情報
  var sheetName2 = "<sheet-name>"; // 取得するシート名
  var spreadsheetId2 = "<spreadsheet-id>"; // 取得元スプレッドシートのID

  // 3. 新規シートの作成
  var date = new Date();
  var formattedDate = Utilities.formatDate(date, "GMT+9", "yyyy/MM/dd HH:mm:ss"); // 現在の日付と時刻を取得
  var newSheet1 = SpreadsheetApp.getActiveSpreadsheet().insertSheet(formattedDate + "_" + sheetName1); // 新しいシートを作成
  var newSheet2 = SpreadsheetApp.getActiveSpreadsheet().insertSheet(formattedDate + "_" + sheetName2); // 新しいシートを作成

  // 4. スプレッドシート1のデータを取得して新規シートに転記
  var sourceSpreadsheet1 = SpreadsheetApp.openById(spreadsheetId1);
  var sourceSheet1 = sourceSpreadsheet1.getSheetByName(sheetName1);
  var data1 = sourceSheet1.getDataRange().getValues(); // データを取得
  newSheet1.getRange(1, 1, data1.length, data1[0].length).setValues(data1); // データを新規シートに転記

  // 5. スプレッドシート2のデータを取得して新規シートに転記
  var sourceSpreadsheet2 = SpreadsheetApp.openById(spreadsheetId2);
  var sourceSheet2 = sourceSpreadsheet2.getSheetByName(sheetName2);
  var data2 = sourceSheet2.getDataRange().getValues(); // データを取得
  newSheet2.getRange(1, 1, data2.length, data2[0].length).setValues(data2); // データを新規シートに転記
}

解説

  • まず、1つ目のスプレッドシートの情報を指定します。変数 sheetName1 には取得するシート名、spreadsheetId1 には取得元スプレッドシートのIDを設定します。同様に、2つ目のスプレッドシートの情報を指定します。
  • 次に、新しいシートを作成します。変数 date に現在の日付と時刻を取得し、formattedDate には "yyyy/MM/dd HH:mm:ss" 形式でフォーマットされた日付と時刻を格納します。そして、insertSheet() メソッドを使用して新しいシートを作成し

2つのスプシインポート後、マッチングでカラーで抽出する

function OtherSheet() {
   // 1. 取得元スプレッドシートの情報
  var sheet1Name = "<シート1名>"; // 取得するシート1名
  var spreadsheet1Id = <シート1のID>>"; // 取得元スプレッドシート1のID
  var sheet2Name = "<シート2名>"; // 取得するシート2名
  var spreadsheet2Id = "<シート2のID>"; // 取得元スプレッドシート2のID

  // 2. 新規シートの作成
  var date = new Date();
  var formattedDate = Utilities.formatDate(date, "GMT+9", "yyyy/MM/dd HH:mm:ss"); // 現在の日付と時刻を取得
  var newSheet1 = SpreadsheetApp.getActiveSpreadsheet().insertSheet(formattedDate + "_" + sheet1Name); // 新しいシート1を作成
  var newSheet2 = SpreadsheetApp.getActiveSpreadsheet().insertSheet(formattedDate + "_" + sheet2Name); // 新しいシート2を作成

  // 3. 取得元スプレッドシートのシートを取得
  var sourceSpreadsheet1 = SpreadsheetApp.openById(spreadsheet1Id);
  var sourceSheet1 = sourceSpreadsheet1.getSheetByName(sheet1Name);
  var sourceSpreadsheet2 = SpreadsheetApp.openById(spreadsheet2Id);
  var sourceSheet2 = sourceSpreadsheet2.getSheetByName(sheet2Name);

  // 4. データを取得して新規シートに転記
  var data1 = sourceSheet1.getDataRange().getValues(); // データ1を取得
  newSheet1.getRange(1, 1, data1.length, data1[0].length).setValues(data1); // データ1を新規シート1に転記
  var data2 = sourceSheet2.getDataRange().getValues(); // データ2を取得
  newSheet2.getRange(1, 1, data2.length, data2[0].length).setValues(data2); // データ2を新規シート2に転記

  // 5. データの突合と背景色の設定
  var lastRow1 = newSheet1.getLastRow();
  var lastRow2 = newSheet2.getLastRow();
  var dataRange1 = newSheet1.getRange(1, 1, lastRow1, 1);
  var dataRange2 = newSheet2.getRange(1, 1, lastRow2, 1);
  var values1 = dataRange1.getValues();
  var values2 = dataRange2.getValues();
  var backgrounds1 = dataRange1.getBackgrounds();
  var backgrounds2 = dataRange2.getBackgrounds();
  
 for (var i = 0; i < values1.length; i++) {
    for (var j = 0; j < values2.length; j++) {
      if (values1[i][0] == values2[j][0]) { // A列の値が一致したら
        dataRange1.getCell(i+1, 1).setBackground('#F08080'); // 新規シート1の該当セルをピンク色に
        dataRange2.getCell(j+1, 1).setBackground('#F08080'); // 新規シート2の該当セルをピンク色に
        break;
      }
    }
  }
}

解説

  1. 取得元スプレッドシートの情報を設定する
    • 最初に、取得元スプレッドシートの情報を設定します。これらは、取得する2つのシートの名前と、それぞれのスプレッドシートのIDです。
  2. 新しいシートの作成
    • 次に、新しいシートを作成します。日付と時刻を取得し、その値を新しいシート名に含めます。
    • SpreadsheetApp.getActiveSpreadsheet() は、現在開いているスプレッドシートの情報を取得します。
  3. 取得元スプレッドシートのシートを取得する
    • SpreadsheetApp.openById(id) は、指定されたIDのスプレッドシートを開きます。そして、 getSheetByName(name) は、指定された名前のシートを取得します。
  4. データを取得して新規シートに転記する
    • 取得元の2つのスプレッドシートからデータを取得し、新しく作成した2つのシートに転記しています。getDataRange() メソッドは、対象のシートのデータが入力されている範囲を取得します。そして getValues() メソッドは、その範囲内のデータを二次元配列として取得します。setValues() メソッドは、指定した範囲に二次元配列の値をセットするメソッドです。
  5. データの突合と背景色の設定
    • 新しく作成した2つのシートのA列を比較して、値が一致するセルの背景色をピンク色に変更しています。getLastRow() メソッドは、範囲の最終行を取得します。getRange() メソッドは、指定された範囲のセルを取得します。getBackgrounds() メソッドは、対象の範囲の背景色を取得します。
    • その後、2つの配列の要素を順番に比較していきます。もし、values1のi番目の要素とvalues2のj番目の要素が一致した場合、新しいシート1と2の該当するセルの背景色をピンク色に設定します。

上のスクリプトで部分一致の場合

function OtherSheet() {
  // 1. 取得元スプレッドシートの情報
  var sheet1Name = "<シート1名>"; // 取得するシート1名
  var spreadsheet1Id = <シート1のID>>"; // 取得元スプレッドシート1のID
  var sheet2Name = "<シート2名>"; // 取得するシート2名
  var spreadsheet2Id = "<シート2のID>"; // 取得元スプレッドシート2のID

  // 2. 新規シートの作成
  var date = new Date();
  var formattedDate = Utilities.formatDate(date, "GMT+9", "yyyy/MM/dd HH:mm:ss"); // 現在の日付と時刻を取得
  var newSheet1 = SpreadsheetApp.getActiveSpreadsheet().insertSheet(formattedDate + "_" + sheet1Name); // 新しいシート1を作成
  var newSheet2 = SpreadsheetApp.getActiveSpreadsheet().insertSheet(formattedDate + "_" + sheet2Name); // 新しいシート2を作成

  // 3. 取得元スプレッドシートのシートを取得
  var sourceSpreadsheet1 = SpreadsheetApp.openById(spreadsheet1Id);
  var sourceSheet1 = sourceSpreadsheet1.getSheetByName(sheet1Name);
  var sourceSpreadsheet2 = SpreadsheetApp.openById(spreadsheet2Id);
  var sourceSheet2 = sourceSpreadsheet2.getSheetByName(sheet2Name);

  // 4. データを取得して新規シートに転記
  var data1 = sourceSheet1.getDataRange().getValues(); // データ1を取得
  newSheet1.getRange(1, 1, data1.length, data1[0].length).setValues(data1); // データ1を新規シート1に転記
  var data2 = sourceSheet2.getDataRange().getValues(); // データ2を取得
  newSheet2.getRange(1, 1, data2.length, data2[0].length).setValues(data2); // データ2を新規シート2に転記

  // 5. データの突合と背景色の設定
  var lastRow1 = newSheet1.getLastRow();
  var lastRow2 = newSheet2.getLastRow();
  var dataRange1 = newSheet1.getRange(1, 1, lastRow1, 1);
  var dataRange2 = newSheet2.getRange(1, 1, lastRow2, 1);
  var values1 = dataRange1.getValues();
  var values2 = dataRange2.getValues();
  var backgrounds1 = dataRange1.getBackgrounds();
  var backgrounds2 = dataRange2.getBackgrounds();

  for (var i = 0; i < values1.length; i++) {
  for (var j = 0; j < values2.length; j++) {
    if (values1[i][0].indexOf(values2[j][0]) !== -1) { // A列の値が部分一致したら
      dataRange1.getCell(i+1, 1).setBackground('#F08080'); // 新規シート1の該当セルをピンク色に
      dataRange2.getCell(j+1, 1).setBackground('#F08080'); // 新規シート2の該当セルをピンク色に
      break;
    }
  }
}

 

別のスクリプト

function OtherSheet() {
  // 1. 取得元スプレッドシートの情報
  var sheet1Name = "<シート1名>"; // 取得するシート1名
  var spreadsheet1Id = <シート1のID>>"; // 取得元スプレッドシート1のID
  var sheet2Name = "<シート2名>"; // 取得するシート2名
  var spreadsheet2Id = "<シート2のID>"; // 取得元スプレッドシート2のID

  // 2. 新規シートの作成
  var date = new Date();
  var formattedDate = Utilities.formatDate(date, "GMT+9", "yyyy/MM/dd HH:mm:ss"); // 現在の日付と時刻を取得
  var newSheet1 = SpreadsheetApp.getActiveSpreadsheet().insertSheet(formattedDate + "_" + sheet1Name); // 新しいシート1を作成
  var newSheet2 = SpreadsheetApp.getActiveSpreadsheet().insertSheet(formattedDate + "_" + sheet2Name); // 新しいシート2を作成

  // 3. 取得元スプレッドシートのシートを取得
  var sourceSpreadsheet1 = SpreadsheetApp.openById(spreadsheet1Id);
  var sourceSheet1 = sourceSpreadsheet1.getSheetByName(sheet1Name);
  var sourceSpreadsheet2 = SpreadsheetApp.openById(spreadsheet2Id);
  var sourceSheet2 = sourceSpreadsheet2.getSheetByName(sheet2Name);

  // 4. データを取得して新規シートに転記
  var data1 = sourceSheet1.getDataRange().getValues(); // データ1を取得
  newSheet1.getRange(1, 1, data1.length, data1[0].length).setValues(data1); // データ1を新規シート1に転記
  var data2 = sourceSheet2.getDataRange().getValues(); // データ2を取得
  newSheet2.getRange(1, 1, data2.length, data2[0].length).setValues(data2); // データ2を新規シート2に転記

 // 5. データの突合と背景色の設定
 var lastRow1 = newSheet1.getLastRow();
 var lastRow2 = newSheet2.getLastRow();
 var dataRange1 = newSheet1.getRange(1, 1, lastRow1, 1);
 var dataRange2 = newSheet2.getRange(1, 1, lastRow2, 1);
 var values1 = dataRange1.getValues();
 var values2 = dataRange2.getValues();
 var backgrounds1 = dataRange1.getBackgrounds();
 var backgrounds2 = dataRange2.getBackgrounds();

 for (var i = 0; i < values1.length; i++) {
 for (var j = 0; j < values2.length; j++) {
 if (values1[i][0].indexOf(values2[j][0]) !== -1) { // A列の値が部分一致したら
 dataRange1.getCell(i+1, 1).setBackground('#F08080'); // 新規シート1の該当セルをピンク色に
 dataRange2.getCell(j+1, 1).setBackground('#F08080'); // 新規シート2の該当セルをピンク色に
 break;
 }
 }
 }

 // 6. 新規シートのみ別ファイルで保存
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var newSheet1Id = newSheet1.getSheetId(); // 新規シート1のIDを取得
 var newSheet2Id = newSheet2.getSheetId(); // 新規シート2のIDを取得
 var newSpreadsheet = SpreadsheetApp.create("新規シート"); // 新しいスプレッドシートを作成
 var newSheet1Copy = ss.getSheetById(newSheet1Id).copyTo(newSpreadsheet); // 新規シート1を新しいスプレッドシートにコピー
 var newSheet2Copy = ss.getSheetById(newSheet2Id).copyTo(newSpreadsheet); // 新規シート2を新しいスプレッドシートにコピー
 newSpreadsheet.deleteSheet(newSpreadsheet.getSheetByName("Sheet1")); // デフォルトのシート1を削除
 newSheet1Copy.setName(newSheet1.getName()); // 新規シート1の名前を設定
 newSheet2Copy.setName(newSheet2.getName()); // 新規シート2の名前を設定
 var newSpreadsheetUrl = newSpreadsheet.getUrl(); // 新しいスプレッドシートのURLを取得
 Logger.log("新しいスプレッドシートのURLは " + newSpreadsheetUrl + " です。"); // ログに新しいスプレッドシートのURLを出力
 }

 // 7. ファイルIDの取得とログの出力
 var newSpreadsheetId = newSpreadsheetFile.getId();
 var newSpreadsheetUrl = "https://docs.google.com/spreadsheets/d/" + newSpreadsheetId;
 Logger.log(newSheet1.getName() + "のデータを保存しました。URL:" + newSpreadsheetUrl);
 var newSpreadsheetId2 = newSpreadsheetFile2.getId();
 var newSpreadsheetUrl2 = "https://docs.google.com/spreadsheets/d/" + newSpreadsheetId2;
 Logger.log(newSheet2.getName() + "のデータを保存しました。URL:" + newSpreadsheetUrl2);
}

解説

  • 6.新規シートのみ別ファイルで保存
    • このコードでは、まずSpreadsheetApp.create()を使用して新しいスプレッドシートを作成し、copyTo()を使用して新規シート1をコピーしています。次に、setName()を使用して新しいスプレッドシートのシート名を設定し、deleteSheet()を使用して不要なシートを削除しています。最後に、getId()を使用して新しいスプレッドシートのIDを取得しています。
  • 7.ファイルIDの取得とログの出力
    • 上記スクリプトの「保存先フォルダのID」には、保存先となるGoogle DriveのフォルダのIDを入力してください。また、スプレッドシートをExcelファイルに変換して保存するため、保存先のフォルダにExcelファイルを保存することができることを確認してください。

カラーで抽出を加える

function OtherSheet() {
   // 1. 取得元スプレッドシートの情報
  var sheet1Name = "<シート1名>"; // 取得するシート1名
  var spreadsheet1Id = <シート1のID>>"; // 取得元スプレッドシート1のID
  var sheet2Name = "<シート2名>"; // 取得するシート2名
  var spreadsheet2Id = "<シート2のID>"; // 取得元スプレッドシート2のID

  // 2. 新規シートの作成
  var date = new Date();
  var formattedDate = Utilities.formatDate(date, "GMT+9", "yyyy/MM/dd HH:mm:ss"); // 現在の日付と時刻を取得
  var newSheet1 = SpreadsheetApp.getActiveSpreadsheet().insertSheet(formattedDate + "_" + sheet1Name); // 新しいシート1を作成
  var newSheet2 = SpreadsheetApp.getActiveSpreadsheet().insertSheet(formattedDate + "_" + sheet2Name); // 新しいシート2を作成

  // 3. 取得元スプレッドシートのシートを取得
  var sourceSpreadsheet1 = SpreadsheetApp.openById(spreadsheet1Id);
  var sourceSheet1 = sourceSpreadsheet1.getSheetByName(sheet1Name);
  var sourceSpreadsheet2 = SpreadsheetApp.openById(spreadsheet2Id);
  var sourceSheet2 = sourceSpreadsheet2.getSheetByName(sheet2Name);

  // 4. データを取得して新規シートに転記
  var data1 = sourceSheet1.getDataRange().getValues(); // データ1を取得
  newSheet1.getRange(1, 1, data1.length, data1[0].length).setValues(data1); // データ1を新規シート1に転記
  var data2 = sourceSheet2.getDataRange().getValues(); // データ2を取得
  newSheet2.getRange(1, 1, data2.length, data2[0].length).setValues(data2); // データ2を新規シート2に転記

  // 5. データの突合と背景色の設定
  var lastRow1 = newSheet1.getLastRow();
  var lastRow2 = newSheet2.getLastRow();
  var dataRange1 = newSheet1.getRange(1, 1, lastRow1, 1);
  var dataRange2 = newSheet2.getRange(1, 1, lastRow2, 1);
  var values1 = dataRange1.getValues();
  var values2 = dataRange2.getValues();
  var backgrounds1 = dataRange1.getBackgrounds();
  var backgrounds2 = dataRange2.getBackgrounds();
  
 for (var i = 0; i < values1.length; i++) {
    for (var j = 0; j < values2.length; j++) {
      if (values1[i][0] == values2[j][0]) { // A列の値が一致したら
        dataRange1.getCell(i+1, 1).setBackground('#F08080'); // 新規シート1の該当セルをピンク色に
        dataRange2.getCell(j+1, 1).setBackground('#F08080'); // 新規シート2の該当セルをピンク色に
        break;
      }
    }
  
 var lastRow1 = newSheet1.getLastRow();
 var range1 = newSheet1.getRange(1, 1, lastRow1, newSheet1.getLastColumn());
 range1.createFilter();

 var pinkRows = range1.getBackgrounds()
                      .map((row, i) => row[0] === '#F08080' ? i + 1 : null)
                      .filter(row => row !== null);
 var filteredRange1 = range1.offset(1, 0)
                      .getRows()
                      .filter((_, i) => pinkRows.includes(i + 1));

 var newSpreadsheet = SpreadsheetApp.create("新しいスプレッドシートの名前");
 var newSheet = newSpreadsheet.getActiveSheet();
 newSheet.getRange(1, 1, filteredRange1.length, filteredRange1[0].length)
         .setValues(filteredRange1);
  }

コメント

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