
下記のコードを実行するとインデックスが有効範囲ではありません。となります。
Private Sub CSV読み込みボタン_Click()
Dim textData As String
Dim fileNo As Long
Dim myArray() As String '文字列型の配列変数myArrayを宣言する。
Dim myRecordSet As Recordset
Set myRecordSet = CurrentDb.OpenRecordset("CSV用顧客管理テーブル")
fileNo = FreeFile
Open "C:\access2013Data\顧客データ.csv" For Input As #fileNo
' 1行目の項目名部分を読み込むが、ここでは何もしないでおく。
Line Input #fileNo, textData
' 実際のデータの部分(2行目)からの処理を行う。
Do While Not EOF(fileNo)
Line Input #fileNo, textData
MsgBox textData
myArray = Split(textData, ",")
myRecordSet.AddNew
myRecordSet("氏名") = Replace(myArray(1), """", "")
myRecordSet("性別") = Replace(myArray(2), """", "")
myRecordSet("年齢") = Replace(myArray(3), """", "")
myRecordSet("郵便番号") = Replace(myArray(4), """", "")
myRecordSet("住所") = Replace(myArray(5), """", "")
myRecordSet("電話番号") = Replace(myArray(6), """", "")
myRecordSet.Update
Loop
Close #fileNo
CSV追加結果リストボックス.Requery
myRecordSet.Close
Set myRecordSet = Nothing
End Sub
No.4ベストアンサー
- 回答日時:
ANo1です。
ACCESSはまったく知らないのですが(←しつこい(苦笑))、どうやら予定なさっているものと、とインデックスが異なっているようですね。
回答者には、質問文にご提示のコードしか情報がなくそれ以外はわかりませんので、どこが悪いのかの特定はできません。
データが正しいのであれば、その扱い方(=ご提示のコード)が間違っていることになりますし、コードが正しいとすれば、データが壊れている可能性も考えられます。
あるいは、両方ともおかしいのか・・・
いずれにしろ、データとその取扱い(=コード)がマッチしていないためにエラーが起きていると考えられます。
CSVの各レコードのデータ数が異なる可能性があるのであれば、それに応じた扱いをする必要があります。
存在しないかも知れないデータをいきなり、myArray(6)などで利用しようとすればエラーになる可能性がありますよね?
このような場合は、事前にデータが存在するかの確認を行うことと、存在しない場合の処置も併せて記述しておく必要があります。
ありがとうございます。
CSVファイルの中身が悪かったようです。
データを修正し、エラー解消できました。
いろいろ助言頂きありがとうございました。
No.3
- 回答日時:
LBound、UBound は要素数ではなく添字の最少/最大値です。
>myRecordSet("氏名") = Replace(myArray(1), """", "")
以降6行のレコードセットへの代入が正しいのか否かは実際のCSVファイルが謎なので不明です。
#1さんのアドバイスにあるように
前略
myArray = Split(textData, ",")
if ubound(myarray) = 6 then
myRecordSet.AddNew
myRecordSet("氏名") = Replace(myArray(1), """", "")
中略
myRecordSet.Update
end if
Loop
とすればよろしいかと。
ubound関数が-1になる原因は
改行コードだけの行があるとか、文字列中に問題があるとか・・・などじゃないですかね。
Excelで開いて確認するとともに、メモ帳でも開いてみて確認することが必要です。
No.2
- 回答日時:
LBound、UBoundはともに配列の要素数になります。
0からなので、
myRecordSet("氏名") = Replace(myArray(0), """", "")になります。
さらに、UBoundで最大値が分かるので、上記のコードにIF文等判定する処理を追加してやると。
No.1
- 回答日時:
こんにちは
ACCESSはまったく知らないのですが、「インデックスが有効範囲ではありません」とのことなので…
とりあえず、myArrayの引数の範囲を調べてみてください。
MsgBox LBound(myArray) & " / " & UBound(myArray)
とか。
0~5(あるいは1~5とか)になっていたりしませんか?
調べた結果、0~6でした。
CSVファイルより3件のデータを読み込むのですが、
4件目のデータを読み込もう?とした時にエラーになるようです。
その時MsgBox LBound(myArray) & " / " & UBound(myArray)が0/-1になるので
こうならないようにするにはどうすればいいでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
ブレーカー落ちで壊れたりしな...
-
エクセルで2つの時系列のデー...
-
この行は既に別のテーブルに属...
-
配列でデータが入っている要素...
-
エクセル マクロ 複数のシー...
-
VB6でCSVの取込をする
-
データの名称?
-
VBAを使ってOutlookメール本文...
-
EXCELVBAでSQLserverからデータ...
-
Accessで該当データにフラグを...
-
GETはできるがPOSTができない、...
-
Excel VBAでのオートフィルター...
-
VBで予想ソフトを作りたい
-
C#にてDropDownListの値を動的...
-
ユーザーフォームのテキストボ...
-
[C言語] コメント文字列を無視...
-
カンマからスラッシュに
-
モジュラス103の算出方法について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
配列でデータが入っている要素...
-
多量のSUMIF式を軽くしたい
-
ACCESSからEXCELに出力する際、...
-
この行は既に別のテーブルに属...
-
特定のデータの抽出方法を教え...
-
Accessで該当データにフラグを...
-
Excel VBAでのオートフィルター...
-
ユーザーフォームのテキストボ...
-
[C言語] コメント文字列を無視...
-
DataGridViewのデータの引渡し...
-
エクセルで2つの時系列のデー...
-
VBA 空白セルを削除ではない方...
-
CString型の文字列連結について
-
S9タイプからXタイプにデータ...
-
C# でDataTableの更新を高速化...
-
VBA 円グラフ 特定条件に一致し...
-
二分探索の平均探索回数
おすすめ情報