WinXP、Excel2003を用いて、10桁の電卓を作ろうと思っていますが、エラーが多発しているので、修正したいと思っています。
〔作成するに当たっての条件〕
あとに補足で増えるかもしれません^^;
・最初の時点ではテキストボックスに0を表示しておく。
・計算結果が10桁で収まりきらない場合はエラーボックスを表示し、直前の数値を入れる状態に戻す。EX)11÷3
・=ボタンを押して計算結果を出すためには、「数字」「演算」「数字」の順番で3回以上押さないといけない。だから、「+3=」と押してもエラーを表示し、計算しない。
・最初の状態で0を何回押しても0は1回しか出ない。
・演算キーを1度でも使ったら=ボタンを押すまではテキストボックスに計算結果ではなく、直前に入力した数字を表示する。
・=ボタンを押し、計算結果が出た後に、再度反復して=ボタンを押しても連続して結果が出ることはしない。(一般の電卓でKが表示されている状態のことを指す)その一方で、計算結果が出た後に「演算」「数値」「=」を押した場合は、新しい計算結果がテキストボックスに表示される。
・計算過程では入力したデータは文字列として認識するが、=を押し、計算する時点において数値として認識するように変換する。
そこで、現在までに作成したのは以下の通りです。
Dim miku1As String
Dim miku2 As Double
Dim frg As String '1→+、2→-、3→×、4→÷
Private Sub ボタン_イコール_Click()
On Error GoTo myError
Select Case frg
Case 1
miku2 = miku2 + miku1
Case 2
miku2 = miku2 - miku1
Case 3
miku2 = miku2 * miku1
Case 4
miku2 = miku2 / miku1
End Select
TextBox1 = miku2
myError: MsgBox "エラーが発生しました。"
miku1 = Null
End Sub
Private Sub ボタン_加算_Click()
On Error GoTo myError
If miku2 = 0 Then
miku2 = miku1
Else
Select Case frg
Case 1
miku2 = miku2 + miku1
Case 2
miku2 = miku2 - miku1
Case 3
miku2 = miku2 * miku1
Case 4
miku2 = miku2 / miku1
End Select
End If
miku1 = Null
myError: MsgBox "エラーが発生しました。"
frg = 1
End Sub
~中略~
Private Sub ボタン0_Click()
miku1 = miku1 & 0
TextBox1 = miku1
End Sub
~中略~
Private Sub ボタンC_Click()
miku1 = Null
miku2 = 0
TextBox1 = Null
End Sub
お手数をおかけしますが、ご教授願います。
No.2ベストアンサー
- 回答日時:
計算する場合は精度を合わせたほうがよいと思います。
が、Double型も2進計算となるため小数同士だと誤差が生じるみたいです。
計算はVariant型がよいみたいです。
下記等参考にしてください。
参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …
No.1
- 回答日時:
どんなエラーがいつ出るのかわかりませんのでいくつかアドバイス
(1)miku1をStringにしている意図がわかりません
(2)どうしてもStringで処理したいならデータ型変換関数(CDbl)を利用しましょう
(3)frgをStringにしているので判定は"1"という用にダブルクォートで囲みましょう(エラーにはなりませんが)
(4)Clickイベントで必ずエラーが表示されます
Private Sub XXX_Click()
On Error GoTo myError
~
Exit Sub '←これがない
myError: MsgBox "エラーが発生しました。"
~
End Sub
>o_chi_chiさん、ありがとうございます。
>miku1をStringにしている意図がわかりません
最初はStringにせず、Longにも対応できるようにと思い、あえて書かずにおいていたのですが、省略はまずいのかと思いひとまず書いてみただけです。すいません。この場合はAsの後ろに何を入れるといいのでしょうか?
>Exit Sub '←これがない
初歩的なミスでした。申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# ある線が円の範囲に入っているかの計算 1 2022/12/07 16:14
- 数学 (4)のim(T)をu1,u2,u3の線型結合で表せ、という問題がわからないです。回答を見ると私の解 2 2023/05/31 22:14
- 楽器・演奏 ポールコゾフのナチュラルトップのレスポール 3 2022/06/22 18:35
- 物理学 統計力学における平衡状態の定義について 4 2022/12/27 01:47
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- その他(Microsoft Office) エクセルについて教えてください。 2 2022/10/20 14:55
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- その他(パソコン・スマホ・電化製品) 小さめのモニタースピーカー探しで悩んでいます。 2 2022/05/26 12:40
- 物理学 弦の振幅が次式で与えられる波はどのような波でしょうか。 u1= -Asin(2πvt-2πx/λ) 1 2023/03/02 17:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の課題で、1年の秒数を計...
-
65536は2の何乗なのでしょうか?
-
Excel VBAにてFFT
-
matlab計算での進捗状況を知りたい
-
入射角反射角
-
CRC8を教えてください
-
VBとVBAの違い
-
変化させるセルが変化しない
-
matlabで計算終了
-
2進数の乗算をc言語で計算した...
-
FORTRANで>>
-
骨折リスク評価のFRAXについて...
-
fortran πについて
-
VBAでの勤務時間計算
-
for文である数の倍数になるまで...
-
[急募]Pythonについてです。
-
VB6で正確なミリ秒を計測したい...
-
C言語についてです。 再帰を使...
-
CとFORTRANの計算速度はどちら...
-
ファイルサイズの単位 BYTE,MB...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
バッチファイルでウインドウを...
-
モジュラス103の計算とは何でし...
-
傾いた四角形内の範囲の条件式
-
Visual C++でdebugとreleaseで...
-
変化させるセルが変化しない
-
骨折リスク評価のFRAXについて...
-
C# 計算処理中に実行中ウィン...
-
VBAでの勤務時間計算
-
べき乗の計算が遅い理由
-
C言語についてです。 再帰を使...
-
Excel VBAにてFFT
-
数値計算の高速化 (cos, sin, exp)
-
VBとVBAの違い
-
VB6で正確なミリ秒を計測したい...
-
スレッド処理からダイアログを...
-
matlabで計算終了
おすすめ情報