メニューから「挿入」→「図形描画」を選択し、ボタンとなる図形を作成します。図形を右クリックして「スクリプトを割り当て」を選択し、以下のスクリプトで作成する関数名を指定します(例: processData
)。
A4から下の行にデータがある時を想定していてます。
3行目(つまりA3から右へ)は、どの列を左から何番目に移動するかを指示するために、0から始まる数字を入力します。
AppScriptに以下を記述し、ボタンをクリックすれば列が整理されます。
AppScriptのコード
function processData() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('作業場');
var dataRange = sheet.getRange('A4:' + sheet.getLastColumn() + sheet.getLastRow());
var data = dataRange.getValues();
// 列の移動指示を取得
var instructions = sheet.getRange('A3:' + sheet.getRange(3, sheet.getLastColumn()).getA1Notation()).getValues()[0];
// 指示に基づいて新しいデータを生成
var newOrder = [];
var columnMap = [];
for (var i = 0; i < instructions.length; i++) {
if (instructions[i] !== '') {
var newIndex = parseInt(instructions[i]);
newOrder[newIndex] = i;
}
}
var reorderedData = [];
for (var i = 0; i < data.length; i++) {
var newRow = [];
for (var j = 0; j < newOrder.length; j++) {
newRow.push(data[i][newOrder[j]]);
}
reorderedData.push(newRow);
}
// A4から下のデータをクリア
var lastRow = sheet.getLastRow();
if (lastRow > 3) {
sheet.getRange(4, 1, lastRow - 3, sheet.getLastColumn()).clearContent();
}
// 整形したデータを書き戻し
var outputRange = sheet.getRange(4, 1, reorderedData.length, reorderedData[0].length);
outputRange.setValues(reorderedData);
}