スプレッドシートでセル内に改行を含むデータを行毎のデータに変換したい
やりたいこと
シートA のA,B列に下記3行があります。
商品 | サイズと値段 |
---|---|
ジュース | S:100円 M:150円 L:200円 |
ポテト | M:150円 L:200円 |
バーガー | 通常:200円 パティ倍:300円 |
これを シートB のA列に下記のように7行になるように出力したい。
| 商品とサイズと値段 |
|:-:|
ジュース_S:100円
ジュース_M:150円
ジュース_L:200円
ポテト_M:150円
ポテト_L:200円
バーガー_通常:200円
バーガー_パティ倍:300円
関数では難しそうだった
関数一発で実現したかったのですが、ChatGPTさん的にも難しそうだったので諦めました。
GASで実現
GPTさんがGASを提案してきたので書いてもらいました。
function copySheetAToB() {
var sheetA = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シートA');
var sheetB = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シートB');
var dataRange = sheetA.getDataRange();
var data = dataRange.getValues();
var outputData = [];
for (var i = 0; i < data.length; i++) {
var item = data[i][0];
var prices = data[i][1].split("\n");
for (var j = 0; j < prices.length; j++) {
var parts = prices[j].split(':');
var size = parts[0];
var price = parts[1];
var outputRow = item + '_' + size + ':' + price;
outputData.push([outputRow]);
}
}
sheetB.getRange(1, 1, outputData.length, 1).setValues(outputData);
}
おわりに
区切り文字が改行ではなく、カンマとかでも対応できますね!
.split(',')
とかにすればOK!
ところで
GPTさんのこと「じぷとさん」と呼んでるのですが、みなさんどうですか?