
下記のコードを実行するとインデックスが有効範囲ではありません。となります。
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も見ています
-
Accessへワークシートからのインポート
Access(アクセス)
-
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
Access VBAでタブコントロールで選択するタブをしていするには。
Access(アクセス)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
6
ACCESSのフォーム、開くんですが、見えないようにするには
Access(アクセス)
-
7
VBAでcsvファイルもシートもあるのに「インデックスが有効範囲にありません」と表示される2
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
エクセルで2つの時系列のデー...
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
Setステートメントをまとめて記...
-
Accessで該当データにフラグを...
-
VBにおいてフォーム間の変数の...
-
VB RS-232C 通信プログラム
-
CString型の文字列連結について
-
モジュラス103の算出方法について
-
二分探索の平均探索回数
-
特定のデータの抽出方法を教え...
-
エクセルVBAプログラミング...
-
FFTを使って信号から特定の周波...
-
ユーザーフォームのテキストボ...
-
配列でデータが入っている要素...
-
音楽CD - ビットレートと記憶容...
-
0が含まれる幾何平均が「#NUM!」
-
Fortran カンマを含む数値デー...
-
シリアル通信でのデータ受信
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
配列でデータが入っている要素...
-
<VB>String→Object
-
二分探索の平均探索回数
-
多量のSUMIF式を軽くしたい
-
EXCELVBAでSQLserverからデータ...
-
この行は既に別のテーブルに属...
-
ユーザーフォームのテキストボ...
-
VBA 空白セルを削除ではない方...
-
特定のデータの抽出方法を教え...
-
パースとはなんですか?
-
C# ソケット通信でデータ受信時...
-
エクセルで2つの時系列のデー...
-
[C言語] コメント文字列を無視...
-
Accessで該当データにフラグを...
-
カンマからスラッシュに
-
C# でDataTableの更新を高速化...
-
アクセス2000で画像データ...
おすすめ情報