スクリプトを書いてみました。
function myFunction() {
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var aSheet = spreadSheet.getSheetByName('シートA');
var bSheet = spreadSheet.getSheetByName('シートB');
var aResultRowStart = 2; // シートAのヘッダの次行の番号を設定する
var bItemColumnStart = 3; // シートBの商品列の開始地点の番号を設定する
var bPersonRowStart = 2; // シートBのヘッダの次行の番号を設定する
var aRow = aResultRowStart;
var bRow = bPersonRowStart;
var bColumn = bItemColumnStart;
while (bSheet.getRange(bRow, bItemColumnStart).getValue() !== '') {
// シートBの商品列が空のセルが見つかるまで、下方向に処理を続ける
while (bSheet.getRange(bRow, bColumn).getValue() !== '') {
// シートBの人物ごとの商品が空のセルが見つかるまで、右方向に処理を続ける
for (var count = 0; count < bSheet.getRange(bRow, bColumn).getValue(); count++) {
// シートBの人物ごとの商品セルに入力されている回数分、処理を繰り返す
// シートBから、クラス、名前、商品名を取得する
var classNo = bSheet.getRange(bRow, bItemColumnStart - 2).getValue();
var name = bSheet.getRange(bRow, bItemColumnStart - 1).getValue();
var item = bSheet.getRange(bPersonRowStart - 1, bColumn).getValue();
// シートAに設定する
aSheet.getRange(aRow, 1).setValue(classNo);
aSheet.getRange(aRow, 2).setValue(name);
aSheet.getRange(aRow, 3).setValue(item);
// シートAの行数を1増やす
aRow += 1;
}
// シートBの人物ごとの商品セルに入力されている回数分、処理を繰り返したので、右隣のセルに移る
bColumn += 1;
}
// シートBの人物ごとの商品が空のセルが見つかったので、下の行に移る
bRow += 1;
bColumn = bItemColumnStart;
}
// シートBの商品列が空のセルが見つかったので、処理おしまい
}
あらかじめ、以下のような感じでシートA、シートBが作成されていることが前提となります。
スクリプトの作成方法・実行方法については、以下のサイトなどを参考にしながら頑張ってみてください!
https://tonari-it.com/gas-script-editor/
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/16 06:56
2019/09/17 01:38