- ベストアンサー
配列の使い方
VBの練習としてYahooゆうパックの料金計算プログラムを作ろうと思ってます。 色々検討して、配列を使って作ろうと思ったのですが、うまく行きません。 以下うまくできない部分なのですが、発送先の都道府県を0~4の発送区分に仕分ける作業をしようとしています。 区分4への振り分けが多すぎでエラーが出ていると思うのですが、回避するにはどうしたら良いでしょうか? また、配列の中身をすべてOrでつないでいますが、もっとスマートな書き方はありますか? /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_ Dim strHsaki(47) As String Dim strHmoto As String Dim shtHsaki As Short strHsaki = Split("市内,北海道,青森,岩手,宮城,秋田,山形,福島,東京,神奈川,埼玉,千葉,茨城," & _ "栃木,群馬,山梨,新潟,長野,富山,石川,福井,愛知,岐阜,静岡,三重,大阪,兵庫," & _ "京都,滋賀,奈良,和歌山,鳥取,島根,岡山,広島,山口,徳島,香川,愛媛,高知," & _ "福岡,佐賀,長崎,熊本,大分,宮崎,鹿児島,沖縄", ",") strHmoto = ComboBox1.Text Select Case strHmoto Case "北海道" If ComboBox2.Text = strHsaki(0) Then shtHsaki = 0 ElseIf ComboBox2.Text = strHsaki(1 Or 2) Then shtHsaki = 1 ElseIf ComboBox2.Text = strHsaki(3 Or 5) Then shtHsaki = 2 ElseIf ComboBox2.Text = strHsaki(4 Or 6 Or 7 Or 16) Then shtHsaki = 3 ElseIf ComboBox2.Text = strHsaki(8 Or 9 Or 10 Or 11 Or 12 Or 13 Or 14 Or 15 Or 17 _ Or 18 Or 19 Or 20 Or 21 Or 22 Or 23 Or 24 Or 25 _ Or 26 Or 27 Or 28 Or 29 Or 30 Or 31 Or 32 Or 33 _ Or 34 Or 35 Or 36 Or 37 Or 38 Or 39 Or 40 Or 41 _ Or 42 Or 43 Or 44 Or 45 Or 46 Or 47) Then shtHsaki = 4 End If End Select
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
エラーが発生しているのは、配列を静的に宣言しているからです。 要素数はSplit関数の実行後に確定します。 Dim strHsaki(47) As String ↓修正 Dim strHsaki() As String コンボボックスのテキスト編集は、For文で該当地域を検索し 合致した添え字で配送地域の区分を決めるのはどうでしょうか 例 Dim hitIndex As Integer hitIndex = -1 If ComboBox1.Text = "北海道" Then For i = 0 To UBound(strHsaki) If ComboBox2.Text = strHsaki(i) Then hitIndex = i Exit For End If Next i End If Select case hitIndex Case 0 shtHsaki = 0 Case 1 , 2 shtHsaki = 1 Case 3 , 5 shtHsaki = 2 Case 4 , 6 , 7 , 16 shtHsaki = 3 Case Else shtHsaki = 4 End Select
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
# お使いの開発環境の情報も投稿しましょう # たとえば VisuaBasic2005 EE とか ・・・ > ElseIf ComboBox2.Text = strHsaki(1 Or 2) Then は何を期待していますか? ComboBox2.Textが"北海道" または "青森"の場合を期待しているのでしょうか それだとこの構文では期待通りには動作しません 比較の右辺は strHsaki( 1 or 2 )の評価は strHsaki(3)と等価です つまり 1 or 2の演算結果が strHsakiの引数になります ElseIf ComboBox2.Text = strHsaki(1) Or _ ComboBox2.Text = strHsaki(2) Then といった具合に分けないと期待する動作にはなりませんよ
お礼
文法的にすでに間違ってたんですね。。。(汗; ありがとうございました。
お礼
大変参考になりました。 ありがとうございました!!