Excel online上の横並びのデータを縦型データに変換したい。
勤務表をSHAREPOINT内のEXCELで作成しています。
解決したいことは、横並びの日付を縦並びにして、毎日のシフトと従業員名の表を作りたいのです。
例えば、10月1日のSteveのシフトは「X](セルAS12)です。
浅学ながら、下記のコードを作りました。
エラーは出ないのですが、日付X人数のデータ量で、FOR分を多用しているため処理が遅すぎます。
実行速度を早くするやり方を教えていただければ幸いです。
1 セルE8からAL8までの横並びの日付(もちろんシリアル値を"d"の書式)を
縦方向に並べ替える
2 並べ替えた日付データをセルAQ11から行方向に張り付ける。
3 AQ11セルからの各日付に対応した従業員名(NAME)とシフト(K1とかVなど、、)
を従業員名はAR11からシフトはAS11からそれぞれ行方向に追加していく。
発生している問題・エラ-
とにかく、遅いです。10分くらいかかります。
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
### 該当するソースコード
<officeスクリプトです。>
function main(workbook: ExcelScript.Workbook) {
let BLANKSheet = workbook.getWorksheet("BLANK");
// 日付の列数を第1forのカウンターにする。
for(let Datecl=14;Datecl <45;Datecl++){
// 日付数値を変数DateVに入れる。
let DateV = BLANKSheet.getRangeByIndexes(16,Datecl,1,1).getValue()
// 名前の数を第2forのカウンターにする。名前の増減に合わせてカウンター条件を変更。
for(let NameRow=18;NameRow<46;NameRow++){
// 名前を変数Empnameに入れる。Empnameの列はH(12)
let Empname = BLANKSheet.getRangeByIndexes(NameRow,12,1,1).getValue();
// シフトを変数WorkShiftに入れる。
let WorkShift = BLANKSheet.getRangeByIndexes(NameRow,Datecl,1,1).getValue();
// 縦型データの最終行を取得
let Lastrow = BLANKSheet.getRange("bp1048576").getRangeEdge(ExcelScript.KeyboardDirection.up).getRowIndex() + 1
BLANKSheet.getRangeByIndexes(Lastrow,67,1,1).setValue(DateV)
BLANKSheet.getRangeByIndexes(Lastrow, 68, 1, 1).setValue(Empname)
BLANKSheet.getRangeByIndexes(Lastrow, 69, 1, 1).setValue(WorkShift)
}
}
}
### 自分で試したこと
変数を配列にしようとしましたが、難しすぎました。