onEditについて

5,010 views
Skip to first unread message

soccer ball

unread,
Apr 29, 2013, 1:35:39 PM4/29/13
to google-app...@googlegroups.com
onEditで特定のセルを編集するたびに実行するスクリプトを作っていますが、これをスクリプト自体をあらかじめ複数用意しておいて、
特定のセルまたはRangeを編集した場合にそれぞれのスクリプトを実行するようにはできないでしょうか?

複数のonEditをつくっておいて、A1のセルを編集した場合のonEditと、
B1のセルを編集した場合のonEditがあった場合、A1のセルを編集したときには、B1用のonEditは実行しないように
しておきたいと思っております。

Masayo Nakajima

unread,
Apr 30, 2013, 11:16:12 AM4/30/13
to google-app...@googlegroups.com
こんばんはnakajimaです
一つのonEditの中で処理をブランチさせればいいのでは?

function onEdit(e) {
  // イベントが発生したシートを取得
  var sheet = e.source.getActiveSheet();
  // シートの名前をを取得
  var sheetName = sheet.getName();
  // セル範囲を取得 
  var range = e.source.getActiveRange();
  // セル位置を取得
  var cellPosition = range.getA1Notation();
  // アクティブなシートがSheet1の時処理を行う
  if (sheetName == 'Sheet1') {    
    if (cellPosition == 'A1') {
      // セル位置がA1の時の処理
    } else if (cellPosition == 'B1') { 
      // セル位置が'B1の時の処理
    }
  }
}

「if (sheetName == 'Sheet1') {  」は「Sheet1」のみ行いたい時入れてください
どのシートでも共通に行いたいときはいりません



2013年4月30日 2:35 soccer ball <particu...@gmail.com>:

--
このメールは Google グループのグループ「Google Apps API Japan」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、google-apps-api-...@googlegroups.com にメールを送信します。
このグループに投稿するには、google-app...@googlegroups.com にメールを送信してください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
 
 

soccer ball

unread,
May 1, 2013, 4:20:06 AM5/1/13
to google-app...@googlegroups.com
Pizaさま

ありがとうございます。
こういったやりかたがあるということは理解してました。
説明不足で時間取らせ申し分けございません。
上記方法の場合、ifやswitchといった分ける文面が大量に出来ることと関係のないセルを編集した際にも処理が実行されることに
なるかと思うので、セルの入力自体に毎回時間がかかることになってしまうようになるのではと思っています。

特定の範囲に対してのみ特定のonEditが指定出来れば、動作もそれなりに軽くなるかと思って質問させていただきました。
こういったことは難しいでしょうか?

Masayo Nakajima

unread,
May 1, 2013, 10:48:59 AM5/1/13
to google-app...@googlegroups.com
soccer ball様

>特定の範囲に対してのみ特定のonEdit
は無理なのでは?

>関係のないセルを編集した際にも処理が実行されることになるかと思うので、セルの入力自体に毎回時間がかかることになってしまうようになるのでは
処理は実行されますが入力した後なのでそれによってセルの入力が遅くなることはないと思います。

ifやswitchが多くなり処理が遅くなった場合

function onEditA1(e) {
  // シートの名前をを取得
  var sheetName = e.source.getActiveSheet().getName();
  // セル位置を取得
  var cellPosition = e.source.getActiveRange().getA1Notation();

  if (sheetName == 'Sheet1') {    
    if (cellPosition == 'A1') {
      // セル位置がA1の時の処理
    }
  }
}

function onEditB1(e) {
  // シートの名前をを取得
  var sheetName = e.source.getActiveSheet().getName();
  // セル位置を取得
  var cellPosition = e.source.getActiveRange().getA1Notation();

  if (sheetName == 'Sheet1') {    
    if (cellPosition == 'B1') {
      // セル位置がB1の時の処理
    }
  }
}

onEditA1,onEditB1・・・をそれぞれトリガーに登録すれば若干処理が早くなるかもしれません。
(試してみたけれど大して違いはないような気がしますけれど・・・・)


2013年5月1日 17:20 soccer ball <particu...@gmail.com>:

大久保義則

unread,
May 9, 2013, 9:38:05 AM5/9/13
to google-app...@googlegroups.com
スレッドの皆様

面白いテーマをありがとうございます.自習のために書いてみました.お手すきの折にでもご覧下さい.YO生

// 編集したセルのA1ノーテーションと同じ名前の関数を実行.YO生
function onEdit () {
  var range = SpreadsheetApp.getActiveSheet().getActiveRange();
  var notation = range.getA1Notation();
  eval(notation+"();");
};

function A1() {
  Browser.msgBox("A1 done");
};

function B1() {
  Browser.msgBox("B1 done");
};


2013年4月30日火曜日 2時35分39秒 UTC+9 soccer ball:

soccer ball

unread,
May 9, 2013, 12:42:20 PM5/9/13
to google-app...@googlegroups.com
piza様、大久保様
返答遅くなり申し訳ございません。
試してみました

最初の自分の式と、変更後と、A1だけに式を設定していた場合ではやはりA1だけに設定していた場合のほうが、
表示されるスピードが速いような気がしますが、最初よりはかなり早くなった気がします。

ありがとうございました。

Reply all
Reply to author
Forward
0 new messages