見出し画像

GAS(Google Apps Script)始めました

1.GAS(Google Apps Script)とは


Google が提供しているプログラミング言語で、JavaScriptがベースとなっています。GoogleスプレッドシートやGmailと連携して自動化できたりします。API連携でGoogle意外とも連携できるみたいです。

2.用意


Googleアカウント+ブラウザがあれば簡単に始められます。
有料と無料で若干制限が変わるみたいです。

3.ショートカット


  • 保存(Ctrl + S)

  • 実行(Ctrl + R)

  • 元に戻す(Ctrl + Z)

  • やり直し(Ctrl + Y)

とりあえず、これだけ把握できれば良いと思います。デバッグはまだまだ先。

4.制限事項

注意点は「1スクリプトの実行時間が6分間」らしいです。この辺りは実際作ってから考えることになりそうです。今のところ大規模なものを作ることは無いので気にしないでいけそうです。

5.今回やること

Webサイトでデータをコピーしたら崩れているのを成型します。
VBAやjavascriptなど、いろいろ対処はありそうですが今回はGASでやってみました。

半角と全角を判断して成型します。

6.コード

function myFunction() {
  const spreadsheet = SpreadsheetApp.openById("XXXXXXXXXXXX book名 XXXXXXX");
  const mySheet = spreadsheet.getSheetByName('XXXシート名XXX'); // シート(SpreadSheetの下のタブ名を指定)
  
  let lastRow = mySheet.getLastRow(); //最終行取得
  let row = lastRow;
  let text;
  let cnt;

while(row>2){
  text = mySheet.getRange(row,1).getDisplayValue()
  cnt = strLenJ(text.slice(0,1));

  if(cnt != 1){
    //上の行に転記
    mySheet.getRange(row-1,2).setValue(text);
    //行削除
    mySheet.deleteRow(row);
  }
  row--;
  console.log(row + "/" + lastRow + ":処理中");
}

function strLenJ(str) {//2バイト文字は2として文字数をカウント
  var len = 0;
  str = escape(str);
  for (var i = 0; i < str.length; i++, len++) {
    if (str.charAt(i) == "%") {
      if (str.charAt(++i) == "u") {
        i += 3;
        len++;
      }
      i++;
    }
  }
  return len;
}

ほぼコピペで作成しました。以下、調べたことです。

  • 最終行の取得 → getLastRow()

  • ループ処理 → while

  • セルの値取得 → getDisplayValue() 

  • 文字バイト数確認 → 関数をコピペ

escape()が非推奨になっている感じでした。このあたりはまた調べたいところです。

7.今後

VBAと比べてブラウザで完結するのが簡単でよいです。分からないことも検索すればほぼ出てくるのもよいです。
VBA/javascriptの経験があれば問題無くできそうです。
ただ、コードも更新も多いみたいで古い情報は使えないことも多そうです。

APIで他サービスと連携できるので、その機会があればもう少しやってみるかもです。

この記事が気に入ったらサポートをしてみませんか?