【基礎編】GAS(Google Apps Script)でスプレッドシートAからBに文字を転記できるようになるまで【セル1つずつgetValue】

GAS

2回目の今回は【基礎編】として、比較的簡単な方法を紹介します。

簡単だけど、何百行もあるスプレッドシートなど大量のデータ処理には向いてません。初めての方は練習と思って、ちょっとした転記から試してみるのもいいかもしれませんね。

「わかんない」「めんどくさい」という方はココナラでまるごと注文して作ってもらいましょう。平均予算3,000円〜5,000円くらい。作るモノにもよると思いますが。

【ココナラ】Webサイト・デザイン・動画など制作物発注

転記用のGASコードとその解説

では早速、スプレッドシートAの文字列から、文字列”D”だけを選んで、スプレッドシートBに転記してみましょう。以下のようなコードになります。

//【スプレッドシートBのプロジェクト】
//getRange(行番号,列番号)で、スプレッドシートAからスプレッドシートBに転記する場合


function R1C1_Function() {

  //スプレッドシートAのシート1を取得
  const spreadsheetA = SpreadsheetApp.openById('※※スプレッドシートAのID※※')
  const sheet1ofA = spreadsheetA.getSheetByName('シート1'); 
  const last_row_A = sheet1ofA.getLastRow()

  //スプレッドシートBのシート1を取得
  const spreadsheetB = SpreadsheetApp.getActiveSpreadsheet(); 
  const sheet1ofB = spreadsheetB.getSheetByName('シート1'); 

  for(let i = 1;i <= last_row_A; i++){//行番号(初期値は「1」)
    let alphabet = sheet1ofA.getRange(i,1).getValue();  //スプレッドシートAの1列目を取得
    if(alphabet == "D"){ //Dだけを探して
      let last_row_B = sheet1ofB.getLastRow(); //スプレッドシートBの最終行に
      sheet1ofB.getRange(last_row_B + 1,1).setValue(alphabet);  //転記する
    }
  }    
}

それぞれの行を解説していきます。まずはいちばん上のこちらから。

  const spreadsheetA = SpreadsheetApp.openById('※※スプレッドシートAのID※※')

スプレッドシートBのプロジェクトから、スプレッドシートAの情報を取得します。

別のスプレッドシートを指定して取得する時は、そのスプレッドシートのIDを指定する必要があります。

IDとは何か? どうやったらわかるのか?

ためしにスプレッドシートAのURLをよく見てみてください。

https://docs.google.com/spreadsheets/d/※※スプレッドシートAのID※※/edit?pli=1#gid=xxxxxxxxxxxxxx

こんな感じになっているはず。この「/spreadsheets/d/」と「/edit?pli=1#gid=」に挟まれた文字列がIDです。この文字列を”で囲ってopenById(‘※※スプレッドシートAのID※※’)に入れるようにしましょう。これでスプレッドシートA全体を取得できます。

  const sheet1ofA = spreadsheetA.getSheetByName('シート1'); 

次の行で、スプレッドシートAのなかから、「シート1」という名前のシートをgetSheetByNameという方法で取得しています。

const last_row_A = sheet1ofA.getLastRow();

ここではgetLastRowという方法で最終行、つまり、「いちばん下の文字が入っている行の数」を取得しています。

例えば今回、スプレッドシートAのシート1は8行まで文字が入っているので、last_row_Aは「8」になるはずです。ここで取得した値は後に役立ちます。

続いて、スプレッドシートBのシート1の内容を同じように取得します。

  //スプレッドシートBのシート1を取得
  const spreadsheetB = SpreadsheetApp.getActiveSpreadsheet(); 
  const sheet1ofB = spreadsheetB.getSheetByName('シート1');

こちらはIDは必要ありません。今回はスプレッドシートBのプロジェクトでスプレッドシートBを取得してるからです。

こうしてスプレッドシートAとB、両方の情報を取得したところで、いよいよ転記の作業がはじまります。

for(let i = 1;i <= last_row_A; i++){

この部分はfor文といって、繰り返しの作業をする時に使います。それぞれの項目は。

for( 初期値(どこから) ; 最大値(どこまで) ; 増減値(どれだけ増やすかor減らすか)){

という意味ですから、今回の場合でいうと、

for(let i = 1;i <= last_row_A; i++){

//初期値は「1」、最大値はlast_row_Aつまり「スプレッドシートAの最終行」、増減値は1ずつ増える
//もっとわかりやすくいうと
//「スプレッドシートAシート1の1から最終行(8行)まで1ずつ増える数」

ということになります。

 let alphabet = sheet1ofA.getRange(i,1).getValue();  //スプレッドシートAの1列目を取得

これは、スプレッドシートAの1列目をfor文で繰り返し取得する部分です。getRange(行番号,列番号)になるので、行iは「1から最終行(8行)まで」をfor文で繰り返します。列は1列目なので「1」で固定します。

こうして「1行目の1列目」「2行目の1列目」「3行目の1列目」…と取得していったセルの中身を、次の4行で検証します。

    if(alphabet == "D"){ //Dだけを探して
      let last_row_B = sheet1ofB.getLastRow(); //スプレッドシートBの最終行に
      sheet1ofB.getRange(last_row_B + 1,1).setValue(alphabet);  //転記する
    }

if文を使って、alphabet(取得したセルの中身)がDであるかどうかを判定しています。AとかBとかCとかFならスルーします。

もしもDであったら、スプレッドシートBの最終行に転記します。

let last_row_B = sheet1ofB.getLastRow();

ここで最終行を取得しています。last_row_Aの時と同じ方法ですね。

なんで、last_row_A(スプレッドシートAの最終行)がだいぶ前に取得していたのに、このタイミングでlast_row_B(スプレッドシートBの最終行)を取得しているのか?

それは、Bの最終行が転記されるごとに1ずつ増えていくからです。そのたびに最終行がいくつか数え直しています。

sheet1ofB.getRange(last_row_B + 1,1).setValue(alphabet);

スプレッドシートBのシート1、1列目の最終行に、スプレッドシートAで取得した値(D)をsetValueで入力しています。

スプレッドシートBを開いてみましょう。ちゃんと転記できていたら成功です。

コメント

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