実現したいこと
とあるリストにある文字列をシート名に変更してスタイルはとあるシート通りにコピーするGASを組みました。
コピー元のシート名は「BAG FNL」なので順序としては
「BAG FNL」のコピーが出来上がる
↓
「BAG FNLのコピー」というシート名をリスト通りに変更する
↓
これを最後まで繰り返す
ここまでは成功してます。
GAS
1function create_sheet() { 2 // アクティブシートを取得 3 const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 4 5 // シートのコピーを作るリストのあるシートを取得 6 const listSheet = spreadsheet.getSheetByName('FLT LIST'); 7 8 // コピー元のシートを取得 9 const formatSheet = spreadsheet.getSheetByName('BAG FNL'); 10 11 // スプレッドシートのURLを取得 12 const spreadsheetUrl = spreadsheet.getUrl(); 13 14 for (let i = 0; i < listSheet.getLastRow() - 1; i++) { 15 // A列に設定しているシート名を取得 16 let name = listSheet.getRange(i + 2, 1).getValue(); 17 18 // 同名のシートがある場合はシートの複製を行わない。 19 if (is_same_sheet_name_(spreadsheet.getSheets(), name)) { 20 Logger.log("not create sheet " + name); 21 continue; 22 } 23 24 // コピー元のシートを複製 25 let newSheet = formatSheet.copyTo(spreadsheet); 26 27 // シート名を設定 28 newSheet.setName(name); 29 30 // シート名の隣の列(B列)にリンクを作成 31 listSheet.getRange(i + 2, 2).setValue('=HYPERLINK("' + spreadsheetUrl + '#gid=' + newSheet.getSheetId() + '", "リンク")'); 32 33 Logger.log('create sheet ' + newSheet.getName()); 34 } 35 36 37 38/** 39 * 同名のシートがあるかを返却します。 40 * @param {Sheet[]} シート名の配列 41 * @param {String} シート名 42 * @return {boolean} true:同名のシートあり、false:同名のシートなし 43 */ 44function is_same_sheet_name_(sheets, name) { 45 for (let i = 0; i < sheets.length; i++) { 46 if (sheets[i].getName() == name) { 47 return true; 48 } 49 } 50 return false; 51} 52} 53 54function GET_FILE_NAME() 55{ 56 return SpreadsheetApp.getActiveSpreadsheet().getName(); 57} 58// スプレッドシートのシート名を取得 59function GET_SHEET_NAME() 60{ 61 return SpreadsheetApp.getActiveSpreadsheet().getSheetName(); 62}
発生している問題・分からないこと
最後に出来がった各シート名をA1に反映したいので元のシートA1に「=GET_SHEET_NAME()」と入力。下記GASで実行。すると全部A1は「BAG FNLのコピー」と表示されます。
これを変更されたリスト通りのシート名を表示したい場合どのようにすればよろしいでしょうか。
ご教示願います。
該当のソースコード
特になし
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
すると全部A1は「BAG FNLのコピー」と表示されます。
補足
特になし
回答1件
あなたの回答
tips
プレビュー