プロが教える店舗&オフィスのセキュリティ対策術

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

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

A 回答 (2件)

Splitで登録される ksplit のサイズは


Ubound で調べられます
これは、その配列の添え字の最大値を返します

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

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

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

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

ヒントはここまで!
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/04 18:02

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



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

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

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

お礼日時:2011/08/04 17:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!