• ベストアンサー

CSVの読み込みについて

いつもお世話になります。 TextBox1に品物のコードを入れて、Label1に価格を表示するという簡単そうなものです。 品物のコードはCSVファイルのItem(1)から取得します。ところが存在しないコードを入力すると、 追加情報 : インデックスが配列の境界外です というエラーが出ます。下記ソースに何を追加すればよろしいのでしょうか?ご教授下さい。よろしくお願い致します。 Dim Reader As New IO.StreamReader("C:\XXX.csv", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim Items() As String Dim Line As String = Reader.ReadLine       Dim Code As String 'コード Dim kakaku As String '価格 Do Until IsNothing(Line) Items = Line.Split(",") Code = Items(1) If HinCode = TextBox1.Text Then kakaku = Items(2) Label1.Text = kakaku Exit Sub End If Line = Reader.ReadLine Loop Reader.Close()

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

  • ベストアンサー
  • arare2005
  • ベストアンサー率31% (63/199)
回答No.4

色々読み方はありますが、参考にして下さい(^^; Private Sub Label1_Click() Dim Line As String Dim Items() As String Open "D:XXX.csv" For Input As #9 Label1.Caption = "" Do Until EOF(9) Line Input #9, Line Items = Split(Line, ",") Debug.Print Items(0), Items(1) If Text1.Text = Items(0) Then Label1.Caption = Items(1) Exit Do End If Loop Close #9 End Sub

taiyo99
質問者

お礼

参考になりました。 ありがとうございました。

その他の回答 (4)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

品名,価格 Items(0),Items(1) だと思います。 Items(2)にするので、配列範囲外になっているのでは

taiyo99
質問者

お礼

皆様の回答を参考にさせて頂き、何とか解決しました。ありがとうございました。

  • arare2005
  • ベストアンサー率31% (63/199)
回答No.3

>Do Until IsNothing(Line) -->EOF がこれで検知できる様にCSVを設定していますか? 最後の行に改行コードが入っていればエラーになると思います。 ランダムに読み込まないのであれば、普通にLINE INPUT の方が判り易いかな~ でEOF を聞けば間違いはありません。 >If HinCode = TextBox1.Text Then > kakaku = Items(2) > Label1.Text = kakaku > Exit Sub >End If EXIT SUB --> EXIT DO LOOP を超えて処理するのは、基本的にいけません。 CLOSE 処理が抜けています。 配列も(0)~ではなく(1)~で設定しているのでしょうか? ここだけ見ると、ちょっと判り辛いかも知れませんネ(^^;

  • arare2005
  • ベストアンサー率31% (63/199)
回答No.2

No.1です。ごめんなさい。回答を間違えました。m(_ _)m よく見てませんでした。

taiyo99
質問者

補足

こんなCSVファイルの内容です りんご,500 いちご,700 もも,1000 「りんご」をTextBoX1に入力すると、Label1に「500」と表示されるものです。 TextBox1に「みかん」と入力するとエラーがでます。 エラーを出さずに他のフォームに移動させるようにしたいです。

  • arare2005
  • ベストアンサー率31% (63/199)
回答No.1

>TextBox1に品物のコードを入れて、Label1に価格を表示するという ここだけのコーディングには、それらしい記述がないのですが。。。 又、基本的にエラーの場合の処理は記載がありません。 ※気づいた所だけ >Dim Items() As String これでは配列がいくつあるか明示されていません。 ReDim ... Elase などできちんと再定義やクリアしましょう。 Dim Items(1 TO 2) ... でも良いですが、回答になってるのでしょうかネ(^^;

関連するQ&A