C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: VBのInteger


(過去ログ 94 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■56111 / inTopicNo.1)  VBのInteger
  
□投稿者/ ぶん (1回)-(2010/12/28(Tue) 12:11:42)

分類:[VB6 以前] 

2010/12/28(Tue) 13:20:46 編集(投稿者)

Windows XP
VB 6.0
で開発しています。

今、Formから値を持ってきて
数字だった場合は変数iNoに数値に変換
文字だった場合は変数iNoに何も入れない
という処理を行いたいと思っています。

以下抜粋

'データ収集
If IsNumeric(No.Text) Then
iNo = CInt(No.Text) ' 文字列を数値に変換
Else
iNo = ※
End If

こんな感じでコーディングしています。
そこで問題なのが※の部分です。
何も入れないというのは、
String型でいうと、
iNo = ""
というような感じです。
Integer型ではできないのでしょうか?

文字や、空白の場合
OKボタンを押すと、関数が呼ばれ、
その関数でエラーを表示させます。

0〜10以外の場合
番号不正エラー
というエラーを出すので、
文字の場合もそのエラーを出したいです。
この場合変数iNoに0〜10以外の数値を
※で設定するのが一番いい方法でしょうか?
引用返信 編集キー/
■56112 / inTopicNo.2)  Re[1]: VBのInteger
□投稿者/ shu (330回)-(2010/12/28(Tue) 12:20:11)
No56111 (ぶん さん) に返信

> この場合変数iNoに0〜10以外の数値を
> ※で設定するのが一番いい方法でしょうか?
それもひとつの方法だと思いますが、入力内容の
状態を保存するための変数をもう1つ用意した方が
わかりやすいかと思います。


ちょっとそれますが、文字という言葉を使われてますが数字も文字です。

引用返信 編集キー/
■56113 / inTopicNo.3)  Re[1]: VBのInteger
□投稿者/ よねKEN (651回)-(2010/12/28(Tue) 12:27:26)
No56111 (ぶん さん) に返信
> 文字の場合もそのエラーを出したいです。

Elseの中でエラーにする、というのも一案です。
#そういう案もあるよ、というだけでこの案がベストではないですが


引用返信 編集キー/
■56114 / inTopicNo.4)  Re[1]: VBのInteger
□投稿者/ 魔界の仮面弁士 (2002回)-(2010/12/28(Tue) 12:36:32)
No56111 (ぶん さん) に返信
> 分類:[VB.NET/VB2005 以降] 
> Windows XP
> VB 6.0
> で開発しています。
分類とあっていないような。

> 今、Formから値を持ってきて
その値というのは、文字列なのでしょうか?


>     If IsNumeric(No.Text) Then
>         iNo = CInt(No.Text)   ' 文字列を数値に変換
念のために確認。その判定で、仕様は満たせていますか?

IsNumeric("123.5")  は True を返し、CInt すると 124 になります。(123.5)
IsNumeric("1,,,2")       は True を返し、CInt すると  12 になります。
IsNumeric("98,76.54E-3") は True を返し、CInt すると  10 になります。(9.87654)
IsNumeric("3D2")         は True を返し、CInt すると 300 になります。
IsNumeric("&H123")       は True を返し、CInt すると 291 になります。
IsNumeric("&123")        は True を返し、CInt すると  83 になります。
IsNumeric("(10)")        は True を返し、CInt すると -10 になります。
IsNumeric("1.5-")        は True を返し、CInt すると  -2 になります。(-1.5)
IsNumeric("43210")       は True を返し、CInt すると実行時エラー 6 になります。(オーバーフロー)


>     Else
>         iNo = ※
>     End If
> 何も入れないというのは、
何も入れないなら、Else 句自体不要でしょう。
「何も入れない」ということと、「空っぽであることを表すデータを入れる」ことは異なります。

> Integer型ではできないのでしょうか?
たとえば、「iNo が 0 なら、空データとして扱う」とか
「iNo が &H8000 なら、空データとして扱う」などのように、
プログラム内で決め事として取り扱えば良いと思います。

もしくは、Integer 型ではなく Variant 型としておき、
空データは Empty や Null を使って表現するといった所でしょうか。


> 0〜10以外の場合
> 番号不正エラー
> というエラーを出すので、
> 文字の場合もそのエラーを出したいです。
範囲外の値を設定しようとした場合に、それを補足したいという意図ならば、
iNo をモジュールレベル変数として管理するのではなく、
Property プロシージャとして実装する事をおすすめします。

引用返信 編集キー/
■56116 / inTopicNo.5)  Re[2]: VBのInteger
□投稿者/ ぶん (2回)-(2010/12/28(Tue) 13:04:22)
No56112 (shu さん) に返信
> ■No56111 (ぶん さん) に返信
>
>>この場合変数iNoに0〜10以外の数値を
>>※で設定するのが一番いい方法でしょうか?
> それもひとつの方法だと思いますが、入力内容の
> 状態を保存するための変数をもう1つ用意した方が
> わかりやすいかと思います。
>
>
> ちょっとそれますが、文字という言葉を使われてますが数字も文字です。
>

すみません。
数字も文字だということはわかっているのですが
なんと文章にしていいかわからず
数字と文字というように分けました。

引用返信 編集キー/
■56117 / inTopicNo.6)  Re[2]: VBのInteger
□投稿者/ ぶん (3回)-(2010/12/28(Tue) 13:08:23)
No56113 (よねKEN さん) に返信
> ■No56111 (ぶん さん) に返信
>>文字の場合もそのエラーを出したいです。
>
> Elseの中でエラーにする、というのも一案です。
> #そういう案もあるよ、というだけでこの案がベストではないですが
>
>

Elseの中でエラーを出せればいいのですが、
今、VBとVCと同じ内容のアプリを言語を
別で二つ作っているため、

> OKボタンを押すと、関数が呼ばれ、
> その関数でエラーを表示させます。

この関数を変更することはできません。
この関数はVBとVCと両方から呼ばれているためです。
また、VCと同じ内容にしないといけないため
Elseでエラーを出すことはできないことになっています・・・。
引用返信 編集キー/
■56118 / inTopicNo.7)  Re[2]: VBのInteger
□投稿者/ ぶん (4回)-(2010/12/28(Tue) 13:18:08)
2010/12/28(Tue) 13:19:05 編集(投稿者)

No56114 (魔界の仮面弁士 さん) に返信
> ■No56111 (ぶん さん) に返信
>>分類:[VB.NET/VB2005 以降] 
>>Windows XP
>>VB 6.0
>>で開発しています。
> 分類とあっていないような。
すみません!
[VB.NET/VB2005 以前]と見間違えました…

>>今、Formから値を持ってきて
> その値というのは、文字列なのでしょうか?
文字列です。

>
>> If IsNumeric(No.Text) Then
>> iNo = CInt(No.Text) ' 文字列を数値に変換
> 念のために確認。その判定で、仕様は満たせていますか?
>
> IsNumeric("123.5") は True を返し、CInt すると 124 になります。(123.5)
> IsNumeric("1,,,2") は True を返し、CInt すると 12 になります。
> IsNumeric("98,76.54E-3") は True を返し、CInt すると 10 になります。(9.87654)
> IsNumeric("3D2") は True を返し、CInt すると 300 になります。
> IsNumeric("&H123") は True を返し、CInt すると 291 になります。
> IsNumeric("&123") は True を返し、CInt すると 83 になります。
> IsNumeric("(10)") は True を返し、CInt すると -10 になります。
> IsNumeric("1.5-") は True を返し、CInt すると -2 になります。(-1.5)
> IsNumeric("43210") は True を返し、CInt すると実行時エラー 6 になります。(オーバーフロー)
すべてを試したわけではありませんが
問題ありません。
0より小さく10より大きくなるものはすべてエラーが出るようになっているので
ほとんどのものはエラーがかえって来ます。

>> Else
>> iNo = ※
>> End If
>>何も入れないというのは、
> 何も入れないなら、Else 句自体不要でしょう。
> 「何も入れない」ということと、「空っぽであることを表すデータを入れる」ことは異なります。
すみません。
> 「空っぽであることを表すデータを入れる」
ということを言いたかったです。

>>Integer型ではできないのでしょうか?
> たとえば、「iNo が 0 なら、空データとして扱う」とか
> 「iNo が &H8000 なら、空データとして扱う」などのように、
> プログラム内で決め事として取り扱えば良いと思います。
やはり決め事をしないとできないですか・・・

> もしくは、Integer 型ではなく Variant 型としておき、
> 空データは Empty や Null を使って表現するといった所でしょうか。
iNoはInteger型を使わなければならないので
Variant型は使えないです・・・
でも、そのような型で表現することもできるんですね!

>>0〜10以外の場合
>>番号不正エラー
>>というエラーを出すので、
>>文字の場合もそのエラーを出したいです。
> 範囲外の値を設定しようとした場合に、それを補足したいという意図ならば、
> iNo をモジュールレベル変数として管理するのではなく、
> Property プロシージャとして実装する事をおすすめします。
Property プロシージャというのは初めて聞いたので
調べてみます。
引用返信 編集キー/
■56119 / inTopicNo.8)  Re[3]: VBのInteger
□投稿者/ shu (331回)-(2010/12/28(Tue) 14:17:37)
No56117 (ぶん さん) に返信
> この関数を変更することはできません。
> この関数はVBとVCと両方から呼ばれているためです。
> また、VCと同じ内容にしないといけないため
> Elseでエラーを出すことはできないことになっています・・・。
Elseでエラーを発生させても関数内でエラー処理されていれば
外部への影響はないかと思いますが。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -