12+21=1221??(1/2)

解決済みの質問

12+21=1221??

先日も質問させていただいた件ですが、
Access2000で電卓のプログラムを組んでいます。


Select Case b
  Case 0:
  Case 1: c = a + d
  Case 2: c = a - d
  Case 3: c = a * d
  Case 4: c = a / d
End Select
Forms!電卓!txt = c

とプログラムを組んで、処理させているのですが、
「b=1」のとき、変な値になってしまうのです。

「a=12」、「d=21」のとき、「c=33」になるはずですよね?
それが、「c=1221」となってしまうんです。

他の、「b=2」、「b=3」、「b=4」のときはちゃんとした値がでるのですが、
「b=1」のときだけ上手くいきません。

「a=1」、「d=999」、といったような、「1桁+α桁」であれば上手く計算できるのですが、
「α桁+β桁」の場合、変な答えになってしまいます。

どうしてでしょうか?補足はします。
よろしくお願いします。

投稿日時 - 2003-06-25 14:06:05

QNo.584687

すぐに回答ほしいです

質問者が選んだベストアンサー

こんにちは。maruru01です。

aとdの値が文字列として扱われているからだと思います。
「-」「*」「/」の場合は自動的に数値に変換してくれますが、「+」は文字列の連結でも使用しますので、そのまま文字列として連結されたのだと思います。
したがって、計算する際にVal関数やCDbl、CLngなどの型変換関数を通せばいいと思います。
(一応、統一性もあるので他の演算も変換しておきましょう。)


Select Case b
  Case 0:
  Case 1: c = Val(a) + Val(d)
  Case 2: c = Val(a) - Val(d)
  Case 3: c = Val(a) * Val(d)
  Case 4: c = Val(a) / Val(d)
End Select

投稿日時 - 2003-06-25 14:15:10

お礼

早速の回答、ありがとうございます。

やはり、そうでしたか・・・
早速、やってみます。

ありがとうございました。

投稿日時 - 2003-06-25 14:17:54

ANo.2

7人が「このQ&Aが役に立った」と投票しています

[  前へ  |  ]

ベストアンサー以外の回答(7件中 1~5件目)

ANo.8

変数宣言をせよの問題とか
静的変数として値を保持せよとか
型変換の問題とか出ていますが、本件はテキストボックスに値を入れさせそれを使っているに違いない、
(1)テキストボックスのTextプロパティは、文字列型(String)の値を返します(#7のご回答)
(2)2つ以上の文字列に対して「+」は&と同じく文字列の結合になること。(#4のご回答)
(3)VAL(A)などで数値に直して、演算すべき(#2のご回答)
の3点がポイントでしょう。
前問では一度作ったことがあるとかだッたようですが頑張ってください。

投稿日時 - 2003-06-25 22:02:27

お礼

ありがとうございました。

何とか解決しました。
 

投稿日時 - 2003-06-25 23:25:28

ANo.7

#3です。

電卓プログラムということですが、
変数に格納する値を、
フォームのテキストボックスから取得したりしていないですか?

テキストボックスのTextプロパティは、文字列型(String)の値を返しますよ。

計算に使用する値は、
つねに静的変数として値を保持しておくことをお勧めします。

投稿日時 - 2003-06-25 14:27:29

お礼

何度もありがとうございます。

変数の定義に問題があったみたいです。
何とか解決しました。

ありがとうございました。

投稿日時 - 2003-06-25 23:23:59

ANo.6

再びmaruru01です。

補足ですが。
変数の宣言を、

Dim a, d, b As Long

とすると、bだけがLongで宣言されて、aとdはVariant型になってしまいますよ。
全てLongで宣言する場合は、

Dim a As Long, d As Long, b As Long
または、
Dim a As Long
Dim d As Long
Dim b As Long

のようにして下さい。

投稿日時 - 2003-06-25 14:24:42

お礼

何度もありがとうございます。

変数は一度に宣言できないんですね。
どうもこれが問題となってたみたいです…
無事に解決できました。

ありがとうございました。

投稿日時 - 2003-06-25 23:21:43

ANo.5

この現象は変数「a」が文字列として認識されたときに起こります。
変数宣言が
Dim a As Long
となっているか確認してください。
※もしくは宣言箇所が実行箇所では有効にならない変数宣言をしている可能性があります。

AcsessなどのVB系言語では宣言をしないとValiant型になります。

それでもうまくいかないときは応急処置方法として
c = clng(a) + clng(d)
という手もあります。

投稿日時 - 2003-06-25 14:20:01

お礼

早速の回答、ありがとうございました。

変数は、Long で宣言しています。
(変数は全て最初に宣言しています。)

参考にさせていただきます。
ありがとうございました。

投稿日時 - 2003-06-25 14:24:01

ANo.4

Accessでは、「+」を使うと、文字列の連結「&」として扱われる時があります。

つまり、変数cが文字列で宣言されてませんか?aとbは数値タイプで宣言されてますね。

変数cを数値タイプで宣言してください。そしてForms!電卓!txt = CStr(c)としてください。

投稿日時 - 2003-06-25 14:17:32

お礼

早速の回答、ありがとうございます。

変数は全て Long で宣言してるんですが、
やはり文字列として処理されてるのでしょうね。

参考にさせていただきます。
ありがとうございました。

投稿日時 - 2003-06-25 14:21:50

あわせてチェックしたい
  • select case文について ...
  • VBA Select Caseについて ...
  • ExcelVBA Select Caseについて ...
PR

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら