今回は前回の答え合わせから。
問題は
もしもA2セルの数字が消されてしまっていたら?
もしもA2セルに文字列が入っていたら?
でした。
条件もしもを入れ込めば出来るはず。
じゃあ、もしもそうだったらどうするのが正解でしょう?
電卓だと文字列が入ることは無いので、問題ないことです。
じゃあ、無視して計算できないから初期状態って判別してしまいましょう。
もしも、A2セルに数字が入ってなかったら、押されたボタンの数字にする。
こんな感じですね。
function button1() {
if ((A2 != null && A2 != “” && A2 != 0 )){
sheet.getRange(“A2”).setValue(A2*10+1);
} else {
sheet.getRange(“A2”).setValue(1);
}
}
null値じゃない、かつ空白じゃない、かつ0じゃない時には普通に計算を。
そうじゃなければ、押した数字を入れる。
という感じのコードです。
null値と空白というややこしいことが入ってますが、この辺は他のサイトで調べてみてください。
あと、数値型であるという式でやるやり方もあります。
この辺は脱線辺で頑張ってみてください。
さぁ、これで完成。
なのでしょうか?
これから計算式を入れていけば気づくのでそのあとでもいいのですが・・・。
数字が画面に表示されていて、例えば「+」を押した時にどうなるでしょう?
押されていた数字が仮抑えされて、記録され、次に押された結果と足し算される必要がありますね。
ということは、「+」を押したら一旦どこかに今の数字を記録する。
記録した上で次に押された数字は表示されている数字に足されるのではなく、1の位に入力される。
で、その次に押された数字はまた
(「表示されている今の数字」×10)+「今押された数字」
になる必要がある。
ややこしいですねぇ。電卓作った人は相当考え込んだのでしょう。
計算ボタン「+」を押したときに、数字の一時記録とロックをかける機能を付けることで解決させましょう。
クリアボタンの設定時に後で使うとして入れていた、
ロック値、ストック値、計算式
の3つの欄を使いましょう。
「+」ボタン設定時に入力させるとして、されていた場合のパターンを数字ボタンで解決しておきます。
function button1() {
if ((A2 != null && A2 != “” && A2 != 0 && B2 != 1)){
sheet.getRange(“A2”).setValue(A2*10+1);
} else {
sheet.getRange(“A2”).setValue(1);
}
sheet.getRange(“B2”).setValue(0);
}
B2セルにロック値1が入っていた場合にも、押された数字を1の位に入れることにします。
で、次の数字を押すときには通常動作に戻すので、ロック値を元の0に戻しておきます。
これで望んだ挙動になったかと思います。
一旦これで数字ボタンは完成です。
説明をここまでずっとしてきてしまっているので、ただ読んでコピペしてもある程度出来るようになっているかも知れません。
が、実際に自分で作る時にはコードを書いている時間よりも、ああでもないこうでもないと頭の中にパターンを出しては消しを繰り返す時間の方が長くなります。
私はこれこそがプログラミングの基礎で本髄ではないかと考えています。
こうしたい→どうすればいい→問題点は? → 完成!
↑ ↓ある ない
←←←←←←←
この思考パターンがしっかり持てるように、子供たちにプログラミング基礎を教えることこそが重要じゃ無いでしょうか?
コメント