ACCESSでCSVを読み込んでそれぞれのデータをテーブルに入れていくプログラムを作成しています。
15列までは、Split文で読み込む事が出来るのですが、
全45列を読み込ませようとすると、
Splitの所でエラーが発生しますので、
対処法を教えてください。
**************************
* エラー
**************************
* 実行時エラー '14':
* 文字列領域が不足しています。
**************************
*********************
* プログラム
*********************
Public Sub 注文処理開始_Click()
Dim txtData As String, FNo As Long, arrData As Variant
Dim i As Integer
Dim Con As New ADODB.Connection, Rec As New ADODB.Recordset
MsgBox ("処理を開始します。")
Set Con = CurrentProject.Connection
Rec.Open "order_list_05", Con, adOpenDynamic, adLockOptimistic
'ファイル番号を取得
FNo = FreeFile
Open "c:\temp\order_list.csv" For Input As #FNo
'ファイルの1行目の項目名部分を読み込む(何も処理しない)
Line Input #FNo, txtData
'実際のデータ部分(2行目)からの処理
Do While Not EOF(FNo)
Line Input #FNo, txtData
arrData = Split(txtData, ",") ←エラー箇所
Rec.AddNew
'引用符を削除してからフィールドに値を代入する
Rec("購入者氏名(漢字)") = Replace(arrData(2), """", "")
Rec("注文日時") = Replace(arrData(0), """", "")
Rec("注文番号") = Replace(arrData(1), """", "")
Rec("購入者氏名(カナ)") = Replace(arrData(3), """", "")
Rec("購入者会社名(漢字)") = Replace(arrData(4), """", "")
Rec("購入者会社名(カナ)") = Replace(arrData(5), """", "")
Rec("購入者住所") = Replace(arrData(8), """", "")
Rec("購入者部署名") = Replace(arrData(6), """", "")
Rec("購入者郵便番号") = Replace(arrData(7), """", "")
Rec("購入者電話番号") = Replace(arrData(9), """", "")
Rec("購入者メールアドレス") = Replace(arrData(10), """", "")
Rec("お届先氏名(漢字)") = Replace(arrData(11), """", "")
Rec("お届先氏名(カナ)") = Replace(arrData(12), """", "")
Rec("お届先会社名(漢字)") = Replace(arrData(13), """", "")
Rec("お届先会社名(カナ)") = Replace(arrData(14), """", "")
Rec("お届先住所") = Replace(arrData(17), """", "")
Rec("お届先部署名") = Replace(arrData(15), """", "")
Rec("お届先郵便番号") = Replace(arrData(16), """", "")
Rec("お届先電話番号") = Replace(arrData(18), """", "")
Rec("お届先FAX番号") = Replace(arrData(19), """", "")
Rec("配達希望日") = Replace(arrData(20), """", "")
Rec("配送時間帯") = Replace(arrData(21), """", "")
Rec("備考欄") = Replace(arrData(22), """", "")
Rec("配送情報") = Replace(arrData(23), """", "")
Rec("オプション") = Replace(arrData(26), """", "")
Rec("商品コード") = Replace(arrData(24), """", "")
Rec("商品名") = Replace(arrData(25), """", "")
Rec("個数") = Replace(arrData(27), """", "")
Rec("手数料") = Replace(arrData(30), """", "")
Rec("商品小計") = Replace(arrData(28), """", "")
Rec("送料") = Replace(arrData(29), """", "")
Rec("使用ポイント") = Replace(arrData(33), """", "")
Rec("消費税") = Replace(arrData(31), """", "")
Rec("注文合計金額") = Replace(arrData(32), """", "")
Rec("発生ポイント") = Replace(arrData(34), """", "")
Rec("ボーナスポイント") = Replace(arrData(35), """", "")
Rec("支払方法") = Replace(arrData(36), """", "")
Rec("支払期限") = Replace(arrData(37), """", "")
Rec("状態") = Replace(arrData(38), """", "")
Rec("キャンセル依頼") = Replace(arrData(41), """", "")
Rec("入金日") = Replace(arrData(39), """", "")
Rec("発送日") = Replace(arrData(40), """", "")
…続きます。
No.4ベストアンサー
- 回答日時:
エラー14の原因は『ぶゞ』でしょう。
http://hatenachips.blog34.fc2.com/blog-entry-266 …
よりvbBinaryCompare で回避できるのでは?
ただ、カンマが項目区切り以外(金額の位取りなど)で使われていると問題です。
『?』がメモ帳やワードなどで開いても起きるのかどうか、
(フォントが対応していない可能性など)
データ作成元の環境ではどうなっているか。
『改行』は厄介。
http://excel-ubara.com/EXCEL/EXCEL119.html
↑ExcelのVBAですが参考になります。
で、CSVを読み込むのではなく、
一旦外部データの取り込みで行います。
新規テーブルに取り込み検証後に本番テーブルに追加クエリ、
既存のテーブルにダイレクトに追加するのかは
そちらの判断にお任せします。
ウィザードに従って、区切り記号付き/テキスト区切り記号などを設定します。
最後の閉じる前にインポート操作の保存を行います。
インポートされたデータが正しければ次回からは『保存済みのインポート操作』から行うか、
Docmd.RunSavedImportExport("保存した定義名") で行うことも検討してみてください。
余談ですが、フィールド名にカッコ()を含めていますが、購入者氏名(カナ)→購入者氏名_カナにする
なるべく使わない方が宜しいかと。
https://support.microsoft.com/ja-jp/kb/826763/ja
回答ありがとうございます。
CSVから取込で1列ごとに調べましたら、
『備考欄』と『オプション』にデータがある行と無い行さらに改行されている行があるところで、
エラーが発生しました。
Split(arrData, """,""")等で試しましたが、データ列行がバラバラにならずに、
全て一つがデータとなっていします。
改行が原因だとわかりました。
No.3
- 回答日時:
コード見て気付いたけど、、、
商品名のなかに","というパターンがないなら、
arrData = Split(txtData, """,""")
として、最初と最後のデータについているカンマだけ、別途処理するとか。
あと、splitした後、ubound(arrdata)などで、データ数の確認をして
あっていない場合、何故合わないのかを考えてみるとか。
No.2
- 回答日時:
2バイト文字は、解釈(入れたときと、読んだときのパソコンによる違い)
の問題はあるかもしれないけど、出し入れには問題はないと思う。
改行は、Line Inputをつかっていると、そこでぶった切られてしまうね。
フィールドの終わりと、レコードの終わりはそれをきっちり区別する方法が必要。
元データがエクセルかなんかなんだったら、一端アクセスにインポートしてから、
処理したほうが簡単そう。 元データがデータベースから吐き出されたものなら、
出力するときに、デリミタなどにちょっと工夫が必要かも。
No.1
- 回答日時:
なんかの環境下では、右端が , (カンマ) で終わっているときはエラーが出たような。
そうなんだとしたら、splitの前で、
if right(txtData,1) = "," then txtData = left(txtData,len(txtData)-1)
などで、カンマを取ってあげるとよいかも。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Excel(エクセル) Excelの社員名簿 6 2023/07/10 16:35
- Access(アクセス) Accessのクエリで、replace関数を使い、データの中にある”をブランクに置き換えたいのですが 6 2022/06/15 14:54
- Visual Basic(VBA) 1つの入力フォルダの値を読み込み、3分割をして新しい変数に代入する方法を教えていただきたいです。 読 4 2022/10/17 20:52
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
Accessの条件付き書式設定で、複数の条件が一致した時の書式を設定したい
その他(Microsoft Office)
-
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
アクセスVBAのMe!と[ ]
Access(アクセス)
-
-
4
長さ0の文字列を格納できません。とエラー発生して困っています。
Visual Basic(VBA)
-
5
エクセルVBA 文字列領域が不足しています
Visual Basic(VBA)
-
6
AccessのWHERE句において、変数は使用できますか?
Access(アクセス)
-
7
Access インポート
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルマクロ小数点桁数
-
【Excel VBA】先頭の「0」飛び...
-
.NET SqlDataReader のレコー...
-
GASでスプレッドシートの一番上...
-
ASP.NET DataGridの項目数(列...
-
DataGrid(DataSet?)で列幅調整
-
MSFlexGridのデータ表示位置の設定
-
GoogleEarthのKMLファイルでラ...
-
VBAでページ番号、ページ最終行...
-
VBAを使用した時間管理
-
ExcelVBAを使って、値...
-
screenupdatingが機能しなくて...
-
VBA:小数点以下の数字を取得で...
-
【Excel】指定したセルの名前で...
-
クリックされたセルの位置を取...
-
Excel vbaで特定の文字以外が入...
-
【Excel VBA】空白の結合セルに...
-
[エクセル]連続する指定範囲か...
-
マクロ 特定のセル値のみクリ...
-
ExcelVBAのマクロについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel VBA】先頭の「0」飛び...
-
DataGrdViewに関連付けたデータ...
-
Listviewのデータを上から順番...
-
GASでスプレッドシートの一番上...
-
GridViewにバインドせずにデー...
-
VBAでページ番号、ページ最終行...
-
.NET SqlDataReader のレコー...
-
MSFlexGridのデータ表示位置の設定
-
【ASP.NET MVC】一覧編集画面
-
DataGridViewで表示に制限をつ...
-
VBによる可変長ファイルの読み書き
-
エクセルマクロ小数点桁数
-
GoogleスプレッドシートからExc...
-
ListViewで条件によって表示を...
-
ACCESSのVBAで[Split]について
-
C# データ配列から画像を作成す...
-
ASP.Net ObjectDataSource
-
スプレッドシート 一括でQRコー...
-
ASP.NET DataGridの項目数(列...
-
GridViewを自動的にスクロール...
おすすめ情報
・・・続き
Rec("キャンセル日") = Replace(arrData(42), """", "")
Rec("支払い回数") = Replace(arrData(45), """", "")
Rec("端末") = Replace(arrData(43), """", "")
Rec("注文情報メモ") = Replace(arrData(44), """", "")
Rec.Update
Loop
Close #FNo
MsgBox ("処理が完了しました。")
End Sub
がプログラムの全体です。
使用ソフトは『ACCESS2010』です。
CSVファイルの商品名の所に『ぶゞ』や『?』『改行』があります。
そのままの状態で取り込めますか?
できれば、そのままの状態で取り込みたいです。