実現したいこと
GASを利用してスプレッドシートでのシフト表作成を自動化しようと試みているのですが、行き詰まってしまったので質問させていただきました。具体的には出勤できない日のセルに色をつけてもらい、日付ごとに 色がついていないセルの中からランダムに3人選び'A'と記入するというものです。
発生している問題・分からないこと
色がついていないセルがちょうど3つだった場合の処理を追加しようと試行錯誤しているのですが、エラーの連続でどうにも上手くいきません。初歩的な内容かもしれませんが、答えてくださるとありがたいです。
該当のソースコード
function getBackground_color() { var value = []; // 指定のシートを取得 const spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet(); const sheet = spreadsheet1.getSheetByName('2024'); // セル範囲を設定 const range = sheet.getRange('E87:AI90'); range.clearContent(); // 背景色を取得 const color = range.getBackgrounds(); // 白いセルを取得 for (let j = 0; j < range.getNumColumns(); j++) { var white = []; for (let i = 0; i < range.getNumRows(); i++) { if (color[i][j] == '#ffffff') { white.push([i,j]); } // ランダムに三人選ぶ var select = []; if (white.length > 3) { while (select.length < 3) { const randomIndex = Math.floor(Math.random() * white.length); const selectIndex = white.splice(randomIndex, 1)[0]; select.push(selectIndex); }} else {} value = value.concat(select); }} // 選択されたセルに'A'を書き込む for (let n = 0; n < value.length; n++) { sheet.getRange(value[n][0]+87, value[n][1]+5).setValue('A'); } }
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
分岐処理でいろいろ試したのですが、今の状態から少しでも変えると別の箇所に影響が出てエラーになってしまいます。
補足
エラーの一例を載せておきます。
TypeError: Cannot read properties of undefined (reading '0')
回答2件
あなたの回答
tips
プレビュー