アプリ版:「スタンプのみでお礼する」機能のリリースについて

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), """", "")
…続きます。

質問者からの補足コメント

  • ・・・続き
    Rec("キャンセル日") = Replace(arrData(42), """", "")
    Rec("支払い回数") = Replace(arrData(45), """", "")
    Rec("端末") = Replace(arrData(43), """", "")
    Rec("注文情報メモ") = Replace(arrData(44), """", "")
    Rec.Update
    Loop
    Close #FNo
    MsgBox ("処理が完了しました。")
    End Sub

    がプログラムの全体です。

      補足日時:2015/06/04 17:18
  • 使用ソフトは『ACCESS2010』です。

      補足日時:2015/06/04 19:15
  • CSVファイルの商品名の所に『ぶゞ』や『?』『改行』があります。
    そのままの状態で取り込めますか?
    できれば、そのままの状態で取り込みたいです。

      補足日時:2015/06/04 19:24

A 回答 (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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
CSVから取込で1列ごとに調べましたら、
『備考欄』と『オプション』にデータがある行と無い行さらに改行されている行があるところで、
エラーが発生しました。
Split(arrData, """,""")等で試しましたが、データ列行がバラバラにならずに、
全て一つがデータとなっていします。
改行が原因だとわかりました。

お礼日時:2015/06/05 14:28

コード見て気付いたけど、、、


商品名のなかに","というパターンがないなら、
arrData = Split(txtData, """,""")
として、最初と最後のデータについているカンマだけ、別途処理するとか。

あと、splitした後、ubound(arrdata)などで、データ数の確認をして
あっていない場合、何故合わないのかを考えてみるとか。
    • good
    • 0

2バイト文字は、解釈(入れたときと、読んだときのパソコンによる違い)


の問題はあるかもしれないけど、出し入れには問題はないと思う。
改行は、Line Inputをつかっていると、そこでぶった切られてしまうね。
フィールドの終わりと、レコードの終わりはそれをきっちり区別する方法が必要。

元データがエクセルかなんかなんだったら、一端アクセスにインポートしてから、
処理したほうが簡単そう。 元データがデータベースから吐き出されたものなら、
出力するときに、デリミタなどにちょっと工夫が必要かも。
    • good
    • 0

なんかの環境下では、右端が , (カンマ) で終わっているときはエラーが出たような。


そうなんだとしたら、splitの前で、
if right(txtData,1) = "," then txtData = left(txtData,len(txtData)-1)
などで、カンマを取ってあげるとよいかも。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています