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

AccessVBAでTransferTextを使用しないでVBAでCSVファイルを既存のテーブルに取込もうとしてますが、下記の情報を取込むと

222,"30,33",99

2項目目の「"30,33"」が「"30」と「33"」に分かれて取込んでしまいます。
これを、分けずに「"30,33"」で取込むにはどうすれば良いのでしょうか?
ダブルコーテーション内のカンマが無視できればよいのですが。
前提条件として、取り込む前にCSVファイル内の情報は変換等の変更は出来ないとします。
すみませんが宜しくお願い致します。

使用しているコードは下記の通りです。
Sub さんぷる1()
Dim DB As Database
Dim 基本情報 As Recordset
Dim F As Long
Dim INDATA As String
Dim WWW, IDX
Dim ANS(3)

Set DB = CurrentDb
Set 基本情報 = DB.OpenRecordset("情報", dbOpenDynaset)

F = FreeFile
Open "C:\Documents and Settings\sanple\デスクトップ\test\TEST.CSV" For Input As #F

Do While Not EOF(F)
Line Input #F, INDATA
WWW = Split(INDATA, ",")

IDX = 0
Do Until IDX > UBound(WWW) - 1
ANS(IDX) = WWW(IDX)
IDX = IDX + 1
Loop

基本情報.AddNew
基本情報!項目1 = ANS(0)
基本情報!項目2 = ANS(1)
基本情報!項目3 = 0
基本情報.Update
Loop
Close #F
基本情報.Close
DB.Close
End Sub

A 回答 (1件)

Accessを触っていたときは、Splitを使っていなかったので、的を得ているか不安ですが。

。。

SplitはDelimiterの文字列しか区切りと認識しないので、実際のところ不便です。
私は、独自メソッドなどを使用したりして対応していました。
(ReplaceやTrimなどで除いたり、バイトで読んだりなど・・・・)

もしくは、Accessですので、ADOを利用されてみてはいかがですか?

レコードセットに入れ込むときにダブルクォーテーションは文字列として認識してくれます。
GetStringメソッドを使用すれば、Split関数と同じ使い方で、Delimiterも柔軟に指定できます。

以下は、カンタンに取り込んで表示する例です。

Public Sub test1()

Dim CN As New ADODB.Connection
Dim Rs As ADODB.Recordset

CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\;" & _
"Extended Properties=""Text;HDR=NO;FMT=Delimited"""

CN.Open

Set Rs = CN.Execute("select * from TEST.csv", , dbOpenTable)

Do Until Rs.EOF

For i = 0 To Rs.Fields.Count - 1
Debug.Print Rs(i)
Next

Rs.MoveNext
Loop

Rs.Close: Set Rs = Nothing
CN.Close: Set CN = Nothing

End Sub

Cドライブにコネクションして、レコードセットで「TEST.csv」を読み込みます。
後は、フィールドを一個ずつ読み込んでいきます。

この方が簡単なので、私はこっちを使っていました。
(より複雑なものは独自メソッド作成したりしていましたが・・・)

参考URL:http://www.cocoaliz.com/excelVBA/index/35/
    • good
    • 0
この回答へのお礼

ありがとうございます。 色々とやり方があるのですね。
使った事のないコードなので、とても参考になります。
少々解読に時間を下さい。必ず再度ご返事いたします。

お礼日時:2010/08/17 09:12

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