配列を使って、テキストボックスを10個フォーム上に配置してて、
テキストボックス内に数字を入力して、
コマンドボタンをクリックしたら、
昇順されるようにプログラムされているんだけど、
テキストボックスの10のうち、5つのテキストボックスだけに
数字を入力して、残りの5つは空欄にして、
昇順を行うと、残りの5つのテキストボックス内の空欄に
0が表示されて、昇順の対象になります。
この0が入らないようにしたいんですが、
いい方法教えてください。
てゆーか0が入るような処理をしてるんじゃないですか?
ソースを見直してください。
もしくはソースを掲示してください。
For i = 0 To 9
'式が数値として評価できるかどうか調べます。
If IsNumeric(Text1(i).Text) Then
Text1_(i) = CInt(Text1(i).Text)
ElseIf Text1(i).Text <> "" Then
'数値以外ならメッセージボックスを表示します。
Text1(i).Text = MsgBox("数字のみの入力", vbOKOnly)
Text1(i).SetFocus
Text1(i) = ""
Exit Sub
End If
Next i
ソースはこんな感じです。
Text1_(i) って何ですか?
Dim Text1_(0 To 9) As Integer
という感じの配列ですか?
その場合、初期値はすべてゼロがセットされていますよ。
『テキストボックスに数値が入力されている場合に Text1_(i) に値をセットして、
それ以外の場合は Text1_(i) に値をセットしない』とした場合、
値がセットされなかった場合には、初期値のゼロが使用されます。
初期値を表示しないってことは可能ですか?
Dim Text1_(0 To 9) As Integer
と定義した時点で、Text1_(0) 〜 Text1_(9) の変数の初期値は0です。
テキストボックスに数値が入っている場合だけ、変数に値を入れているので、
値を入れなかったText1_(i)は0のままになっています。
並べ替え後、Text1_(i)の値をテキストボックスに表示させるとき、
Text1_(i)の値が0であれば、テキストボックスに表示しないような処理をする必要があります。
ただし、テキストボックスに入力される数字が、1以上の数字という条件の場合です。
”0やマイナスの値が入力される場合もある”のなら、Text1_(i)が0であっても無効な値とは言い切れないので。
並べ替えた結果をテキストボックスに表示させている処理を見直してください。
いろいろ対策はあると思いますが、
テキストボックスに入力できる数字の条件
(ゼロも入力可能か、負も入力可能か、
入力可能な最大値、最小値はいくらかなど)が
分からないことには、回答しづらいと思います。
# ↑『toro』じゃなくて、『とろ』です。
# その辺、よろぴく!
# エンターを押しちゃいました。
テキストボックスに入力できる数字の条件は1以上の整数です。
minamiさんのアドバイスを参考に
For i = 0 To 9
'配列の内容をメッセージボックスに表示します。
If Val(Text1(i).Text) Then
Text1(i).Text = Text1_(i)
Else
Text1(i).Text = ""
End If
Next
このように書いたのですが、ダメでした。
どうしてでしょうか?
If Val(Text1(i).Text) Then
ていうのは、テキストボックスの内容をチェックされていますよね。
Text1_(i) の変数の値が0であるかどうかの判定はどこにも書いてらっしゃらないから、
そりゃ、Text1_(i) が0であってもそのままテキストボックスに書いてしまうでしょう。
デバッグで1行ずつ処理を確認して、Text1(i).Textに何が入っているのか、
Text1_(i)には何が入っているのか理解すれば、どこがおかしいのか納得できると思いますよ。
マジごめんなさい。
デバックで確認しても、よくわからない。
For i to 0 to 9
If Not Text1(i).Text=0 Then
Text1(i).Text= Text1_(i)
End If
Next
と自分なりに考えたけど、
やっぱ無理でした。
具体的に例があったほうが判りやすいですね。
テキストボックス(0〜4)に以下のように値が入力されてたとします。
(10個も書くの面倒なので、配列5つということで^^;)
Text1(0)=3
Text1(1)=9
Text1(2)=2
Text1(3) 空白
Text1(4)=1
これをText1_(i)という配列に格納した結果
Text1_(0)=3
Text1_(1)=9
Text1_(2)=2
Text1_(3)=0
Text1_(4)=1
Text1_(i)という配列には最初から0が入っているので、テキストボックスが空で
何も値をいれなかったとしてもText1_(3)には0が残ったままです。
配列の並べ替えを実行た結果、
Text1_(0)=0
Text1_(1)=1
Text1_(2)=2
Text1_(3)=3
Text1_(4)=9
となります。
これをテキストボックスに入れます。
このとき必要なのは、Text1_()という配列に0が入っていたらテキストボックスに
何も入れないという処理
ゴンさんの処理は
If Val(Text1(i).Text) Then
とテキストボックスの中身をチェックしてますよね。
すると
For i to 0 to 9
i = 0 の時 → Text1(0)には3が入っているので、判定はOKとなり
Text1(i).Text= Text1_(i)
とやるとText1_(0)=0 になっているので
Text1(0).Text には Text1_(0)に入っている0を書いてしまいます。
For i to 0 to 4
If Text1_(i) > 0 Then
Text1(i).Text= Text1_(i)
Else
Text1(i).Text= ""
End IF
Next i
とやった場合、Text1_(i)に0が入っていれば、テキストボックスを空にしますので
上記の例で結果を見ると テキストボックスには
Text1(0) 空白
Text1(1)=1
Text1(2)=2
Text1(3)=3
Text1(4)=9
となります。
ありがとうございました。
かなりわかりやすかったです。
自分はVB始めて2週間くらいなんですが、
一日も早く、VBに慣れるにはどうしたらいいでしょうか?
簡単なプログラムを数多くこなしたほうがいいのか、
今回みたいな細かい(自分のレベル的に)プログラムを時間かけて
じっくり考えたほうがいいのか・・・
来月からSQLも始める予定なんですが、
それまでにある程度、VBこなせるようになりたいんですが、
何かよいアドバイスお願いします。
複雑なプログラムも小さい処理の集まりですから、プログラムの流れをしっかり考えて1つづつクリアしていけば大丈夫です。
でも、最初からそれをやろうとすると、どこから手をつけていいのかわからなくなってしまいます。
まずは、今回のような小さな処理から積み重ねることが早道でしょう。
私は、プログラミングは知識ではなく、センスだと思っています。
どんな関数を使えばよいか判らない・・という知識不足は、本で調べるとか、
ここみたいな掲示板で教えてもらえば良いのです。
でも、センスは自分で磨くしかありません。経験の積み重ねなんです。
そして、良いアプリケーションは、ユーザーにとって使いやすいものであることだと思います。
ユーザーにとって使いやすい、わかりやすいものを作ろうとすると、
プログラマーの負担は大きくなります。
ユーザーが間違った処理をした場合にどうするか、などエラー対応処理を考えるほうが、実際の処理部分を作る以上の時間が必要になるんです。
そして、良いソースを書くことも大事ですね。
他の人が見ても判りやすいようなソース。これ大事です。
自分が作ったプログラムでも複雑になってくると、「ここでどういう処理をしてるんだっけ?」って思い出せなかったり^^;
処理をすっきりとまとめる。できるだけコメントを入れて何をしているのか書いておく。そうすると、自分が見ても判りやすく、後で変更したい場合にも楽です。
がんばってたくさん経験を積んで、良いプログラムを書いてくださいね^^
一生懸命がんばります。
またわからないことがあったら、
よろしくお願いします。
初心者にとってわかりやすい、
参考書・サイト・講座等の情報がありましたら、
教えてください。
ありがとうございました。
またおねがいします。
ツイート | ![]() |