GASで繰り返し処理

リートンの回答

以下に指定の仕様に基づいたGoogle Apps Script (GAS) のコードを提供します。ただし、指定する会社名は "指定会社" としています。必要に応じて適宜変更してください。

```javascript
function updateSheetName() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRow = sheet.getLastRow();
  var company = "指定会社"; //ここに指定する会社名を入力

  // E列に先月の日付が入力されている最初のセルの行番号を取得
  var startRow = getStartRow(sheet, lastRow);

  // B列に入力されている会社名と指定する会社名が一致する行番号を取得し、
  // その行のA列にシート名を入力
  for (var i = startRow; i <= lastRow; i++) {
    var companyName = sheet.getRange(i, 2).getValue();
    if (companyName == company) {
      sheet.getRange(i, 1).setValue(sheet.getName());
    }
  }
}

function getStartRow(sheet, lastRow) {
  var date = new Date();
  date.setMonth(date.getMonth() - 1);
  date.setDate(1);
  for (var i = 1; i <= lastRow; i++) {
    var cellValue = sheet.getRange(i, 5).getValue();
    if (cellValue instanceof Date && 
        cellValue.getFullYear() == date.getFullYear() &&
        cellValue.getMonth() == date.getMonth()) {
      return i;
    }
  }
  return -1; //適切な行が見つからない場合
}
```

このコードは指定された仕様に基づいて作成されていますが、特定の会社名やシートの状況によっては微調整が必要かもしれません。具体的な問題があれば、もっと詳しい情報を提供していただくと助かります。


繰り返し処理の参考(リートン回答)
Google Apps Script (GAS)で二次元配列のデータを扱い、繰り返し処理を行う汎用的なコード例を以下に示します。このコードは、ある範囲のデータを読み取り、それぞれの行に対して何らかの操作を行い（この例では単純にログ出力しますが、ここを変更して任意の処理を実装できます）、結果を別の範囲に出力する基本的な流れを持っています。このコードはカスタマイズが可能であり、さまざまなケースに応じて調整することができます。

```javascript
function processTwoDimensionalArray() {
  // アクティブなスプレッドシートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // データを読み取る範囲を指定（例: A1:C3）
  var range = sheet.getRange('A1:C3');
  
  // 指定範囲のデータを二次元配列として取得
  var data = range.getValues();
  
  // 処理結果を格納するための空の配列を用意
  var outputData = [];
  
  // データの行ごとに繰り返し処理
  for (var i = 0; i < data.length; i++) {
    var row = data[i]; // 現在の行のデータ
    
    // ここで行データ（row）に対して任意の処理を行う
    // 例: コンソールに出力
    console.log(row);
    
    // 処理結果をoutputDataに追加
    // この例では、元のデータをそのまま追加していますが、処理に応じて変更可能
    outputData.push(row);
  }
  
  // 処理結果をスプレッドシートに出力（例: E1に出力）
  // 出力先範囲のサイズをoutputDataのサイズに合わせて設定
  var outputRange = sheet.getRange(1, 5, outputData.length, outputData[0].length);
  outputRange.setValues(outputData);
}
```

このコードは、スプレッドシートのA1:C3範囲からデータを読み取り、各行に対して何らかの処理（この例ではコンソールに出力）を行い、その結果をE列から始まる範囲に出力します。`getRange`メソッドの引数やログ出力の部分など、具体的な処理内容は目的に応じて変更してください。二次元配列を扱う際の基本的なフローを理解し、さまざまなケースに応用することができます。 

これらの情報を参考にしました。
[1] Google Sites - Google Apps Maniacs - データの塊をシートに書き込む (https://sites.google.com/site/appsmatome/home/spreadsheetman/spreadimport)
[2] note - 【AIと一緒に】Googleスプレッドシート 行削除で学ぶ GASの ... (https://note.com/mir4545/n/n63815183c1ca)
[3] auto-worker.com - GASで1次元配列を2次元配列に変換する方法～setValuesで ... (https://auto-worker.com/blog/?p=3709)
[4] takami-site.work - 二次元配列を連想配列に変換する方法〜Google Apps Script (https://google-apps-script.takami-site.work/254) 

リートンを利用する > https://wrtn.jp


ここでは、Google Apps Script (GAS) を使用して、2次元配列内の重複要素の位置を特定し、それらの位置（行と列の番号）を配列として返す方法を紹介します。

このスクリプトは、2次元配列をループ処理し、すでに見つけた要素を記録します。重複が見つかった場合、その位置（行と列）を別の配列に保存します。以下の例では、単純な2次元配列を使用してこのプロセスを示します。

```javascript
function findDuplicateIndices() {
  // 2次元配列の例
  var sheetData = [
    ['リンゴ', 'バナナ', 'チェリー'],
    ['オレンジ', 'リンゴ', 'バナナ'],
    ['チェリー', 'メロン', 'リンゴ']
  ];

  var seen = {}; // 見つけた要素を記録するオブジェクト
  var duplicates = []; // 重複の位置を記録する配列

  // 2次元配列をループ処理
  for (var row = 0; row < sheetData.length; row++) {
    for (var col = 0; col < sheetData[row].length; col++) {
      var element = sheetData[row][col];
      // 要素が既に見つかっているかチェック
      if (seen[element]) {
        // 重複の位置を記録
        duplicates.push([row, col]);
      } else {
        // 要素を記録
        seen[element] = true;
      }
    }
  }

  // 重複の位置を出力
  Logger.log(duplicates);
  
  // 必要に応じて重複の位置の配列を返す
  return duplicates;
}
```

このコードでは、`seen` オブジェクトを使用して、既に見つかった要素を記録し、`duplicates` 配列には重複要素の位置（行と列の番号）が保存されます。このスクリプトを実行すると、すべての重複要素の位置がログに記録されます。

ただし、このコードでは最初に見つかった要素の位置は`duplicates`に追加されません。最初の出現も記録したい場合は、ロジックにいくつかの変更を加える必要があります。 

これらの情報を参考にしました。
[1] 株式会社リーピー - 車好きに刺さる！「自動車整備・販売」のホームページ参考 ... (https://leapy.jp/blog/web-design/car-maintainance-design-2-2-2/)
[2] SANKOU! - 車･乗り物･モビリティ (https://sankoudesign.com/category/car-bike-vehicle-airplane/)
[3] Web Design Clip - 自動車・バイク・自転車 (https://webdesignclip.com/category/auto/)
[4] みらいワークス - 車・バイク他 > 業界別で探すWebデザイン参考サイト集 (https://mirai-works.co.jp/uragawa/industry/car_bike/) 

リートンを利用する > https://wrtn.jp