【Access2003】VBAでタブ区切りテキストファイル読込

このQ&Aのポイント
  • 【Access2003】を使用し、VBAでタブ区切りのテキストファイル読込方法を教えてください。カンマ区切りはわかるが、タブ区切りがわからないため、現在はカンマ区切りのCSVファイルに変換して読み込んでいます。しかし、タブ区切りテキストファイルを直接読み込む方法があれば、それが一番理想です。ソースコードが以下に示されています。
  • TransferTextを使用したかったが、読み込んだデータごとに必須項目と桁数を確認し、エラーがある場合はテキストファイルに書き込み、エラーがない場合はテーブルに書き込むという処理をしたいです。
  • 書き込むデータはタブ区切りのテキストファイルであり、カンマ区切りのCSVファイルに変換しないと読み込むことができません。しかし、タブ区切りテキストファイルを直接読み込む方法を知りたいです。
回答を見る
  • ベストアンサー

【Access2003】VBAでタブ区切りテキストファイル読込

はじめまして。 【Access2003】を使用し、タブ区切りのテキストファイル読込をVBAで行っています。 カンマ区切りはわかるのですが、タブ区切りの方法がわからないので教えていただけませんか? TransferTextを使用したかったのですが、読み込んだデータ1件1件に対して必須と桁数確認を行い、エラーがあった場合はテキストファイルにそのデータ1行を書き込み、エラーがない場合は1行テーブルに書き込みというように処理を分けたいからなのです。 とりあえず今のところカンマ区切りのCSVファイルを読み込むというようにしており、読み込む前にタブ区切りテキストファイルをカンマ区切りCSVファイルに変換する処理を入れようと思っています。 しかしタブ区切りテキストファイルをそのまま読むことができれば一番いいのですが。 ソースは以下の通りです。 '出力元CSVファイルを開く lngFileNum = FreeFile() 'データ読込 Open strJsnFol & "\\" & strIriInf For Input As #lngFileNum 'CSVファイルの最初の行を読み込む 'CSVファイルより1件分を読み込み Line Input #lngFileNum, strData 'カンマで区切って配列に代入 varData = Split(strData, ",", , vbTextCompare) 'データ種別のチェック If varData(0) <> "XXX" Then MsgBox "ファイルエラーです。", vbInformation + vbOKOnly intErrFlg = 1 Exit Sub End If 'タイムスタンプチェック strSQL = " SELECT CREATE_TIME FROM TB WHERE    CREATE_TIME = '" & varData(1) & "'" 'SQLを実行 If DBAC.ExecSelect(strSQL) = 0 Then '同じ処理時間のデータがなければ、タイムスタンプを取得 strCreateTime = varData(1) Else MsgBox "すでに処理済です。", vbInformation + vbOKOnly intErrFlg = 1 Exit Sub End If 'テーブルを開く Set dbs = CurrentDb Set rst = dbs.OpenRecordset("IF_TB") 'CSVファイルの全レコードを読み込むループ Do Until EOF(lngFileNum) 'CSVファイルより1件分を読み込み Line Input #lngFileNum, strData 'カンマで区切って配列に代入 varData = Split(strData, ",", , vbTextCompare) 'データチェック If varData(0) = "" Or Len(varData(0)) > 12 Then intChkErr = 1 End If If varData(1) = "" Or Len(varData(1)) > 12 Then intChkErr = 1 End If If Len(varData(2)) > 1 Then intChkErr = 1 End If 'エラーがあればエラーファイルに書き込み If intChkErr <> 0 Then strFileName = strJsnFol & "\\" & "ERR.csv" lngFileNum2 = FreeFile() Open strFileName For Append As #lngFileNum2 End If Print #lngFileNum2, "ERR1," & strData Close #lngFileNum2 Else '各フィールドデータをテーブルに追加 With rst .AddNew !K_NO = varData(0) !S_NO = varData(1) !CD = varData(2) !CREATE_TIME = strCreateTime .Update End With End If intChkErr = 0 Loop rst.Close Close #lngFileNum Exit Sub 何かいい方法があれば教えていただけませんか? よろしくお願いいたします。

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

  • ベストアンサー
回答No.1

>'カンマで区切って配列に代入 >varData = Split(strData, ",", , vbTextCompare) ここを変えればいいってことではない? varData = Split(strData, vbTab, , vbTextCompare)

moemoe0000
質問者

お礼

その通りでした。 ありがとうございました。

関連するQ&A

  • AccessでCSVをインポートしたい(VBA)

    お世話になります。AccessVBA暦2週間の初心者です。 AccessでCSVをインポートできたらいいなと思い ↓下のサイトにあるVBAサンプルを参考にして以下のようにプログラミングをしました。 http://memo.bz/access/advance/csvinpsam Public Function SplitTest() On Error GoTo myError Dim dbs As Database Dim rst As Recordset Dim varData As Variant Dim lngFileNum As Long Dim strData As String Dim xSQL As String FileName = TestGetFileName '入力元CSVファイルを開く lngFileNum = FreeFile() Open FileName For Input As #lngFileNum 'テーブルを開く Set dbs = CurrentDb Set rst = dbs.OpenRecordset("Data") 'CSVファイルの全レコードを読み込むループ Do Until EOF(lngFileNum) 'CSVファイルより1件分を読み込み Line Input #lngFileNum, strData 'カンマで区切って配列に代入 varData = Split(strData, ",", , vbTextCompare) '各フィールドデータをテーブルに追加 With rst .AddNew ![Code1] = varData(0) ![Code2] = varData(1) ![TS] = varData(2) ![PM] = varData(3) ![金額] = varData(4) ![摘要] = varData(5) ![メモ] = varData(6) .Update End With Loop rst.Close Close #lngFileNum MsgBox "データの取り込みが終了しました" Exit Function myError: MsgBox "ファイル名を指定してください" End Function 'CSVファイル選択 Function TestGetFileName() 'ファイル選択 Const ENABLE_WIZHOOK = 51488399 Const DISABLE_WIZHOOK = 0 Dim strFile As String Dim intResult As Integer WizHook.Key = ENABLE_WIZHOOK ' WizHook 有効化 intResult = WizHook.GetFileName( _ 0, "", "", "", strFile, "", _ "すべてのファイル (*.*)|*.*", _ 0, 0, 0, True _ ) WizHook.Key = DISABLE_WIZHOOK ' WizHook 無効化 TestGetFileName = strFile End Function ダイアログは普通に開けるのですがインポートが出来ず「ファイル名を指定してください」 というメッセージボックスが出ます。 弄っている部分は ![フィールド1] = varData(0)を ![Code1] = varData(0)にしているぐらいです。 何が悪いのか皆目見当がつきません。 こんな初心者でございますがご教授のほどよろしくお願いします。 (ヒントでも構いません) 説明不足等ございましたらご指摘のほどよろしくお願いします。

  • CSV→タブ区切り

    CSVファイルでデータを取り込もうとしてますが、金額にカンマが入ってたりして、列がずれたりします。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=361247 ↑等を参照した上ですが、タブ区切りデータでインポートしてみようかと思います。 CSVファイルをタブ区切りファイルに変換するにはどうしたらよいでしょうか?そういうコードはありますでしょうか?

  • バッチファイルの作り方(CSV→タブ区切り)

    CSVファイルをタブ区切りにする手順は ツールーバーの 【データ】→【区切り位置】→カンマ、タブ などの設定で出来ると思います。 その手順を何度も繰り返すのが面倒なため、 バッチファイルを作成しようと考えています。 やりたい事としまして、 (1) .csvファイルをコマンドプロンプトに入れる(ドラックドロップ) (2) カンマ区切り→タブ区切りに変換し、上書き保存 ということをコマンドプロンプト(バッチファイル)で行いたいです。 関数としては for /f を使うのだと思うのですが、 よく分からないため教えていただきたいです。 宜しくお願いいたします。

  • c#で(",")区切りのcsvファイルから読み込みを行うには?

    駆け出しの初心者です。 以前c言語を少々勉強していてcsvファイルの読み込み、書き出しを練習していたのですが、最近c#を使うようになり、その便利さに圧倒されております。 今回c#で読み込みたいcsvファイルは以下のようになっております "abc","123","あいうえお" ただのカンマ区切りであれば読み込みは簡単ですが、 上記のようにダブルクオーテーションでそれぞれの文字列が囲まれている場合に文字列だけを読み込み、配列に代入していくのに何かスムーズな方法はありませんでしょうか? ちなみに現在単純にカンマ区切りのcsvファイルを読み込むコードを 書いた所ですので、載せておきます これをいじってスムーズにいければうれしいのですが、いかがでしょうか? private void LoadData() { string path = "Data.csv"; string delimStr = ",";//区切り文字 char[] delimiter = delimStr.ToCharArray(); string[] strData;//分解後の文字用変数 string strLine;//1行分のデータ Boolean fileExists = System.IO.File.Exists(path); if (fileExists) { System.IO.StreamReader sr = new System.IO.StreamReader( path, System.Text.Encoding.Default); while (sr.Peek() >= 0) { strLine = sr.ReadLine(); strData = strLine.Split(delimiter); DataSet.DataTable.AddDataTableRow( DateTime.Parse(strData[0]), strData[1],    strData[2], int.Parse(strData[3]), strData[4]); } sr.Close(); } } いつも丁寧な回答で協力してくれる皆様には心から感謝しております。 どうぞよろしくお願いします。

  • タブ区切りtxtファイルをCSVファイルにしたい

    数値データの入ったタブ区切りのテキストファイルが約80個あり、 それらを全てCSVファイルにしたいです。 テキストファイルのデータ形式は以下のようになっています。 339.54 1091.50 339.92 1091.50 340.30 1091.50 340.68 1057.60 341.06 1028.22 これがあと数百行あります。 コマンドプロンプトでCSVにリネームすると、数値が詰まってしまい、困っています。 例えば上のデータ例であれば、 339.541091.50 のように表示されたCSVファイルになってしまいます。 339.54, 1091.50 のようなカンマ区切りのCSVファイルとして出力する方法はないでしょうか? VBAの知識が少しだけあるので、それを使った方がいい場合は教えて頂けると幸いです。 よろしくお願い申し上げます。

  • カンマ区切りCSVファイルをVBAで読み込みたい

    こんにちは。EXCELのVBAに詳しい方、どうか教えてください! カンマ区切りCSVファイルをEXCELに読み込みたいのですが、 CSVファイルのデータが金額のため、データ自体にもカンマが含まれていて、 金額のカンマでも分割されてEXCELのセルに収まってしまいます。 データの区切りのカンマと、金額のカンマを区別して読み込む良い方法はないでしょうか。 とても困っているので、お解りになる方どうかご回答をお願いいたします。 ・CSVファイルのデータ   1,000 , 2,000 , 1,500 , 3,000 , 1,000 , 2,500 , 2,000  ↑金額のカンマでデータが分割されないように読み込みたいのですが・・・

  • CSVでタブ区切り

    はじめまして。エクセル2003を使用中です。 データのやり取りをする際に 「エクセルのデータをCSVでタブ区切り」に変換して送って欲しい と言われました。 保存時に 「名前を付けて保存」→「ファイルの種類」で「CSV」を選択すると「カンマ(,)」で区切られますよね? これを簡単にタブ区切りにしたいのですが・・そんな方法はありますでしょうか? 現在、試作の段階では一旦TXT形式で保存し、ファイル名を直接「CSV」に変更しています。 実は常時この作業を行う者が私よりPCに詳しくない為、この手順だと不安だと言います。 出来る限りわかりやすく作業を行いたいのです。 不明点があれば補足させていただきますので アドバイス等ございましたらどうぞよろしくお願いします。

  • タブ区切りのテキストファイルをCSVに変換する

    仕事でシステムにファイルを読み込ませるために利用します。 取得できるファイルはタブ区切りのテキストファイルです。 システムが取り込めるデータは、CSVファイルです。(ゆうパックプリント) システムに取り込む為に、取得したタブ区切りのテキストファイルを、一度CSVに変換する必要があるようです。この場合どのような方法で変換が可能でしょうか? タブ区切りのテキストファイル→CSVファイルに変換 をドラッグで簡単にできるようなアプリがあれば、是非紹介して頂きたいです。 パソコンはWindows8 , Mac OS X とありますが、システムはWindows用のシステムの為、出来ればWindowsのアプリがあると助かります。 よろしくお願いします。

  • タブ区切りファイルからカンマ区切りファイルに変更する方法

    よろしくお願いします。 タブ区切りしてあるテキストファイルを、一気に カンマ区切りのファイルにする方法はありますでしょうか? どなたかご存知の方お教えください。

  • EXCEL VBAでカンマ区切りテキストファイルに変換する方法

    EXCELで作成したシートをVBAでカンマ区切りテキストファイル(CSVファイルではなく)に変換する方法を教えてください 下記のプログラムではテキストファイルに変換されますが、カンマ区切りになりませんでした。 Sub Samp() ActiveWorkbook.SaveAs Filename:="C:\WINDOWS\aa.txt", FileFormat _ :=xlText, CreateBackup:=False End Sub

専門家に質問してみよう