🙌

Google Apps Scriptでカンマ区切りのリストの処理をしたい

2023/01/20に公開

1セルに複数項目が並んでいる際、
行毎に処理する関数を作るのは非常に手間がかかります。
そこで、まとめて処理を行うGASを書くことを推奨します。

例:
A1というセル
りんご, みかん, ぶどう, ごはん

Aという列に似たような値が並んでいるとします。

一般的には"ごはん"が仲間外れになりますよね。
この仲間外れを処理していきます。

まずA列を読み込みます。

  const ss = SpreadsheetApp.getActive().getSheetByName("Sheet 1");
  const values = ss.getRange("A:A").getValues();
  

一行ずつ、処理をしたいので、
繰返し文(for)を使って処理していきます。

//出力用の配列を格納する変数を宣言
var changedVal = [];
for(var i=0; i < values.length; i++){
  //順番違いで行頭の場合でも処理できるようにカンマを行頭に付与
  var value = ", " + values[i];
  value = value.replace(", ごはん", "");
  //pushメソッドで出力用変数に格納、sliceで行頭のカンマを切除
  changedVal.push([value.slice(2)]);
}

//output シートに出力
SpreadSheetApp.getActive().getSheetByName("output").getRange(1, 1, changedVal.length).setValues(changedVal);

もし2列以上に分けたい場合はforの繰り返しの中に

for(var i=0; i < values.length; i++){
  var value1 = ", " + values[i];
  var value2 = "";
  //ここに条件分岐を入れることで含む場合の分岐を作る
  if(value1.match("ごはん"){
    //切除は同様
    value1 = value1.replace(", ごはん", "");
    //切除したものを別の変数に格納する
    value2 = value2 + ", ごはん";
  }
  changeVal.push([value1.slice(2),value2.slice(2)]);
}
//出力が2列以上の場合はgetRangeの最後の引数が列の数になるので注意
SpreadSheetApp.getActive().getSheetByName("output").getRange(1, 1, changedVal.length, 2).setValues(changedVal);

HTMLタグの処理やハッシュタグの処理などで使用する機会があるかもしれないので、
自分用としてもメモ

Discussion