onEdit(e)で複数セルの編集に対応させるには?

719 views
Skip to first unread message

とぅるー

unread,
Apr 2, 2015, 8:59:25 PM4/2/15
to google-app...@googlegroups.com


列2の任意のセルに1から12の値を入れると、隣のセルに何らかの値を返すということをやっています。この例は3以下の場合はプラス12を行い(たとえば1と入れると13が返されます)、4から12なら同じ値が隣のセルにも入り、それ以外の値(たとえば99とか)の場合は、入力した値を取り消すという内容です。

問題はたとえばコピペで複数セルに「1」をいっぺんに入れた場合、最初のセルしか反応がないということです。これをすべてのセルに反応させるにはどうしたらよいでしょうか?ご存知のかた、よろしくお願い致します。

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var tc = e.range.getColumn();
  var tr = e.range.getRow();
  var tv = e.range.getValue();
  if (tc==2) {
    if (tv >=4 && tv <=12) {
      sh.getRange(tr, 3).setValue(tv)
    } else if (tv <= 3) {
      sh.getRange(tr,3).setValue(tv+12);
    } else {
      // Browser.msgBox("1から12の整数を入力してください");
      sh.getRange(tr, tc).setValue("")
    }
  }
}

とぅるー

unread,
Apr 2, 2015, 10:05:29 PM4/2/15
to google-app...@googlegroups.com
すみません、自己解決しました。

まあforで回すんだろうなあとはぼんやり考えていたのですが、getValues()で配列に格納しちゃえばいいだけなんですね。
あとは回しながら条件分岐させました。

function onEdit(e) {
  var sh = SpreadsheetApp.getActiveSheet();
  var tc = e.range.getColumn();
  var tr = e.range.getRow();
  var tv = e.range.getValues();
  if (tc == 2) {
    for (var i=0; i<tv.length; i++) {
      if (tv[i] >=1 && tv[i] <=3) {
        sh.getRange(tr+i, 4).setValue(parseInt(tv[i])+12);
      } else if (tv[i] >=4 && tv[i] <=12) {
        sh.getRange(tr+i, 4).setValue(tv[i]);
      } else {
        sh.getRange(tr+i, tc).setValue("");
        sh.getRange(tr+i, 4).setValue("");
      }
    }
  }
}

Reply all
Reply to author
Forward
0 new messages