【ゆるく始めるGAS】ループした範囲を変数に配列取得

GASスクリプト画面 ブルーカラー人生設計

以前からループした範囲を、変数に格納したいと思っていました、ようやくその方法がわかったので、忘れないうちに記事にしたいと思います。

ループして必要な範囲を取り出したいが、変数に列として格納できずに私と同じように悩んでいるかたがいましたら参考になればと思います。

【今日の目的】ループした範囲を変数に配列取得の方法

ここでは、私のスプレッドシートのシフト表を操作しながらコードを解説したいと思います。

ループ(繰り返し分)で取得した、Rrngeを変数に格納する方法をお伝えします。

ただ変数を宣言しただけでは、配列として変数に格納されません。

ちなみにですが、行き詰まったらすぐにチャットGPTに質問すると便利です。

実際に私も、チャットGPTに助けていただきながらこの記事を書いています。

やりたいこと

GASスプレッドシート画面

A:8セルからN:12セルをそっくりA88セルからN 92セルに貼り付けしようと思います。

そのA:8セルからN:12セルをループで範囲取得しようと思います。

全体の流れ

  1. アクティブなスプレッドシートから特定のシートを取得
  2. 指定された範囲からデータを抽出
  3. 抽出したデータを新しい範囲に書き込む

コードの詳細

javascriptCopy codefunction myFunction() {
  // シフト表を定義
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('work schedule');
  console.log(sheet.getName());
  
  let eXrtactedData = [];

  for(let i = 8; i < 13; i++) {
    let rowdata = [];

    for(let k = 1; k < 15; k++) {
      rowdata.push(sheet.getRange(i, k).getValue());
      console.log("row" + rowdata);
    }
    
    eXrtactedData.push(rowdata);
    console.log(eXrtactedData);
  }

  sheet.getRange(88, 1, eXrtactedData.length, 14).setValues(eXrtactedData);
}

各部分の説明

1. シートの取得

javascriptCopy codeconst sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('work schedule');

この行では、アクティブなスプレッドシートから「work schedule」という名前のシートを取得しています。SpreadsheetApp.getActiveSpreadsheet()は現在アクティブなスプレッドシートを返し、getSheetByName('work schedule')はその中の指定された名前のシートを返します。

2. データの抽出

 eXrtactedData = [];

for(let i = 8; i < 13; i++) {
let rowdata = [];

for(let k = 1; k < 15; k++) {
rowdata.push(sheet.getRange(i, k).getValue());
console.log("row" + rowdata);
}

eXrtactedData.push(rowdata);
console.log(eXrtactedData);
}

この部分では、シートの特定の範囲(8行目から12行目、1列目から14列目)のデータを抽出しています。

  • let eXrtactedData = []; は、抽出したデータを格納するための配列です。
  • for(let i = 8; i < 13; i++) は、8行目から12行目までのループです。
  • let rowdata = []; は、現在の行のデータを格納するための配列です。
  • for(let k = 1; k < 15; k++) は、1列目から14列目までのループです。
  • rowdata.push(sheet.getRange(i, k).getValue()); は、現在のセルの値を取得してrowdataに追加しています。
  • eXrtactedData.push(rowdata); は、現在の行のデータをeXrtactedDataに追加しています。

3. データの書き込み

GASでループ
sheet.getRange(88, 1, eXrtactedData.length, 14).setValues(eXrtactedData);

この行では、抽出したデータをシートの88行目から始まる範囲に書き込んでいます。

  • sheet.getRange(88, 1, eXrtactedData.length, 14) は、88行目1列目から始まり、行数がeXrtactedData.length(つまり抽出したデータの行数)で、14列分の範囲を指定しています。
  • setValues(eXrtactedData) は、その範囲に抽出したデータを書き込んでいます。シートの8行目から12行目までのデータが88行目から始まる新しい範囲にコピーされます。

まとめ

初心者が初心者に伝えるコーナーが【ゆるく始めるGAS】です。

ループ処理とIF文はプログラミングに必須スキルというか、その繰り返しと聞いたことがあります。

是非習得したいスキルですね。

一緒に成長できたらと思います。

コメント