• ベストアンサー

Access2000 テキストデータのインポート

質問させていただきます。 テキストデータ(カンマ切り、項目A,項目Bともにテキスト型)をインポートしたのですが、項目Aはたとえば、1または2バイト目がスペースのデータ、スペースなしのデータなど混在しています。テキストデータの通りにインポートしたいのですが、Accessに取り込むとスペースのないデータ(すべて左詰)になってしまいます。 どうすればテキストデータ通りにインポートできるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.3

テキストデータの各項目が「"」で区切られていれば、インポートの時に「テキスト区切り記号」の指定で「"」を指定してやれば、ご希望通りにインポートできますよ! (ACCESS2000にて実験、△は空白) "△△△△1","1△△△△" "△△△△2","2△△△△" 頑張ってくださいヽ(^。^)ノ

pon_s
質問者

お礼

回答ありがとうございます。 いろいろ調べてご指摘の通りだとわかりました。 ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

今のところ答えが載りませんね。今後良い答えが上がらない時は 下記VBAを実行してみてください。 Option Compare Database Sub test01() Dim d(100) Dim dbs As Database Dim rst As Recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("Data1") rst.MoveFirst '----- Open "c:\My Documents\aa9.txt" For Input As #1 While Not EOF(1) Line Input #1, a '----項目切りだし->配列d(j)へセット s = 1: j = 1 p01: p = InStr(s, a, ",") If p = 0 Then d(j) = Mid(a, s, Len(a) - s + 1) GoTo p02 Else d(j) = Mid(a, s, p - s) s = p + 1 j = j + 1 End If GoTo p01 '------------mdb更新 p02: rst.AddNew rst![フィールド1] = d(1) rst![フィールド2] = d(2) rst![フィールド3] = d(3) rst.Update rst.MoveNext '------------ Wend '---終了 Close #1 rst.Close End Sub アクセスのモジュールへ貼りつけて、 インプットファイル名=テキストファイル ="c:\My Documents\aa9.txt"のところ アウトプットファイル名=アクセスのテーブル名 =("Data1")のところ アクセステーブルのフィールド名 rst![フィールド1] = d(1) rst![フィールド2] = d(2) rst![フィールド3] = d(3) のところ。フィールドの名前と連ねる数(項目数) を自分の場合に合わせて変更のこと。 その後実行する。 (元データ)私の場合のデータ 1, , 123 23, 234, 大阪 123 , 23, kyouto (結果)OKWEBの表示は左へ詰まったりしますが、実際は正しくなると思います。 ID フィールド1 フィールド2 フィールド3 23 1 123 24 23 234  大阪 25 123 23  kyouto

pon_s
質問者

お礼

回答ありがとうございます。 VBAは経験が少ないのですがトライしてみます。 ありがとうございました。

  • keikan
  • ベストアンサー率42% (75/176)
回答No.1

インポートの仕様ですかね、空白は省かれてしまうようでうす。 で、解決するにはテキストファイルをバイナリーで読み込んで1文字ずつ処理をするということになります。 以下にサンプルコードを入れておきましたので参考にしてみてください。 一部配列を使用していますが、2項目であれば配列でなくても問題ありません。 "取り込みデータ:項目1、項目2"というテーブルを作成しておいてください。 この関数をデバッグウィンドウなどから呼び出してやれば実行できます。 inText("c:\textdata.txt") コード Sub inText(FileName As String) Dim Bdata As Byte, RecordText As String, RecordData(100) As String, i, j '格納するテーブルを開きます Dim cdb As Database Dim rst As Recordset Set cdb = CurrentDb Set rst = cdb.OpenRecordset("取り込みデータ") '読み込むファイルをバイナリーモードで開きます Open FileName For Binary As #1 i = 1 j = 1 While (EOF(1) = False) 'バイナリーでの読み込み Get #1, i, Bdata '改行コードとカンマの検出 If Bdata = 13 Or Bdata = 44 Then 'データの分割 If Bdata = 44 Then RecordData(1) = RecordText RecordText = "" Else 'テーブルへの書き込み rst.AddNew rst![項目1] = RecordData(1) rst![項目2] = RecordText rst.Update RecordText = "" End If 'バイナリーで読み込んだデータのテキスト化 ElseIf Bdata > 31 Then RecordText = RecordText + Chr(Bdata) End If i = i + 1 Wend Close #1 End Sub

pon_s
質問者

お礼

回答いただきありがとうございました。

関連するQ&A

専門家に質問してみよう