||A|B|C|D|
|:--|:--:|--:|
|1|…|…|…|1|
|2|0|…|1||
|3|0||
|4|||
A1から右に向かってデータを入力していきます。
行の右端に1が入力されたら、行をかえて0が入力される、ということがしたいです。
したいのですが、これをやろうとすると、どうしても循環参照になってしまいますよね…。
この作業は手動でもそれほど大変なことではないので、手動でもいいかなとも思うのですが、
でも、なんか自動化できそうな気もするので、こちらで尋ねてから判断しようと思いました。
可能でしたら、アイデアをいただけると嬉しいです。
追記(現状)
右端の値は=INDEX(B2:K2,MATCH(MAX(B2:K2)+1,B2:K2,1)
で取得できるとあったので、これを使って、=IF(INDEX(B2:K2,MATCH(MAX(B2:K2)+1,B2:K2,1))=1,B3=0,INDEX(B2:K2,MATCH(MAX(B2:K2)+1,B2:K2,1)))
みたいなことまでは考えました。B3というのは、行を変えた先を想定しています。
追記2
先に書かないといけなかったのですが、忘れていたので追記します。
Excelのタグを付けていますが、当方スプレッドシートを使っています。
~解決後のまとめ~
ttyp03さんの回答を参考に解決しましたので、まとめておきます!
「GAS スプレッドシート 1が入力されたら」で検索したところ、
参考になりそうな記事を見つけまして(下記参照)、
それをカスタマイズ?してみたところ、ななんと、うまくいきました。
なので、ご報告に上がりました。
もうひとつ、別のスクリプトから、
「右隣にアクティブセルを移動する」という要素もお借りして、
「変更のあったセルの値が1だったときに、
変更のあったセルのある行の1行下の2列目のセルに0を入力し、
右隣のセルにアクティブセルを移動。」
という内容にしてみました。
完成形
javaScript
1// シートに変更があった時に実行する関数 2function onEditEvent() { 3 // 変更のあったシート 4 var ss = SpreadsheetApp.getActiveSpreadsheet(); 5 var sh = ss.getActiveSheet(); 6 // 変更のあったセル 7 var cell = ss.getActiveRange(); 8 // 変更のあったセルの値 9 var val = cell.getValue(); 10 // 変更のあったセルの値が1だった時に 11 if( ( val == 1 ) ) { 12 // 変更のあったセルの有る行番号 13 var r = cell.getRow(); 14 // 変更のあったセルの有る行の下の行の2列目を選択 15 var rowRange = sh.getRange(r+1, 2); 16 rowRange.setValue(0).offset(0, 1).activate() ; 17 } 18}
【ありがたい参考記事】
・https://teratail.com/questions/118993
当記事です。希望を実現するにはスクリプトが必要ということがわかりました。
・http://chaika.hatenablog.com/entry/2015/09/03/143622
セルに特定の値を入力したら処理を行う方法を参考にしました。
スクリプトのベースはこちらの方のもの。
・http://www.relief.jp/docs/google-spreadsheet-gas-offset.html
アクティブセルを隣に移動する方法を参考にしました。
これまで、解決した際、参考記事のことについては書いていなかったのですが、
自分のためにもみんなのためにも書くべきかもしれないと思ったので、
これからは可能な限り書いていこうと思いました。
これまでした質問についても、ちょっと遡って、参考記事を追記してみようと思います。
ただ、どこまで追えるかわかりませんが…。
回答3件
あなたの回答
tips
プレビュー