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-07-16

①コピーするスプレッドシートをフォルダに保存
②貼り付けたいスプレッドシートのIDを設定
③ ②のシート内の貼り付けたいシートのタブのIDを設定
④Sheet.getRangeでコピーしたいデータの範囲を指定
⑤SetValuesで貼り付け

基本的には、
コピーしたいファイルが保存されているフォルダのIDとタブの指定
コピーするファイルのIDとタブの指定
貼り付ける範囲の指定
で実行できます。
ただ、このままだと複数回実行した際に同じデータが上書きされずに
複数保存されてしますのでfor分とif分で条件を指定して保存したいデータだけ
貼り付けされるようにして下さい。

function test1() {
  // コピー
  var sheetMain = SpreadsheetApp.getActiveSheet();
  var files = DriveApp.getFolderById('元データが格納されているフォルダのID').getFiles();
  while (files.hasNext()) {
    var file = files.next();
    var sheet = SpreadsheetApp.open(file).getSheets()[2];
  }
  Logger.log("コピーが完了しました。");

  // 貼り付け
  var spreadsheet = SpreadsheetApp.openById('貼り付けたいシートのID'); // シートの指定
  var sheet2 = spreadsheet.getSheetByName('tabの名前'); // タブの指定

  aaa(sheet, sheet2);
}

function aaa(sheet, sheet2) {
  // コピー
  var dat = sheet.getDataRange().getValues();
  var numRow = dat.length;
  var copyRowCount = 0;
  for (var i = 10; i < numRow; i++) {
    if (dat[i][1] == "") {
      break;
    }
    copyRowCount++;
  }

  if (copyRowCount == 0) {
    return; // If there are no rows to copy, exit the function early
  }

  range = sheet.getRange(11, 1, copyRowCount, 32).getValues();
  Logger.log("コピーした範囲は " + sheet.getName() + "!" + sheet.getRange(11, 1, copyRowCount, 32).getA1Notation() + " です。");

  // 貼り付け
  var dat2 = sheet2.getDataRange().getValues();
  var currentDate = new Date();
  var month = currentDate.getMonth() + 1;
  var year = currentDate.getFullYear();
  var dateStrings = [];

  for (var i = 0; i < 4; i++) {
    var newDate = new Date(year, month - 1, i + 1, 16, 0, 0, 0);
    dateStrings.push(newDate.toLocaleDateString("en-US")); // スプレッドシート上の書式に合わせてロケールを指定
  }

  var numRow2 = dat2.length;
  for (var n = 1; n < numRow2; n++) {
    if (dateStrings.includes(sheet2.getRange(n, 38).getDisplayValue())) { // スプレッドシート上の表示値を取得して比較
      break;
    } else if (sheet2.getRange(n, 38).getDisplayValue() == "") { // スプレッドシート上の表示値を取得して比較
      break;
    }
  }
  range2 = sheet2.getRange(2, 38, copyRowCount, 32).setValues(range); // 範囲
  Logger.log("貼り付け範囲");
  Logger.log(range2.getValues());
}

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?