Access2000データをテキストファイルに変換する方法

このQ&Aのポイント
  • Access2000のデータをテキストファイルに変換する方法について、詳細な手順をご説明します。
  • この記事では、Access2000のデータをタブ区切りのテキストファイルに変換する方法について解説します。
  • Access2000のデータをテキストファイルにエクスポートする方法を紹介します。タブ区切りでエクスポートすることができます。
回答を見る
  • ベストアンサー

Access2000データのテキストファイル変換方法について

いつもお世話になっております。 以前、この欄で質問させて頂いたCSVデータ変換の件については随分助かり、ありがとうございました。 このたび、Access2000のデータを、テキストファイル(タブによる区切り)に変換(明細ごとの区切りは改行文字を使用)する必要があり、下記のような記述を致しましたが、どうしても、「カンマ区切り」にしかなりません。 インターネットで調べると、テキスト(タブ区切り)の拡張子は「.txt」と説明されているのですが、何か記述が間違っているのでしょうか? 宜しくお願い致します。 (追伸)将来、必要になるかも知れないので、テキスト(スペース区切り)の記述についてもお願いできれば、と思います。 -- 記述内容 --------------------------------------------------- Dim adoRs As New ADODB.Recordset Dim strsql As String Dim strFile As String Dim 番号 As Long strsql = "SELECT" For 番号 = 1 To 34 If 番号 > 1 Then strsql = strsql & "," strsql = strsql & "フィールド" & CStr(番号) Next 'strsql = strsql & "FROM WT売掛管理表 ORDER BY フィールド1" strsql = "SELECT フィールド1,フィールド2,フィールド3,フィールド4,フィールド5,フィールド6,フィールド7,フィールド8,フィールド9,フィールド10,フィールド11,フィールド12,フィールド13,フィールド14,フィールド15,フィールド16,フィールド17,フィールド18,フィールド19,フィールド20,フィールド21,フィールド22,フィールド23,フィールド24,フィールド25,フィールド26,フィールド27,フィールド28,フィールド29,フィールド30,フィールド31,フィールド32,フィールド33,フィールド34 " & _ "FROM WT売掛管理表 ORDER BY フィールド1" adoRs.Open strsql, CurrentProject.Connection strFile = "C:\データフォルダ\変換データ.txt" Open strFile For Output Access Write As #1 Do Until adoRs.EOF For 番号 = 0 To 32 Write #1, CStr(adoRs.Fields(番号).Value), Next Write #1, CStr(adoRs.Fields(番号).Value) adoRs.MoveNext Loop adoRs.Close Close #1 MsgBox "データ変換処理が終了しました。", vbInformation Exit Sub -----------------------------------------------------

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

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

For 番号 = 0 To 32 Write #1, CStr(adoRs.Fields(番号).Value), Next Write #1, CStr(adoRs.Fields(番号).Value) の部分を strData = "" For 番号 = 0 To 32 strData = strData & CStr(adoRs.Fields(番号).Value) & vbTab Next strData = strData & CStr(adoRs.Fields(番号).Value) Write #1 strData のようにするとよいと思います。

DANSAMA
質問者

補足

返事が遅くなり、申し訳ありませんでした。 早速、ご回答の通りに実行してみたところ、イメージ的には希望の形になっているように思えます。ありがとうございます。 ただ、明細データが9行のもので実験したところ、 ”1行目のフィールド1 フィールド2 ・・・・・・・・フィールド34” ”1行目のフィールド1 フィールド2 ・・・・・・・・フィールド34 2行目のフィールド1 フィールド2 ・・・・・・・・フィールド34”      ・      ・      ・ ”1行目のフィールド1 フィールド2 ・・・・・・・・フィールド34 2行目のフィールド1 フィールド2 ・・・・・・・・フィールド34 ・・・・・・ 9行目のフィールド1 フィールド2 ・・・・・・・・フィールド34” というようにだぶってファイルが作られます。 最後に作られている「”1行目のフィールド1 フィールド2 ・・・・・・・・フィールド34 2行目のフィールド1 フィールド2 ・・・・・・・・フィールド34 ・・・・・・ 9行目のフィールド1 フィールド2 ・・・・・・・・フィールド34”」の内容で、なおかつ、1行目~9行目のデータが、明細ごとに改行文字で区切られていれば良いのですが(エクセルのタブ区切り型式と同様のもの)、そのようには出来るでしょうか? (例) 1行目のフィールド1 フィールド2 ・・・・・・・・フィールド34 2行目のフィールド1 フィールド2 ・・・・・・・・フィールド34    ・    ・    ・ 9行目のフィールド1 フィールド2 ・・・・・・・・フィールド34 なお、このように変換する目的は、他のコンピュータソフトで利用するためだそうです。 どうぞ、宜しくお願い致します。

その他の回答 (1)

回答No.2

strData = "" が Do Until adoRs.EOF より前にあるのではないでしょうか。 Do Until adoRs.EOF の直後に strData = "" を置いてみてください。 あと、Write の前に、 strData = strData & vbCrLf が必要ではないかと思います。

DANSAMA
質問者

お礼

前略 1週間程出張していたため、返事が出来ず、申し訳ありませんでした。 早速帰京してご指示の通りやってみましたら、うまく出来ました。 大変ありがとうございました。 今後とも宜しくお願い申し上げます。                          草々

関連するQ&A

  • Access2000上でのCStrコマンドの記述に関する質問です

    いつもお世話になっております。 Access2000で、あるデータをCSVファイルに変換しようと思って、各方面のご意見により、VBAで下記の通り記述し、実行致しました。 変換するフィールドの数が少なければ問題なく実行できますが、そのフィールド数が34種類以上になれば、「行継続文字( _ )を使いすぎています」との警告と共にエラーが発生します(なお、今回実行したいのは34種類のフィールドです)。 「CStr(adoRs.Fields("フィールド1").Value) ~ (adoRs.Fields("フィールド34").Value) 」と、1行で記述する等、何か良い方法がないものかと悩んでおります。 もし、解決方法をご存じの方がおられれば、その方法を教えて頂きたく、宜しくお願い致します。 ’--(ご参考)---------------------------------------------------- Dim adoRs As New ADODB.Recordset Dim strsql As String Dim strFile As String strsql = "SELECT フィールド1,フィールド2, ・・・・フィールド34" & _ "FROM ○○ファイル ORDER BY フィールド1" adoRs.Open strsql, CurrentProject.Connection strFile = "C:\AAAデータファイル.CSV" Open strFile For Output Access Write As #1 Do Until adoRs.EOF Write #1, _ CStr(adoRs.Fields("フィールド1").Value), _ CStr(adoRs.Fields("フィールド2").Value), _               ・                ・                ・ CStr(adoRs.Fields("フィールド34").Value) adoRs.MoveNext Loop adoRs.Close Close #1 ’---------------------------------------------------------

  • 日付書式のString型からData型への変換

    引数での日付データを加工して、変換させたいのですがエラー("String型からData型への変換は無効です。")がでます。 対処方法をアドバイスいただけないでしょうか? コードを下記に示します。 VS 2010を使用しています。 Dim From As Long Dim Year As Integer Dim Month As Integer Dim Day As Integer From = CLng(Format(DateAdd("d", 1, DateAdd("m", -1, CDate(CStr(Year) & "/" & CStr(Month) & "/" & CStr(Day)))), "yyyyMMdd"))

  • エクセルでのアクセスからのデータ抽出

    Web情報を参考にエクセルにて下記VBAコードを作りました。 Sub DB_Read() Dim adoCON As New ADODB.Connection Dim adoRS As New ADODB.Recordset Dim strSQL As String Dim odbdDB As Variant Dim wSheetName As Variant Dim i, j As Integer Dim GetName odbdDB = ActiveWorkbook.Path & "\test.accdb" adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=" & odbdDB & "" adoCON.Open j = 4 Do Until j = 18 GetName = Range("B4").Value & "_" & Cells(16, j).Value strSQL = "SELECT 規格値,Max,Min,結果1,結果2,結果3 FROM T_測定結果 WHERE [測定項目]='" & GetName & "'" adoRS.Open strSQL, adoCON, adOpenDynamic wSheetName = ActiveSheet.Name i = 20 adoRS.MoveLast Do Until adoRS.EOF Or i = 25 With Worksheets(wSheetName) .Cells(17, j).Value = adoRS!規格値 .Cells(18, j).Value = adoRS!Max .Cells(19, j).Value = adoRS!Min .Cells(i, j).Value = adoRS!結果1 .Cells(i + 10, j).Value = adoRS!結果2 .Cells(i + 20, j).Value = adoRS!結果3 End With i = i + 1 adoRS.MovePrevious Loop j = j + 1 Loop adoRS.Close Set adoRS = Nothing adoCON.Close Set adoCON = Nothing End Sub VBAを走らせると1巡は走るのですが、「Do Until j = 18」の2巡目に入ると、「wSheetName = ActiveSheet.Name」のところで「実行時エラー3705 アプリケーション定義またはオブジェクトの定義エラー」と出てしまいます。 エラーの原因が分からないので、アドバイスを頂きたいです。

  • access テーブルデータの編集、保存

    失礼します。 ACCESSのテーブルのデータをVBAで編集する仕方がわからなくて困っています。 やりたいことは、フォームを作成してそこに「検索」ボタンを作り テキストボックスに入力した条件をSQLにして検索をかける。 →HITするデータの一覧が表示される。 →修正したいデータを選択する。 →修正画面が表示される。 この時に選択したデータをあらかじめEXCELで作成したフォーマットに 反映して修正できるようにしたいんですが、(フィールドをばらばらに指定したセルに代入するような感じです。)これは可能なんでしょうか? そもそもレコードセットに格納したデータを視覚的にUSERに認識させてそこからデータを選択するという事が可能なのかもわかりません。 勉強不足で申し訳ありませんがどなたかアドバイスをいただければ幸いです。 一応自分なりに書いてみたんですがいくら調べてもここで止まってしまいます。どこが不備があれば教えてください。 お願いします。 '変数の設定 Dim myDB As DAO.Database Dim myRS As Recordset Dim strSQL As String '検索条件変数の設定 Dim Day As String Dim Sec As String Dim shaNO As String Dim User As String Dim Sis As String Day = テキスト3 Sec = テキスト7 shaNO = テキスト9 User = テキスト5 Sis = テキスト1 '検索条件をSQLに代入 strSQL = strSQL & " SELECT" strSQL = strSQL & ",SM.起票日" strSQL = strSQL & ",SM.社員番号" strSQL = strSQL & ",SM.所属部署" strSQL = strSQL & ",SM.氏名" strSQL = strSQL & ",SM.対象システム" strSQL = strSQL & ",SM.内容" strSQL = strSQL & ",SM.一日当たりの工数" strSQL = strSQL & ",SM.期待効果" strSQL = strSQL & ",SM.改修コスト" strSQL = strSQL & ",SM.改修必要時間" strSQL = strSQL & ",SM.調査開始日" strSQL = strSQL & ",SM.受付担当者" strSQL = strSQL & ",SM.受付日時" strSQL = strSQL & ",SM.調査終了日" strSQL = strSQL & ",SM.障害区分" strSQL = strSQL & ",SM.調査担当者" strSQL = strSQL & ",SM.代替案" strSQL = strSQL & ",SM.対応区分" strSQL = strSQL & ",SM.対応完了日" strSQL = strSQL & ",SM.難易度" strSQL = strSQL & " FROM" strSQL = strSQL & ",T_障害票マスタ SM" strSQL = strSQL & " WHERE" strSQL = strSQL & ",SM.起票日 = &Day& " strSQL = strSQL & ",SM.所属部署 = &Sec& " strSQL = strSQL & ",SM.社員番号 =&shaNO& " strSQL = strSQL & ",SM.氏名 = &User& " strSQL = strSQL & ",SM.対象システム = &Sis& " strSQL = strSQL & "" Set myDB = CurrentDb() Set myRS = myDB.OpenRecordset(strSQL, dbOpenTable)

  • Excel VBA : Accessのデータを検索

    Excel VBA を使って、Accessのデータを検索したい。 除外テーブルには「管理ID」レコードが在り、ユニークな番号を登録してあります。 やりたいことは、除外テーブルの管理IDに在るであろう、"E003"の有無を確認したいと思います。 作ってみたソースコードは、以下の通り。 Private Sub aSearch_Click() DB.TableOpen ("db_name.mdb") 'Accessのファイル DB.FindRecode ("E003")  ' 検索対象文字列 DB.TableClose End Sub ------------------------------ここから、標準モジュール Public adoCn As ADODB.Connection Public adoRs As ADODB.Recordset Public fSql As String Public fRow As Integer 'データ ソースへの接続と、レコードセットへの接続 Sub TableOpen(ByVal mdb_name As String) Set adoCn = New ADODB.Connection 'データ ソースへの接続 adoCn.Provider = "Microsoft.Jet.OLEDB.4.0" 'Accessへ接続プロバイダ名 adoCn.Open mdb_name '接続するmdbファイル名" fSql = "select 管理ID from 除外テーブル" Set adoRs = New ADODB.Recordset 'レコードセットへの接続 adoRs.Open fSql, adoCn, adOpenKeyset, adLockReadOnly 'クエリーの実行 ' adoRs.Open "除外テーブル", adoCn, adOpenKeyset, adLockReadOnly 'クエリーの実行 End Sub 'レコード(管理ID)の検索 Function FindRecode(ByVal findName As String) As String adoRs.Find adoRs.Fields("管理ID") & "=" & findName     '← ここでエラーとなる  If adoRs.RecordCount = 0 Then MsgBox "該当するレコードは存在しません" FindRecode = "" Exit Function Else Do     ' Doループは、要らないかも??? Debug.Print adoRs.Fields("管理ID") & "/" & adoRs.Fields("登録日") adoRs.MoveNext Loop Until adoRs.EOF End If FindRecode = adoRs.Fields("管理ID") End Function 'データ ソースへの接続と、レコードセットを切断する Sub TableClose() adoRs.Close 'クエリーを閉じる adoCn.Close 'データ接続を閉じる Set adoRs = Nothing Set adoCn = Nothing End Sub ------------- ここまで データのソースから、検索する方法が良く判っておらず、Open / find の使い方はこれで良いのでしょうか。 以上、よろしくお願いします。

  • <VB6.0+SQLServer2000>Image型のバイナリデータを表示したい

    こんにちは。 VB6.0+SQLServer2000で開発を行っています。 Image型の項目を用意して、PictureBoxなりなんなりに表示したいのですが、バイナリデータの変換方法がわかりません。 どなたか教えてください。 とりあえず、今はこんなかんじでPG書いてます。 =============================================== Private Sub Command1_Click() Dim rs As adodb.Recordset Dim mstream As adodb.Stream Dim strSql As String On Error GoTo Err_Command1_Click strSql = "select * from 車体画像 where 整理番号='00000001'" Set rs = New adodb.Recordset rs.Open strSql, cn, adOpenKeyset, adLockOptimistic Set mstream = New adodb.Stream mstream.Type = adTypeBinary mstream.Open mstream.Write rs.Fields("画像データ").Value 'ここからどうすればいいのか分かりません… Exit Sub Err_Command1_Click: MsgBox Error End Sub

  • 可変の検索条件件数でAccessデータを抽出

    http://okwave.jp/qa/q8790348.html ここで質問をさせて頂いたのですが 私の質問方法が下手で、違う意味合いになっていましたので再度投稿させてください。 ■ やりたい事 ADOを用いて、Accessのテーブル内のフィールドに「指定の数値」がある場合 その行を全てExcelに抽出したい ■ 特徴 「指定の数値」は複数あり、なおかつ可変。  → VBAで作成したコンボボックス(Accessから読込)にて選択し、F45から下に好きな個数だけ追加 ■ つまづき点 「指定の数値」全てを検索対象に(OR検索)して SQLのSelect文で取得しようとしてもやり方が分からない ■ 現在のコード '宣言 Private adoCn As Object Private adoRs As Object Private strSQL As String Private Const DBpath = "\Access.mde" Sub DBconnect(flg As Boolean) 'DB呼出 Set adoCn = CreateObject("ADODB.Connection") If flg = True Then Set adoRs = CreateObject("ADODB.Recordset") adoCn.Open "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & DBpath & ";" End Sub Sub 対象() Dim tmpFldCnt As Variant Dim tmpRecCnt As Integer Dim buf() As Variant Call DBconnect(True) m = Worksheets("選択").Range("B47") Dim i As Long Dim j As Long i = 45 j = 44 + Worksheets("選択").Range("B47") 'B47:コンボボックスで選んだ個数分の数値 On Error GoTo err_hander adoCn.BeginTrans 'トランザクション処理開始 strSQL = _ "select * from TBL where コード = [選択$F" & i & ":F" & j & "]" 'F45より下に取得した値が入っていく adoRs.Open strSQL, adoCn, adOpenKeyset 'SQLを実行して、対象をadoRsへ tmpFldCnt = adoRs.Fields.Count tmpRecCnt = adoRs.RecordCount Range("M28:DG31").ClearContents ReDim buf(tmpFldCnt - 1, tmpRecCnt - 1) buf = adoRs.GetRows Range(Cells(28, 13), Cells(28 + tmpFldCnt - 1, 13 + tmpRecCnt - 1)) = buf adoCn.CommitTrans 'トランザクション終了 Call DBcut_off(True) 'DB切断呼び出し Exit Sub 色々と調べてみたものの、解決する気配がせず、どなたか知恵をお貸しください。

  • Accessの値をExcelに縦横入替出力したい

    以前 http://okwave.jp/qa/q8776430.html ここにて質問をさせて頂いたのですが、回答を頂いたことに感激し お恥ずかしい事に解決する前に先走って回答を締めきったものの どうしても解決できないので申し訳ないですが再度質問させて下さい。 質問:AccessからデータをExcelVBAでADOを使用して読み込み、 出力する前に縦横を入れ替えたいのですが その際に, adOpenstatic、adOpenKeyset などカーソルのタイプを変更しても recordcountが-1を返してしまうのですが、解決法を教えてください。 以下補足です。 -------------------------------------------------------------------- 現在、作業列を使って一旦AccessからデータをVBAでADOを使用して読み込み その後transpose関数で入れ替えているのですが 出力する前に縦横を入れ替えた状態にはできないのでしょうか? -------------------------------------------------------------------- という質問に対して、 Dim buf() As Variant Dim i As Long Dim j As Long   ・ 'ここにAccessファイルへのコネクションを設定   ・   ・ i = rs.Fields.Count j = rs.RecordCount ReDim mbuf(i - 1, j - 1) buf = rs.GetRows Range(Cells(1, 1), Cells(i, j)) = buf ------------------------------------------------------------- という回答を頂き パス(省略) Sub AcRecordCount() Dim tmpFldCnt As Variant Dim tmpRecCnt As Variant Dim buf() As Variant Call DBconnect(True) (省略) strSQLgenyu = _ "SELECT * " & _ "FROM TBL " & _ "WHERE コード = " & Range("J1") & _ "Or コード = " & Range("J2") 'J1、J2に一致したwhereフィールドの列を、fromテーブル名から全て(*)を出力 adoRs.Open strSQLgenyu, adoCn, adOpenKeyset 'SQLを実行して、対象をadoRsへ MsgBox (adoRs.RecordCount)  '-1が返ってくる tmpFldCnt = adoRs.Fields.Count tmpRecCnt = adoRs.RecordCount ReDim buf(tmpFldCnt - 1, tmpRecCnt - 1) 'インデックスが有効範囲にありませんとでる(恐らくrecordcountが原因) buf = adoRs.GetRows Range(Cells(131, 11), Cells(tmpFldCnt, tmpRecCnt)) = buf Range("EA11:JJ105").ClearContents 'セル内を削除 Range("EA11").CopyFromRecordset adoRs '出力 End Sub と、書いたのですが、-1が返ってきてしまいます。 原因は何なのでしょうか?

  • access2007 VBA データの抽出SQLがわかりません。

    access2007 VBA データの抽出SQLがわかりません。 下記のように記述しているのですが、Aテーブルから必要なデータが抽出できません。どなたかご教授いただけますか。 ※ 「Me.txtSEQ前.Value」「Me.txtSEQ後.Value」はテキストコントロールです。プロパティでの書式設定は何もしていません。 ========================================= Dim intSEQ前 As Long Dim intSEQ後 As Long 'テキストコントロールなので、数値型にする。 '分かりやすくするために、ここで定義しています。 intSEQ前 = CLng(Me.txtSEQ前.Value) intSEQ後 = CLng(Me.txtSEQ後.Value) 'データを抽出します 'intSEQ前からintSEQ後に入力された数値を抽出する。 strSQL = "SELECT " strSQL = strSQL & "* " strSQL = strSQL & "FROM Aテーブル " strSQL = strSQL & "WHERE 県コード=1 " strSQL = strSQL & "AND (SEQ >= intSEQ前 OR SEQ <= intSEQ後) " strSQL = strSQL & "ORDER BY SEQ " Set objRs = myDB.OpenRecordset(strSQL, dbOpenSnapshot) ※下記をコメントアウトするとデータは正しく抽出されているようです。 strSQL = strSQL & "AND (SEQ >= intSEQ前 OR SEQ <= intSEQ後) " 以上。よろしくお願い致します。

  • NULL文字のINSERT

    こんにちは。 SQLServer初心者です。 Access VBAで SQLServerから抽出したデータをDBにINSERT しようとしてるのですが、抽出した項目にNULLデータがあるので エラーになってしまいます。 どのように回避すればよろしいでしょうか? ISNULL関数を使えば回避できるのでしょうか? たとえば以下のようなINSERT分を実行したいのですが、 顧客名_漢字のフィールドにはNULL文字が入ってる場合があるとします。 よろしくお願い致します。 strSQL2 = "" strSQL2 = strSQL2 & " INSERT INTO NORSE_TMP_DATA ( " strSQL2 = strSQL2 & " ポート名" strSQL2 = strSQL2 & ", 顧客名_漢字" strSQL2 = strSQL2 & ", 顧客名_カナ" strSQL2 = strSQL2 & ", 契約状態" strSQL2 = strSQL2 & ", 契約番号" strSQL2 = strSQL2 & ", 契約枝番号" strSQL2 = strSQL2 & ", 顧客番号" strSQL2 = strSQL2 & " VALUES (" strSQL2 = strSQL2 & " '" & rs.Fields("ポート名").Value & "'" strSQL2 = strSQL2 & ", '" & rs.Fields("顧客名_漢字").Value & "'" strSQL2 = strSQL2 & ",'" & rs.Fields("顧客名_カナ").Value & "'" strSQL2 = strSQL2 & ",'" & rs.Fields("契約状態").Value & "'" strSQL2 = strSQL2 & "," & rs.Fields("契約番号").Value strSQL2 = strSQL2 & "," & rs.Fields("契約枝番号").Value strSQL2 = strSQL2 & "," & rs.Fields("顧客番号").Value strSQL2 = strSQL2 & " )"

専門家に質問してみよう