こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2004-07-20 18:40:56

QNo.933447

暇なときに回答ください

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

テキストデータの各項目が「"」で区切られていれば、インポートの時に「テキスト区切り記号」の指定で「"」を指定してやれば、ご希望通りにインポートできますよ!

(ACCESS2000にて実験、△は空白)
"△△△△1","1△△△△"
"△△△△2","2△△△△"

頑張ってくださいヽ(^。^)ノ

投稿日時 - 2004-07-21 13:44:05

お礼

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

投稿日時 - 2004-07-21 17:47:49

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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 大阪
25123 23 kyouto

投稿日時 - 2004-07-21 11:13:13

お礼

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

投稿日時 - 2004-07-21 11:20:42

ANo.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

投稿日時 - 2004-07-21 11:06:42

お礼

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

投稿日時 - 2004-07-21 11:21:52

あなたにオススメの質問