アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

お手数をおかけしますが、ご教授願います。

A 回答 (2件)

計算する場合は精度を合わせたほうがよいと思います。


が、Double型も2進計算となるため小数同士だと誤差が生じるみたいです。
計算はVariant型がよいみたいです。
下記等参考にしてください。

参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …
    • good
    • 0
この回答へのお礼

>o_chi_chiさん、ありがとうございます。
ぜひ参考にさせていただきます。

お礼日時:2009/03/12 13:23

どんなエラーがいつ出るのかわかりませんのでいくつかアドバイス


(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
    • good
    • 0
この回答へのお礼

>o_chi_chiさん、ありがとうございます。
>miku1をStringにしている意図がわかりません
最初はStringにせず、Longにも対応できるようにと思い、あえて書かずにおいていたのですが、省略はまずいのかと思いひとまず書いてみただけです。すいません。この場合はAsの後ろに何を入れるといいのでしょうか?

>Exit Sub '←これがない
初歩的なミスでした。申し訳ありません。

お礼日時:2009/03/11 19:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!