実現したいこと
- 転記元スプレッドシートA内のプルダウンの項目を指定したら、転記先のシートに転記される。
例(転記元スプシA(マスター)内のプルダウンの項目にはB,C,D,Eとあり、プルダウンの項目をBと設定した場合、スプレッドシートB(転送先)に追記される。)
-今回作成する予定のものはタスク管理表です。今回の処理に関しては一部となります。
-スプシAにはプルダウンをはじめタスク名、進行状況などの項目が横一列並んでいる感じです。
-スプシAのプルダウンにはそれぞれのタスクを割り振る相手の名前が書いております。
-スプシAのプルダウンをこの人に渡そうと仮に”山田さん”という項目に設定したとします。
-設定後そのプルダウンをはじめとする横一列のセルのテキスト情報を取得し、転記先のスプレッドシートのシート名”山田さん”とうシートに転記される
というイメージです。
前提
指定のスプレッドシートに転記元の情報を転記したいです。内容は実現したいことに書いております。
chatgtpを使って生成したあと、少しいじったのですが、うまく実装できません。下記のソースコードの列番号に関しては確認済みです。
発生している問題・エラーメッセージ
実装ができません。
該当のソースコード
function onEdit(e) { const sheet = e.source.getActiveSheet(); const range = e.range; const editedValue = range.getValue(); // 転記元スプレッドシートの情報 const sourceSheet = sheet; const sourceHeaders = sourceSheet.getRange(1, 1, 1, sourceSheet.getLastColumn()).getValues()[0]; // プルダウンメニューの列番号 const dropdownColumn = 5; // 転記先スプレッドシートの情報 const targetSpreadsheets = { 'B': { id: '', sheetName: '' }, 'C': { id: '', sheetName: '' }, 'D': { id: '', sheetName: '' }, 'E': { id: '', sheetName: '' } }; // 編集された列がプルダウンメニューの列かどうかを確認 if (range.getColumn() == dropdownColumn) { const targetSheetKey = editedValue; const targetSpreadsheetInfo = targetSpreadsheets[targetSheetKey]; if (targetSpreadsheetInfo) { const targetSpreadsheet = SpreadsheetApp.openById(targetSpreadsheetInfo.id); const targetSheet = targetSpreadsheet.getSheetByName(targetSpreadsheetInfo.sheetName); const targetHeaders = targetSheet.getRange(1, 1, 1, targetSheet.getLastColumn()).getValues()[0]; // 転記元の行全体を取得 const sourceRow = range.getRow(); const sourceRowValues = sourceSheet.getRange(sourceRow, 1, 1, sourceSheet.getLastColumn()).getValues()[0]; // 転記先の対応する列に値を設定 for (const i = 0; i < sourceHeaders.length; i++) { const header = sourceHeaders[i]; const targetColumn = targetHeaders.indexOf(header) + 1; if (targetColumn > 0) { const targetCell = targetSheet.getRange(sourceRow, targetColumn); targetCell.setValue(sourceRowValues[i]); } } } } }
試したこと
スプシのIDやシート名の誤字脱字は確認しました。各処理コードはAIにてどのような処理がされるか一通り確認済みです。
補足情報(FW/ツールのバージョンなど)
こちらはスプレッドシート内のGASをしようしております。
ここにより詳細な情報を記載してください。