前提・実現したいこと
お世話になります。
タイトル通り、Googleスプレッドシートで
①管理リストに入力があった場合、原本シートをコピーしてシートを作成する
②作成したシートに入力された行の指定のセルの中身をシート名として入力する
(セルの中にはif関数が入っています、指定の別セルに何もなければ空白、何か文字が入れば2つのセルの中身を繋げて表示させています)
今まではエクセルで、リストに記入(1~複数行)して、ボタンを押すとリストとして用意しているシート(Aシート)の指定の行の中(G列)で同じ内容がなければ、原本として用意しているシート(Bシート)をコピーして新規シートを作成し、そこにAシートG列のまだ作られていないシート名のシートを作成する、と言う物を使っていました。
今後、Googleスプレッドシートにて同様の作業を行う必要があり、エクセルで使っていたコードを引っ張ってきましたが、
そのままでは動かず、取り急ぎ
・指定の列に新規で入力された段階で原本として用意しているシートをコピーして新規のシートを作成する
・そのシートに指定の列の最終行の文字列を引っ張って来て名前を付け直す
を行おうとしています。
コピーまでは問題なくいくのですが、名前の付け直しがどういじっても上手くいかず、エラーが出てしまいます。
エラーの内容で検索してみても、解決出来る情報に行きあたらず、行き詰っております。
下記のコード以外にも書き換える名前の指定方法を変えたり(名前になるセルの取得を別の塊にする)などしているのですが、
全て、名前を付ける際の指定方法が悪いようなエラーが出てしまいました。
プログラムの基礎も分かっておらず、穴だらけの知識で手探りで組み立てている為、
どこから直せばいいのか、何が余分で何が抜けているのかもわかっておりません。
申し訳ありませんが、どなたかお力添え頂けないでしょうか。
発生している問題・エラーメッセージ
Cannot read property 'rename' of undefined
該当のソースコード
function myFunction() { newsheet(); } function Copy(){ // 現在のスプレッドシートの取得 var ss_active_all = SpreadsheetApp.getActiveSpreadsheet(); // 書出シートの作成(原本のコピー作成) var ss_sheet_temp = ss_active_all.getSheetByName("原本"); var ss_sheet_copy = ss_sheet_temp.copyTo(ss_active_all); } function newsheet(){ var ss_sheet = Copy(); var ss_obj = SpreadsheetApp.getActiveSpreadsheet(); var ss_sheet_XX = ss_obj.getSheetByName("一覧"); // 探索したいシート名を入力 var ss_range = ss_sheet_XX.getRange("G:G").getValues(); var row_last_num = ss_range.filter(String).length; var name = row_last_num; ss_sheet.rename(name); }
試したこと
エラーの内容で検索
コピーから名前の変更までを1つのfunctionキーワード?にする
名前を取得する為の動作を別functionキーワード?にする
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/13 09:09