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

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

ただいまの
回答率

90.61%

  • Google Apps Script

    786questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 95

koromo_t

score 50

以前、関数「zenbu(e)」のパラメータから、
「変更のあったシートの名前」を取得する方法を教わりました。
通常は期待通りに動くのですが、スプレッドシートのツールバーから
「データ>範囲を並べ替え」で並べ替えをすると、
期待通りの動きをしないことに気付きました。(下記参照)

期待通りの動きをしない

現在、スプレッドシートに「生ログ」「読書リスト」「メモ」の3つのシートがあります。
このなかのシート「メモ」にて、前述したような並び替えをしたのですが、
ログを見ると、変更のあったシートが「生ログ」と認識されているようです。
ゆえに、変更のあったシートが生ログだった場合に動かすスクリプトが動くようです。

いちおうスクリプトを載せておきますが、もしかしたらこれは仕様なのかなとかも思います。
しかしもし並び替え時も期待通りの結果を得られるのなら助かるなと思ったので、
質問を投稿させていただきます。
よろしくお願いします。

function zenbu(e){
  var sheetName = e.source.getSheetName();
  Logger.log(sheetName);
  // 生ログに変更のあったときのみ動かす
  if((sheetName=="生ログ")&&(tweet_nama.match(/.*を読んでいる本に追加.*/))){
  seikei();
  }
  // メモに変更のあったときのみ動かす
  if(sheetName=="メモ"){
  dokuryo();
  }
  // 読書リストに変更のあったときのみ動かす
  if(sheetName=="読書リスト"){
  time();
  }
}

自己解決なう。(2018/05/27 11:37)

ちょっと閃きまして。
ツールバーから処理をすると動作不良を起こすなら、
じゃあスプレッドシートのツールバーを使わなければいいんじゃね?と思い、
期待する並び替えのスクリプトを書いて、「並び替え」という独自メニューを作成、
並び替えをしたいときは、そちらのメニューから指示を出すようにしてみたところ、
おそらく、期待通りの動きをするようになったかと思われます。
「データ>範囲を並べ替え」の際、いちいち条件を指定していたことを思うと、
新たなやり方のほうが手間も少なくて済むようになりました。
ありがとうございました。

ちなみにこんな感じのスクリプト。

// 独自メニュー設置
function onOpen(){
  //メニュー配列
  var myMenu=[
    {name: "並び替え", functionName: "sort"},
  ];
  spreadsheet.addMenu("並び替え",myMenu); //メニューを追加
}

// ソート
function sort() {
  var lastRow = sheet_memo.getLastRow();
  var lastCol = sheet_memo.getLastColumn();
  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}]);
}

[参考]
https://excel-ubara.com/apps_script1/GAS030.html(並べ替えのスクリプト)
https://tonari-it.com/gas-spreadsheet-addmenu-onopen/(独自メニューの作り方)

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

自己解決なう。(2018/05/27 11:37)

ちょっと閃きまして。
ツールバーから処理をすると動作不良を起こすなら、
じゃあスプレッドシートのツールバーを使わなければいいんじゃね?と思い、
期待する並び替えのスクリプトを書いて、「並び替え」という独自メニューを作成、
並び替えをしたいときは、そちらのメニューから指示を出すようにしてみたところ、
おそらく、期待通りの動きをするようになったかと思われます。
「データ>範囲を並べ替え」の際、いちいち条件を指定していたことを思うと、
新たなやり方のほうが手間も少なくて済むようになりました。
ありがとうございました。

ちなみにこんな感じのスクリプト。

// 独自メニュー設置
function onOpen(){
  //メニュー配列
  var myMenu=[
    {name: "並び替え", functionName: "sort"},
  ];
  spreadsheet.addMenu("並び替え",myMenu); //メニューを追加
}

// ソート
function sort() {
  var lastRow = sheet_memo.getLastRow();
  var lastCol = sheet_memo.getLastColumn();
  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}]);
}

[参考]
https://excel-ubara.com/apps_script1/GAS030.html(並べ替えのスクリプト)
https://tonari-it.com/gas-spreadsheet-addmenu-onopen/(独自メニューの作り方)

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Google Apps Script

    786questions

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