

2023のシートの黄色セルをパイプラインというシートに抽出する方法につき、下記コードをApps
Scriptに入れてみましたが機能しませんでした。コード自体に誤りがあるのでしょうか。ご教示いただけますと幸いです。

[code]

    function extractYellowCells() {
      var sourceSheetName = "2023"; // 抽出したいデータのあるシート名
      var targetSheetName = "パイプライン"; // 抽出したデータを貼り付けるシート名
      var targetSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
      var sourceSheet = targetSpreadsheet.getSheetByName(sourceSheetName);
      var targetSheet = targetSpreadsheet.getSheetByName(targetSheetName);
      
      var sourceRange = sourceSheet.getDataRange();
      var targetRange = targetSheet.getRange(1, 1, sourceSheet.getLastRow(), sourceSheet.getLastColumn());
      var sourceValues = sourceRange.getBackgrounds();
      var targetValues = [];
      
      for (var i = 0; i < sourceValues.length; i++) {
        var row = [];
        for (var j = 0; j < sourceValues[i].length; j++) {
          if (sourceValues[i][j] == "#ffff00") { // #ffff00 は黄色のセルの背景色コードです
            row.push(sourceSheet.getRange(i + 1, j + 1).getValue());
          } else {
            row.push("");
          }
        }
        targetValues.push(row);
      }
      
      targetRange.setValues(targetValues);
    }
    
[/code]


CC BY-SA 4.0
2023-08-07T09:04:25.377
95873
2023-08-19T11:25:24.600
2023-08-07T09:09:24.660
3060
59404
question
google-apps-script google-spreadsheet
Googleスプレッドシートで黄色のセルだけを違うシートに抽出するマクロの作成方法


以下の通り書き換えてみて各セルの背景色の値を確認してみてはいかがですか？

**元のコード:**

[code]

      for (var i = 0; i < sourceValues.length; i++) {
        var row = [];
        for (var j = 0; j < sourceValues[i].length; j++) {
          if (sourceValues[i][j] == "#ffff00") { // #ffff00 は黄色のセルの背景色コードです
            row.push(sourceSheet.getRange(i + 1, j + 1).getValue());
          } else {
            row.push("");
          }
        }
        targetValues.push(row);
      }
    
[/code]

**修正例:**

[code]

      for (var i = 0; i < sourceValues.length; i++) {
        var row = [];
        for (var j = 0; j < sourceValues[i].length; j++) {
            row.push(sourceValues[i][j]);
        }
        targetValues.push(row);
      }
    
[/code]

それから背景色だけを配列に取得してforループ内で毎回getRange(...)getValue()していますが、同じセル範囲から背景色はcolorsという配列に、値をvaluesという配列にそれぞれ取得しておいて、forループのなかで背景色colors[i][j]が黄色である時のi,jのインデックスでvalues[i][j]をrowにプッシュするように変更すれば効率が良くなると思います。


CC BY-SA 4.0
2023-08-16T20:25:11.870
95958
2023-08-19T11:25:24.600
2023-08-19T11:25:24.600
3060
57654
95873
answer