GAS スプレッドシートでのシフト表自動作成

実現したいこと

プログラミングの勉強を最近始めたものです。
スプレッドシートでのシフト表作成を自動化しようとしているのですが、なかなか上手くいかず質問させていただきました。具体的にはスプレッドシートで出勤できない日のセルに色を付けてもらい、それを考慮しながらランダムに3人選び、Aと書き込んでいくというものです。

発生している問題・分からないこと

列ごとに色がついていないセルを数え、それぞれ確率が等しくなるようにランダムに値を取得、配列に格納し、最後に色がついていないセルにだけ画像のようにn字型に配列の値を書き込んでいく、という方針をとっていたのですが行き詰まってしまいました。解決策もしくはもっといい案がありましたら教えてくださるとありがたいです。
イメージ説明

該当のソースコード

function getBackground_color() { // データ記入配列を準備 const values = []; // 指定のシートを取得 const spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet(); const sheet = spreadsheet1.getSheetByName('2024'); // セル範囲を設定 const range = sheet.getRange('E87:AI90'); // 各列の白色セルをカウントしながら繰り返し処理 const colors = range.getBackgrounds(); for (let j = 0; j < range.getNumColumns(); j++) { var count = 0; for (let i = 0; i < range.getNumRows(); i++) { if (colors[i][j] == '#ffffff'){count++} } if (count == '4') { const data = ['A', 'A', 'A', '']; const index = Math.floor(data.length * Math.random()); values.push(data[index]); if (index == 'A') { const data2 = ['A', 'A', '']; const index2 = Math.floor(data2.length * Math.random()); values.push(data2[index2]); } else {values.push('A', 'A', 'A');} if (index2 == 'A') { const data3 = ['A', '']; const index3 = Math.floor(data3.length * Math.random()); values.push(data3[index3]); } else {values.push('A', 'A');} if (index3 == 'A') { values.push('') } else {values.push('A');} } else {if (count == '3') { values.push('A', 'A', 'A'); } else {if (count == '2') { values.push('', ''); } else {if (count == '1') { values.push(''); }}}}}console.log(values);}

試したこと・調べたこと

上記の詳細・結果

以前にも質問をさせていただき、その時は行ごとに処理をしていたのですが確率に偏りがある場合があり、今の方針に変わりました。

補足

できれば、日曜日もしくは曜日が空白の場合は全員空白にするという機能も付けたいです。

コメントを投稿

0 コメント