宜しくお願い致します。
タイトルどおりなのですが・・・配列宣言したものを一気に参照して合致する物があるかどうかをチェックする方法は無いでしょうか??
現在のコードは以下のようになっています。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim no() As Integer = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
Dim table() As Integer = {15800, 11980, 25980, 19800, 219800, 35600, 65800, 73260, 119800, 24780}
Dim a, b, c, i As Integer
a = Val(TextBox1.Text)
b = Val(TextBox2.Text)
P1:
For i = 0 To no.Length - 1
If no(i) = a Then
c = i
Exit For
Else
Do
MsgBox(Prompt:="規定値外です。", Title:="エラー")
a = Val(InputBox(Prompt:="商品番号を再入力")) '未入力の場合“0”を返す
If a = 0 Then
Exit Sub 'inputboxが未入力等の場合は終了
End If
GoTo P1 '“0”以外の数字が入力された場合は“P1”へ
TextBox1.Text = a 'テキストボックス1にも現在の“a”の値が反映されるように
Loop
End If
Next
Label4.Text = table(c)
Label5.Text = table(c) * b
End Sub
現状の場合for~next内にゴチャゴチャ分岐処理をさせるようになりnextにたどり着く前にforのところに戻す形になっているのでnoで宣言している中でも11だけにしか反応しない状態となっています。
どこかでnoで宣言している物を一気に参照して合致する物が無いかどうかを調べることができるようでしたら、このような状態にならないで済むのではないかと思っていますが、プログラミングを勉強し始めたばかりなのでいい方法に関して見当がつきません。
どなたか良きアドバイスをお願い致します。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
あ…スミマセンANo.4ですが、言語は微妙に違いますがDictionaryの事は既に書かれてますね(汗)
.NETだと標準的にDictionaryクラスがあります。
VBSは分かりませんが、VB6あたりでもScripting機能を参照設定する事で
一応Dictionaryは使えますね。
No.4
- 回答日時:
えーと、厳密に細かい内容は見てないですが…
.NET系だったら、いっそ配列使わないでDictionaryを使った方が楽な気がしますが
どうでしょう?(.NETの全バージョンで使えましたよね、確か)
パッと見、Key+Valueのデータっぽいですし、一発検索できますよ。
細かい事はヘルプでDictionaryを探して下さい。
No.3
- 回答日時:
質問の意図など判りにくいが、
有る数(や文字列)が、ある集合(配列のカタチにあるとして)の中の要素にあるかどうか(要素の何番目に有るか)、一発で調べたいのだろうが、一発というのが(プログラムコード)表現上の問題で、そういうサブルーチンやメソッドなどを、探索アルゴリズムで作らないと出来ません。これが一発で出来れば、みんな苦労しない。そのために色々な構造が考えられている。
作るのは言語処理系作成者や自作でもよいわけだが、
高級言語レベルで出来るのはそろそろ現れている。
例えばVBScriptで
set myDic =Createobject("Scripting.Dictionary")
myDic.Add "黄色", "まくわ"
myDic.Add "赤", "スイカ"
myDic.Add "緑", "きゅうり"
myDic.Add "紫", "ナス"
x="緑"
If myDic.Exists(x) Then
MsgBox "このキーは存在します。"
Msgbox myDic.item(x)
Else
MsgBox "このキーは存在しません。"
End If
ーー
以上をメモ帳に貼り付け、例えば dic1.vbsというファイル名でデスクトップ保存する。
アイコンをクリックで実行される。
これは検索を簡単一発でスムーズに実行しているようだが、ウラでプログラムで相当な処理をしている。
言いたいことは判ってもらえたでしょうか。
他に#2のご回答で言われている、
http://homepage1.nifty.com/rucio/main/dotnet/Sam …
やJavaにも出来ているようです。
http://d.hatena.ne.jp/oda_susu/20080206/1202313189
No.2
- 回答日時:
入力値があるかどうかチェックなら
VB2002以降なのであれば ・・・
Array.IndexOfでチェック可能なように思います
dim a,b,c as Integer
if Integer.TryParse( TextBox1.text, a ) then
c = Array( no, a )
if c == -1 then
MsgBox "規定値ではありません"
exit sub
end if
if Integer.TryParse( TextBox2.Text, b ) = false then
MsgBox "整数値ではありません"
exit sub
end if
label4.Text = table(c)
label5.Text = table(c) * b
else
MsgBox "整数値ではありません"
end if
といった具合で … 必要な箇所を適宜修正してください
No.1
- 回答日時:
まず、前提を確認させてください。
これはどのバージョンのVisual Basicなのでしょうか?
次に、このコードでどんな動作を期待しているのでしょうか?
提示していただいたコードをコピーさせていただき動作を確認しましたが、1つでも条件に一致すると、終了するようになっています。
1回で終了するだけでなく、入力箇所と出力箇所から考えて、1つのデータにしか対応していないようです。
また、これは1回しかOKパターンが実施されないという点と関係があり、質問者さんもお気づきになっているようですが、For文を使う必要がなくなっています。
OKパターンではFor文を抜け出していますし、NGパターンでもSubを抜け出すか、GoTo文でFor文の頭に舞い戻っているので、繰り返しが発生しません。
とりあえず、2番目の『どんな動作を期待しているのか?』を教えていただければ、他の方からも何らかのアドバイスを出しやすくなると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Functionの戻り値を配列にした...
-
2次元配列のデータをファイルへ...
-
Excel VBAでsub,dimは何の略?
-
ExcelVBAで他のファイル(proje...
-
配列に複数の値があるか簡潔に...
-
チェックボックスを操作できな...
-
C言語のサフィックスについて
-
VBA public変数はどのようなこ...
-
C#のループでtextboxに値を入れ...
-
他のフォームから別のフォーム...
-
マクロ 条件式
-
【VB6.0】 あるフォームから他...
-
リストビューの列ヘッダーの幅...
-
【VBScript】変数のスコープ
-
VB.NETでのイベントの途中終了
-
verilogのcase文
-
アクセスできない保護レベルエ...
-
VBAでcallで呼び出したsubを終...
-
SavePictureで保存できない
-
ボールが壁に当たって跳ね返る...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Functionの戻り値を配列にした...
-
Excel VBAでsub,dimは何の略?
-
配列に複数の値があるか簡潔に...
-
xmlの値を配列変数に格納し...
-
2次元配列のデータをファイルへ...
-
xmlの値を配列に格納したいんで...
-
ExcelVBAで他のファイル(proje...
-
VB6で配列を引数にするときの2...
-
sublimit textっていうエディタ...
-
エクセルVBAでテキストボッ...
-
VBA public変数はどのようなこ...
-
VBAでcallで呼び出したsubを終...
-
他のフォームから別のフォーム...
-
C#のループでtextboxに値を入れ...
-
チェックボックスを操作できな...
-
レコードセットにnullの場合
-
プログラムの素朴な質問です 分...
-
VB.NETでのイベントの途中終了
-
VBAで入力数値について
-
String型の値にスラッシュをつ...
おすすめ情報