スプレッドシートのメニューから各シートに飛ぶGASの記述を書いたのですが、できるだけコードを短く書きたいです。
カスタムメニューから各シートに遷移するスクリプトなのですが、いまのままだとシートを追加するごとに更新する必要があり、できるだけ更新箇所を減らそうと思って、いろいろと分けて書いてみました所、煮詰まった状態になります。
コードの書き方が同じことの繰り返しが多くどうみても悪いのですが、どういった関数の記述方法で短くできるのか調べてみてもわからなかったのでお聞きしてみました。
よろしくお願いいたします。
javascript
1var sheetName1 = "シート1"; 2var sheetName2 = "シート2"; 3var sheetName3 = "シート3"; 4 5var functionName1 = "myFunction1"; 6var functionName2 = "myFunction2"; 7var functionName3 = "myFunction3"; 8 9function onOpen() { 10 var ui = SpreadsheetApp.getUi(); 11 var menu = ui.createMenu("カスタムメニュー"); 12 menu.addItem(sheetName1, functionName1); 13 menu.addItem(sheetName2, functionName2); 14 menu.addItem(sheetName3, functionName3); 15 menu.addToUi(); 16} 17 18function onClickItem(num) { 19 var sheetNum = eval("sheetName" + num); 20 var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 21 var objSheet = objSpreadsheet.getSheetByName(sheetNum); 22 objSpreadsheet.setActiveSheet(objSheet); 23} 24 25function myFunction1() { 26 var name = arguments.callee.name; 27 var num = name.replace(/[^0-9]/g, ""); 28 onClickItem(num); 29} 30 31function myFunction2() { 32 var name = arguments.callee.name; 33 var num = name.replace(/[^0-9]/g, ""); 34 onClickItem(num); 35} 36 37function myFunction3() { 38 var name = arguments.callee.name; 39 var num = name.replace(/[^0-9]/g, ""); 40 onClickItem(num); 41} 42
作業依頼でしょうか。
作業依頼ではないです。
コードの書き方が同じことの繰り返しが多くどうみても悪いのですが、どういった関数の記述方法で短くできるのか調べてみてもわからなかったのでお聞きしてみました。
では、もうちょっと質問の仕方かえたほうがいいです。
具体的にというか。
「スマート」って個人感覚の比率が大きい表現なので、
ゴールが見えない。アンケート要素が強いと非推奨にもなりますし。
あと中身一緒なのにコードわける理由が分からないというか。
説明不足で失礼いたしました。
カスタムメニューから各シートに遷移するスクリプトなのですが、いまのままだとシートを追加するごとに更新する必要があり、できるだけ更新箇所を減らそうと思って、いろいろと分けて書いてみました所、煮詰まった状態になります。
んー、
① ファイル内のシート名の一覧を列挙して
② ①のシート名の数だけ、カスタムメニューのアイテムを追加して
③ ②カスタムメニューアイテムをクリックしたら、該当シートをアクティブにする
ということ?
で、これで合っているなら次は①②③をそれぞれ調査すればいい訳だ。頑張って下さい。
おっしゃるとおりなのはわかっているのですが、メニューのコマンドに変数が入らないので困ってました。
最初からそれを質問すれば良かったじゃないですか。。。
変数に至ったのは自分で考えて導き出した結論で、エンジニアのこなれている方々はもっと良い別の方法があることも想定してしました。カスタムメニューってよく使う事例だと思ってましたので。
回答2件
あなたの回答
tips
プレビュー
