以前、関数「zenbu(e)」のパラメータから、
「変更のあったシートの名前」を取得する方法を教わりました。
通常は期待通りに動くのですが、スプレッドシートのツールバーから
「データ>範囲を並べ替え」で並べ替えをすると、
期待通りの動きをしないことに気付きました。(下記参照)
#####期待通りの動きをしない
現在、スプレッドシートに「生ログ」「読書リスト」「メモ」の3つのシートがあります。
このなかのシート「メモ」にて、前述したような並び替えをしたのですが、
ログを見ると、変更のあったシートが「生ログ」と認識されているようです。
ゆえに、変更のあったシートが生ログだった場合に動かすスクリプトが動くようです。
いちおうスクリプトを載せておきますが、もしかしたらこれは仕様なのかなとかも思います。
しかしもし並び替え時も期待通りの結果を得られるのなら助かるなと思ったので、
質問を投稿させていただきます。
よろしくお願いします。
javaScript
1function zenbu(e){ 2 var sheetName = e.source.getSheetName(); 3 Logger.log(sheetName); 4 // 生ログに変更のあったときのみ動かす 5 if((sheetName=="生ログ")&&(tweet_nama.match(/.*を読んでいる本に追加.*/))){ 6 seikei(); 7 } 8 // メモに変更のあったときのみ動かす 9 if(sheetName=="メモ"){ 10 dokuryo(); 11 } 12 // 読書リストに変更のあったときのみ動かす 13 if(sheetName=="読書リスト"){ 14 time(); 15 } 16}
###自己解決なう。(2018/05/27 11:37)
ちょっと閃きまして。
ツールバーから処理をすると動作不良を起こすなら、
じゃあスプレッドシートのツールバーを使わなければいいんじゃね?と思い、
期待する並び替えのスクリプトを書いて、「並び替え」という独自メニューを作成、
並び替えをしたいときは、そちらのメニューから指示を出すようにしてみたところ、
おそらく、期待通りの動きをするようになったかと思われます。
「データ>範囲を並べ替え」の際、いちいち条件を指定していたことを思うと、
新たなやり方のほうが手間も少なくて済むようになりました。
ありがとうございました。
ちなみにこんな感じのスクリプト。
javaScript
1// 独自メニュー設置 2function onOpen(){ 3 //メニュー配列 4 var myMenu=[ 5 {name: "並び替え", functionName: "sort"}, 6 ]; 7 spreadsheet.addMenu("並び替え",myMenu); //メニューを追加 8} 9 10// ソート 11function sort() { 12 var lastRow = sheet_memo.getLastRow(); 13 var lastCol = sheet_memo.getLastColumn(); 14 sheet_memo.getRange(2, 1, lastRow, lastCol).sort([{column: 8, ascending: true},{column: 9, ascending: true},{column: 10, ascending: true},{column: 11, ascending: true},{column: 12, ascending: false}]); 15}
[参考]
・https://excel-ubara.com/apps_script1/GAS030.html(並べ替えのスクリプト)
・https://tonari-it.com/gas-spreadsheet-addmenu-onopen/(独自メニューの作り方)
余談ながら、私は「グラブル 最適編成計算機」というものを利用していたことがあって、
スプレッドシートにおける「独自メニュー」の存在を見たことがあったので、
これまでは、そういうことが可能なんだなと知っているだけでしたが、
その知識も役に立ったのでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。