質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

2493閲覧

「範囲を並べ替え」で並べ替えをすると、パラメータから得られる「変更のあったシートの名前」が期待通りにならない。

koromo_t

総合スコア60

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2018/05/26 20:31

編集2018/05/27 02:55

以前、関数「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/(独自メニューの作り方)

余談ながら、私は「グラブル 最適編成計算機」というものを利用していたことがあって、
スプレッドシートにおける「独自メニュー」の存在を見たことがあったので、
これまでは、そういうことが可能なんだなと知っているだけでしたが、
その知識も役に立ったのでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

###自己解決なう。(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/(独自メニューの作り方)

余談ながら、私は「グラブル 最適編成計算機」というものを利用していたことがあって、
スプレッドシートにおける「独自メニュー」の存在を見たことがあったので、
これまでは、そういうことが可能なんだなと知っているだけでしたが、
その知識も役に立ったのでした。

投稿2018/05/27 02:41

編集2018/05/27 02:54
koromo_t

総合スコア60

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問