こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

実行時エラー'9':インデックスが有効範囲にありま

WindowsXPで、Access2002を使用しています。

テーブル1のフィールド1の値を、ハイフン区切りで分割して、フィールド2とフィールド3へ格納するVBAを作成しようとしていますが、あと少しのところでエラーになってしまって解決策が見当たりません。

エラー内容は、「実行時エラー'9':インデックスが有効範囲にありません。」で、下記VBAの

rs.Update "フィールド3", ksplit(1)

の部分のksplit(1)の格納場所が無かった為に発生していると思います。

実際、その部分を無効にすると、エラーは無くなりますが、フィールド3のデータも必要です。

このようになって欲しいです。
例)
テーブル1
フィールド1 フィールド2 フィールド3
1000-100       1000       100
50-301         50       301


Private Sub コマンド0_Click()

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset

rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic

Do Until rs.EOF

Dim ksplit As Variant
ksplit = Split(rs!フィールド1, "-")
rs.Update "フィールド2", ksplit(0)
rs.Update "フィールド3", ksplit(1)
Debug.Print rs!フィールド2,rs!フィールド3

rs.MoveNext
Loop

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

End Sub

以上、初心者で、行き詰っておりますので、よろしくお願いします。

投稿日時 - 2011-08-04 16:57:10

QNo.6921192

すぐに回答ほしいです

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

Splitで登録される ksplit のサイズは
Ubound で調べられます
これは、その配列の添え字の最大値を返します

つまり、
10-100なら、Ubound(ksplit)は、1が返ります
つまり(0),(1)が参照できるわけです

10なら、Ubound(ksplit)は、0が返ります
同様に(0)1つだけが参照できるわけです

>ksplit(1)の格納場所が無かった為に発生していると思います。

無いことがわかるはずですから、対処の方法はわかると思います

ヒントはここまで!

投稿日時 - 2011-08-04 17:27:32

お礼

ご回答ありがとうございます。
そして、重要なヒントありがとうございました。
お蔭様で、すぐに解決する事ができました。
Uboundの存在を知らなかったので、大変勉強になりました。

投稿日時 - 2011-08-04 18:02:54

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

Splitで区切ってみたら、データの中に「-」が無くて、ksplit(0)にだけ結果が返って来ただけの話でしょう。

「-」だと思ってたら実は「­­­­ー」だったとか、­­­文字が違っているのでしょう。

と言うか、­フィールド1に、「-」が入ってないデータがあった時の対処を何もしてないのが悪いです。

投稿日時 - 2011-08-04 17:30:30

お礼

ご回答ありがとうございます。
split関数、そしてvbaに関して、あまり理解できていなかったので、基本的な事が抜けていたようでした。

投稿日時 - 2011-08-04 17:58:39

あなたにオススメの質問