さぁ、前回で想像でやってみた方はいかがだったでしょうか?
答え合わせを兼ねて、勉強していってみましょう。
では、まずは定義を考えてみましょう。
クリアボタンを押した時にクリアされる。
では、クリアとは具体的には?
計算結果に0が出ればとりあえず良さそうですよね?
function名をbutton_clearとして、スクリプトエディタに書いていってみましょう。
と、ここで私のコードを見る前に、自分で書いてみましょう。
えーと、A2セルを0にする。
A2セルは絶対参照でいいですよね?
getRangeでA2セルを指定して、そこにsetValueで0を入れる。
いや、そもそもこのアクションってマクロで出来るんじゃない?と気づいた人は答えが出たようなもの。
マクロで書いてコピーしちゃえばいいんです。
function myFunction() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange(‘A2’).activate();
spreadsheet.getCurrentCell().setValue(‘0’);
};
これをbutton_clearにしちゃいましょう。
function button_clear() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange(‘A2’).activate();
spreadsheet.getCurrentCell().setValue(‘0’);
};
ただし、これから先にまとめるのにマクロgsのところにあると不便なので、コードgsのところにしましょう。
そして、「C」のボタンを選択状態にして右上の方にある、縦に並んだ「・・・」のとこをクリックしましょう。
その選択肢の「スクリプトを割り当て・・・」を選びbutton_clearにしましょう。
これで、「C」ボタンを押したらA2セルが0になるようになりました!
でも、ちょっと待って。
クリアボタンを押した時ってそれでいいのかな?
ひょっとすると、計算画面以外のところに数字を書かれちゃうかも知れない。
それが残ってると邪魔になるし、A1セルの「計算画面」ってテキストも消されちゃうかも知れない。
クリアを押したら、最初の準備が出来ている状態。そんな感じにしたい。
じゃあ、定義を変えてみましょう。
一回、全部のセルのデータを削除して、A1に「計算画面」ってテキストを入れて、A2に「0」を入れる。
これをマクロで作ってコピーして・・・。
function button_clear() {
var spreadsheet = SpreadsheetApp.getActive();
var currentCell = spreadsheet.getCurrentCell();
var sheet = spreadsheet.getActiveSheet();
sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).activate();
currentCell.activateAsCurrentCell();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange(‘A1’).activate();
spreadsheet.getCurrentCell().setValue(‘計算画面’);
spreadsheet.getRange(‘A2’).activate();
spreadsheet.getCurrentCell().setValue(‘0’);
};
どうでしょう?これでクリアボタンは出来上がりです。
と言いたいところなんですが、後に必要になってくるので、説明は後回しでやっておいてほしいことがあります。
B1セルに「ロック」、C1セルに「ストック値」、D1セルに「計算式」の文字列。
B2セルに「0」を代入しておいて欲しいのです。
この状態をデフォルトにしておかないと、計算式に進んだ時にやり直しになってしまうので、説明後回しで申し訳ないですが、とりあえず下のコードを完成として入れておいてください。
よろしくお願いします。
function button_clear() {
var spreadsheet = SpreadsheetApp.getActive();
var currentCell = spreadsheet.getCurrentCell();
var sheet = spreadsheet.getActiveSheet();
/*すべてのセルデータを削除*/
sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
/*1行目にテキストを代入*/
sheet.getRange(“A1”).setValue(“計算画面”);
sheet.getRange(“B1”).setValue(“ロック”);
sheet.getRange(“C1”).setValue(“ストック値”);
sheet.getRange(“D1”).setValue(“計算式”);
/*A2セルに0を代入*/
sheet.getRange(‘A2’).setValue(0);
/*B2セルに0を代入*/
sheet.getRange(‘B2’).setValue(0);
};
コメント