Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

特定の行で空白行を入れていきたい

Q&A

Closed

解決したいこと

資料を作る際、エクセルで複数の表を手作業で作っていたものをGASで自動化したいと思い、スクリプトを書いているのですが、挫折してしまいました。

スプレッドシートに下記の配列があり、A列の「りんご」「みかん」「レモン」といった異なるグループの境界で空白行を入れていきたいです。

りんご 果物 2023/01
りんご 果物 2023/01
りんご 果物 2023/01
りんご 果物 2023/01
みかん 果物 2023/01
みかん 果物 2023/01
みかん 果物 2023/01
みかん 果物 2023/01
みかん 果物 2023/01
みかん 果物 2023/01
レモン 果物 2023/01
レモン 果物 2023/01
レモン 果物 2023/01
レモン 果物 2023/01
すいか 果物 2023/01
すいか 果物 2023/01
すいか 果物 2023/01

下記がゴールです。B列C列に意味はありません。
りんご 果物 2023/01
りんご 果物 2023/01
りんご 果物 2023/01
りんご 果物 2023/01

みかん 果物 2023/01
みかん 果物 2023/01
みかん 果物 2023/01
みかん 果物 2023/01
みかん 果物 2023/01
みかん 果物 2023/01

レモン 果物 2023/01
レモン 果物 2023/01
レモン 果物 2023/01
レモン 果物 2023/01

すいか 果物 2023/01
すいか 果物 2023/01
すいか 果物 2023/01

単純な繰り返し文と条件分岐でできると思うのですが、お知恵をお借りいただければ幸いです。

下記は作りかけのスクリプトで、こちらで作るとかえってご面倒かもしれません。
単純なスクリプトで書けるのであればそちらをご教示くださると嬉しいです。
よろしくお願いします。

発生している問題・エラー

function insert() {
  //スプレッドシート情報
  const ss_ID = '****************************' 
  const arch_sh_name = 'draft'

  const arch_array = [];
  //ID、シート名を指定してシートを取得
  const ss = SpreadsheetApp.openById(ss_ID);
  const arch_sh = ss.getSheetByName(arch_sh_name);
  const arch_sh_values = arch_sh.getRange('A:A').getValues(); 
  const arch_sh_lastrow = arch_sh_values.length;

  for (let l=1; l< arch_sh_lastrow; l++){
    for (let m=0; m<5; m++){
    if(arch_sh_values[l][0] != arch_sh_values[l-1][0]){
        console.log(arch_sh_values[l-1][0]);
        console.log(arch_sh_values[l][0]);
        arch_sh.insertRowAfter(l+m);
      } 
      }
  }
}
0

2Answer

このようなコードで、A列の値が変わるごとに空白行を挿入する処理ができました。

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet();
  let lastRow = sheet.getLastRow();
  let tmp = sheet.getRange(1, 1).getValue();
  for(let i = 1; i <= lastRow; i++) {
    const currentValue = sheet.getRange(i, 1).getValue();
    if(tmp != currentValue){
      tmp = currentValue;
      sheet.insertRows(i,3);
      lastRow+=3;
      i+=2;
    }
  }
}
1Like

Comments

  1. さっそくありがとうございます! うまくいきました。

    わがままをいって申し訳ないのですが、下記2点をさらに改良することは可能でしょうか。
    ①for文が、このままだと当初指定したlastRowで終わってしまうので、空白行で増加した分の最後まで作業を行いたい(lastRow+αやlastRow*2などで実際の対処はできるのですが…)
    ②1行でなく3行開けたい。

    これらも自力でやってみましたがうまくいきませんでした。可能であればよろしくお願いします。
  2. 元のコードを修正しました。
    ちょっと汚いコードですが、いったんこちらのコードで動くと思います。
  3. さっそく修正もいただいてありがとうございました!

Your answer might help someone💌