メニューから「挿入」→「図形描画」を選択し、ボタンとなる図形を作成します。図形を右クリックして「スクリプトを割り当て」を選択し、以下のスクリプトで作成する関数名を指定します(例: 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);
}