下記のコードを実行するとインデックスが有効範囲ではありません。となります。
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
有無、要否、賛否、是非、可否、当否…これらの言葉について
その他(教育・科学・学問)
-
VBAで除算の商・・・
Access(アクセス)
-
-
4
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
5
Accessへワークシートからのインポート
Access(アクセス)
-
6
Access クエリで連結する文字の間に空白を入力
その他(データベース)
-
7
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
8
「メソッドまたはデータメンバが見つかりません。」というエラーが出ます。
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのマクロでワードのテキス...
-
教えて下さい
-
プログラミング python pandas ...
-
【エクセル】測定時間がバラバ...
-
VBA 毎日取得するデータを順番...
-
配列でデータが入っている要素...
-
LoadPictureしたイメージデータ...
-
ADOを使用してExcelデータをAcc...
-
30Gも使えるはずなのに全然ネッ...
-
シリアル通信でのデータ受信
-
[エクセル]データの個数が2番目...
-
文字の上下反転処理
-
C#でヒストグラムの作り方
-
Matlab:plotで特定の値だけをプ...
-
ActiveReportについて
-
ディベートに関して質問です。...
-
[VBA] CountIfに変数を使いたい
-
エクセルについて
-
MATLAB:データの総数を数えるに...
-
テーブル2列目に2番目のデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
多量のSUMIF式を軽くしたい
-
エクセルで2つの時系列のデー...
-
Excelのマクロでワードのテキス...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
VBAを使ってOutlookメール本文...
-
Accessで該当データにフラグを...
-
合計3TBのデータのハッシュ値を...
-
シーケンサにパソコンからアク...
-
S9タイプからXタイプにデータ...
-
カンマからスラッシュに
-
VBAでシートからコンボボックス...
-
VBA 毎日取得するデータを順番...
-
ビットシフトについて
-
ユーザーフォームのテキストボ...
-
EXCELVBAでSQLserverからデータ...
-
特定のデータの抽出方法を教え...
おすすめ情報