• ベストアンサー

Access2003でのエクスポートについて

不可能かもしれませんが、ACCESS2003でCSVエクスポートする時に、CSVの一行目(Excelで言うところのA1セル)に文字を注入する事は可能でしょうか?? 初心者ですので、可能であれば簡単に教えていただけませんか??

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

フィールド名の挿入が抜けていたみたいです。 testプロシージャを以下にしてみてください。 Sub test() Dim db As DAO.Database Dim rs As DAO.Recordset Dim ret As Variant Dim strMsg As String Dim i As Integer Dim buf As String strMsg = "同じ名前のファイルが存在します。上書きしますか。" 'ファイル名の入力。入力がなければ出力せずに終了 ret = InputBox("保存するときのファイル名を入力してください。") If StrPtr(ret) = 0 Then Exit Sub If ret = vbNullString Then Exit Sub '同じ名前のファイルがあった場合に追加するか確認 If funcCheck(CurrentProject.Path & "\" & ret & ".csv") = True Then If MsgBox(strMsg, vbOKCancel, "確認") = vbCancel Then MsgBox "最初からやり直してください" Exit Sub End If End If Set db = CurrentDb Set rs = db.OpenRecordset("テーブル1", dbOpenDynaset) Open CurrentProject.Path & "\" & ret & ".csv" For Append Access Write As #1 'Open CurrentProject.Path & "\aaa.csv" For Input As #1 '先頭に挿入 Print #1, "abcd" & "," & "" & "," & "efg" & "," 'フィールド名の取得と追加 For i = 0 To rs.Fields.Count - 1 buf = buf & Chr(44) & rs.Fields(i).Name Next i buf = Mid(buf, 2) Print #1, buf 'テーブルデータを追加 Do Until rs.EOF Print #1, rs!商品番号 & "," & rs!価格 & "," & rs!名前 & "," rs.MoveNext Loop Close #1 rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub

tankarei1987
質問者

お礼

完璧です!!!! 助かりました^^ 長々と、本当にありがとうございましたm(__)m

その他の回答 (4)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

少し勘違いしていたところがるので、 以下のようにしてください。 (1) 以下のコードを標準モジュールに貼り付け、 保存してください。 そのとき、参照設定で Microsoft Scripting Runtime にチェックを入れてください。 'ファイルの存在確認の関数 Function funcCheck(ByVal strPath As String) As Boolean Dim objFso As FileSystemObject Set objFso = CreateObject("Scripting.FileSystemObject") If objFso.FileExists(strPath) = True Then funcCheck = True Else funcCheck = False End If Set objFso = Nothing End Function (2) testプロシージャを以下のようにしてください。 Sub test() Dim db As DAO.Database Dim rs As DAO.Recordset Dim ret As Variant Dim strMsg As String strMsg = "同じ名前のファイルが存在します。上書きしますか。" 'ファイル名の入力。入力がなければ出力せずに終了 ret = InputBox("保存するときのファイル名を入力してください。") If StrPtr(ret) = 0 Then Exit Sub If ret = vbNullString Then Exit Sub '同じ名前のファイルがあった場合に追加するか確認 If funcCheck(CurrentProject.Path & "\" & ret & ".csv") = True Then If MsgBox(strMsg, vbOKCancel, "確認") = vbCancel Then MsgBox "最初からやり直してください" Exit Sub End If End If Set db = CurrentDb Set rs = db.OpenRecordset("テーブル1", dbOpenDynaset) Open CurrentProject.Path & "\" & ret & ".csv" For Append Access Write As #1 'Open CurrentProject.Path & "\aaa.csv" For Input As #1 '先頭に挿入 Print #1, "abcd" & "," & "" & "," & "efg" & "," 'テーブルデータを追加 Do Until rs.EOF Print #1, rs!商品番号 & "," & rs!価格 & "," & rs!名前 & "," rs.MoveNext Loop Close #1 rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub

tankarei1987
質問者

補足

何度もありがとうございますm(__)m 大体理解出来たのですが、上記のコードを実行すると --------------------------------- ____A_______________B____________C____________________ 1___abcd__________[ 空欄 ]____efgh 2___商品番号___価格_______名前        ----列名(フィールド名)   3___a-1____________2000______ネックレス    ----1列目 --------------------------------- ではなく --------------------------------- ____A_______________B____________C____________________ 1___abcd__________[ 空欄 ]____efgh 2___商品番号___価格_______名前        ----列名(フィールド名)   3___商品番号___価格_______名前        ----1列目 --------------------------------- と全部が同じになっていまして、色々と試行錯誤しているのですが 全く分からなく、一度の質問で済むところを、こちらの確認不足で 何度も申し訳ないのですが教えていただけませんか? 宜しくお願い致します!

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

(1) >1___abcd__________[ 空欄 ]____efgh のようにする場合は、 Print #1, "abcd" のところを、 Print #1, "abcd" & "," & "" & "," & "efg" & "," のようにします。つまり、abcd、空欄、efgをカンマで 区切りながら行に入れていきます。 (2) >教えていただいたコードですとファイルを開いて書き >込む?ような気がするのですが コードを実行すると、そのたびにファイルを新規に 作成するようになっています。つまり、 Open CurrentProject.Path & "\aaa.csv" For Append Access Write As #1 において、aaa.csv というcsvファイルを毎回新規に 作成します。Openとありますが、もし、同じ名前の csvファイルがあれば、保存するときに上書きの 確認を求められます。もしaaa.csvというファイルが なければ新規に作成するという仕様になっています。 (3) >毎回同じ形式でファイルを作成したい場合、一度空白 >のテーブルをエクスポートしその後、上記のコードを >書けば良いのでしょうか?? (2)の通りなので、出力したcsvファイルを名前を変えて 保存すればいいのでは、と思います。 (4) >テキスト形式にする場合は拡張子を”.txt”に >変更するだけで良いのでしょうか?? はい、です。 直接テキストにすることも出来ますが いろいろと面倒なことが出てくる可能性があるので 一旦、csvファイルにしてテキストに変更するのが いいのでは、と思います。 追加 すこし、手の込んだことをことするならば、 ファイル名を任意の名前にすることもできます。 インプットボックスに 2月1日の資料 と入れると、 2月1日の資料.csv というcsvファイルができます。 追加の部分も一緒にしてまとめてみると、 Sub test() Dim db As DAO.Database Dim rs As DAO.Recordset Dim ret As Variant '(追加の部分)ファイル名の入力。入力がなかったり 'キャンセルならば出力せずに終了 ret = InputBox("保存するときのファイル名を入力してください。") If StrPtr(ret) = 0 Then Exit Sub If ret = vbNullString Then Exit Sub Set db = CurrentDb Set rs = db.OpenRecordset("テーブル1", dbOpenDynaset) Open CurrentProject.Path & "\" & ret & ".csv" For Append Access Write As #1 '先頭に挿入 Print #1, "abcd" & "," & "" & "," & "efg" & "," 'テーブルデータを追加 Do Until rs.EOF Print #1, rs!商品番号 & "," & rs!価格 & "," & rs!名前 & "," rs.MoveNext Loop Close #1 rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub です。ファイル名の入力が必要がなく、毎回固定の名前で出力するならば、 追加の部分を削除して、 Open CurrentProject.Path & "\" & ret & ".csv" For Append Access Write As #1 のところを、 Open CurrentProject.Path & "\aaa.csv" For Append Access Write As #1 にして、aaaを適当な名前にしてください。 何かあれば、補足してください。

tankarei1987
質問者

補足

ほぼ完璧に出来ました^^ 本当に、ありがとうございます! >コードを実行すると、そのたびにファイルを新規に >作成するようになっています。つまり、 > >Open CurrentProject.Path & "\aaa.csv" For Append Access Write As #1 > >において、aaa.csv というcsvファイルを毎回新規に >作成します。Openとありますが、もし、同じ名前の >csvファイルがあれば、保存するときに上書きの >確認を求められます。もしaaa.csvというファイルが >なければ新規に作成するという仕様になっています。 最後に一点だけ気になる点があったのですが、 エクスポートしたところ、以前にエクスポートしたCSVファイル (CSVを開いた状態)の下に、追加クエリの様に追加され 上書きの確認の様なものも現れなかったのですが 何が原因なのでしょうか?? 度々すみませんが宜しくお願い致します!

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

方法はいろいろありますが。 以下のコードを標準モジュールに貼り付け、 Sub test() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("テーブル1", dbOpenDynaset) Open CurrentProject.Path & "\aaa.csv" For Append Access Write As #1 '先頭に挿入 Print #1, "abcd" 'テーブルデータを追加 Do Until rs.EOF Print #1, rs!商品番号 & "," & rs!価格 & "," & rs!名前 & "," rs.MoveNext Loop Close #1 rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub イミディエイトウィンドウで、testを実行 するか、あるいは、フォームにボタンを貼り付け、 Private Sub コマンド0_Click() Call test End Sub のようにするか、あるいは、testの中身を クリックイベントの中に入れて、 Private Sub コマンド0_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("テーブル1", dbOpenDynaset) Open CurrentProject.Path & "\aaa.csv" For Append Access Write As #1 '先頭に挿入 Print #1, "abcd" 'テーブルデータを追加 Do Until rs.EOF Print #1, rs!商品番号 & "," & rs!価格 & "," & rs!名前 & "," rs.MoveNext Loop Close #1 rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub のようにします。 なお、DAOを使用しているので、 コード表のツールから参照設定を選択し、 Microsoft DAO xx Object Library にチェックが入っているか確認してください。 なお、xxは3.6のような数字です。 わからないところがあれば、補足してください。

tankarei1987
質問者

補足

上記のコードで、思っていた事は完璧に出来ました! ありがとうございます! ただ、こちらのミスで申し訳ないのですが、下記のようにしたい場合何処を触れば良いのでしょうか?? --------------------------------- ____A_______________B____________C____________________ 1___abcd__________[ 空欄 ]____efgh 2___商品番号___価格_______名前        ----列名(フィールド名)   3___a-1____________2000______ネックレス    ----1列目 --------------------------------- もう何点か質問したいのですが、教えていただいたコードですと ファイルを開いて書き込む?ような気がするのですが 毎回同じ形式でファイルを作成したい場合、一度空白のテーブルをエクスポートし その後、上記のコードを書けば良いのでしょうか?? 最後ですが、テキスト形式にする場合は拡張子を”.txt”に 変更するだけで良いのでしょうか?? お手数ですが、宜しくお願い致します。

  • kawai985
  • ベストアンサー率68% (17/25)
回答No.1

エクスポートの対象は何ですか 1行目は列名になりますが  列名を変えたいということでしょうか 文字を書くとはどういう意味ですか たとえばクエリならフィールド名を別名に変えることもできます テーブルならクエリを経由すれば可能です これ以上ならVBAで可能です 具体的にはどういうことをイメージしているのでしょうか

tankarei1987
質問者

補足

--------------------------------- ____A_______________B____________C____________________ 1___abcd 2___商品番号___価格_______名前       ----列名(フィールド名)   3___a-1____________2000______ネックレス    ----1列目 --------------------------------- 例えば、通常CSV形式でエクスポートをすれば一行目は列名(フィールド名)ですが、一行目のA1フィールドに「abcd・・・」と入れて、二行目を列名にしたいのですが、VBAで可能ですかね?? 最終的には、上記の様な事が出来るのであれば、CSVではなくテキスト形式で出力したいです。

関連するQ&A

  • Access2000、データのエクスポート

    Access2000でテーブルデータをエクスポートする時、csv形式で保存しますが、その際にフィールド名を付加する設定で保存します。 今回実現したいのは、このフィールド名の手前にデータを置きたいのです。 具体的には欲しいcsvファイルは次のような内容になります。 1行目 公共料金明細 2行目 (空白) 3行目 日付,金額,部門 4行目 20/1/10,2100,01001 5行目 20/1/10,3150,18001 (以下はこのような内容が続く。)(内容はすべてテキスト形式です。) このように普通にエクスポートすると3行目以降のcsvファイルができるのですが、その手前に1行目と2行目のデータを入れたいのです。 1行目はEXCELで言うところのA1セルに該当します。 2行目は何も入れませんが、1行空ける必要があります。 これらは、このcsvファイルを取り込むソフトの都合上、こうせざるを得ないのです。 方法を教えていただきたくお願いします。

  • ACCESSからEXCELへのエクスポート

    ACCESSのフォームで、スクロールする位メモ型フィールドに入力をしていますが、EXCELにエクスポートすると、約10行目以降が正常に落ちません。試しに2,000文字程程入力してEXCELにエクスポートしたら、「折り返して表示する」機能で1,000文字までは正常に表示されますが、それ以降は横に行ってしまい表示できませんでした。ACCESSのメモ型フィールドは1,000文字や10行が限界なのでしょうか?またそれ以上を正常にエクスポートする方法はあるのでしょうか。 ご存知の方教えてください。

  • アクセスのエクスポート

    CSVファイルをアクセスでインポートした後に固定長ファイルで エクスポートした時に桁がずれてしまいます。 例 CSV   1,200×10,T   2,2345,T インポート後にエクスポート  定義 フィールド1 2バイト  フィールド2 10バイト フィールド3 3バイト 結果 _(スペースです) 1 200×10____T 2 2345______T ×やIIなどの文字があると1文字に付き1バイトずれて固定長に なりません。どなたか教えて下さい

  • ACCESS で 項目名を出力せずにエクスポートしたい

    いつもありがとうございます。 今回、ACCESSのテーブルをCSV形式でエクスポートする事を試みているのですが、出力されたCSVファイルの先頭行に項目名がくっついてしまいます。 この先頭行を出力しないでエクスポートするにはどうすればいいでしょうか?

  • Access2010エクスポートしたい

    Microsoft Access2010 選択クエリデータをEXCEL2010にエクスポートしたいMicrosoft Access2010は高齢者で初心者なので分かりやすい表現で教えて下さい、フォーム上にコマンドボタンを設置しています、コマンドボタンクリック時、EXCEL2010 sheet1 A4を起点にエクスポートしたい 宜しくお願い致します。

  • ACCESS エクスポートについて

    ACCESSのエクセルへのエクスポートについて お世話になりあます。 既存エクセルにACCESSのDoCmdを使用してエクスポートしようと考えています。 エクスポート先は既存エクセル(セルに数式あり)です。 DoCmd.TransferSpreadsheet acExport, SpreadsheetType, TableName, FileName , True,SheetName という分を作り実行しましたが、「ワークシートのセルが削除できません」と出てしまい エクスポートできません。 ヘルプを見ると数式が含まれていると出来ないと書いてありました。 数式を消さないと出来ないのでしょうか。 お手数ですが、分かる方おられましたら教えて下さい。

  • ACCESS2007のエクスポート上限

     ACCESS2007のデータにフィルタを掛けて、絞り込み、その抽出結果をEXCEL2007にエクスポートしようとしたところ、 「選択しているレコードの数が多すぎるため、一度にクリップボードにコピーできません。自分で、6万5千件単位に分けて下さい」と帰って来ました。。。 上記メッセージでググると、マクロ等を利用して解決されている例が見つかりましたが、 ちょっと自分の頭では理解できませんでした。。 もっと簡単なコピペで済むようなクエリ等で解決方法有りませんでしょうか? ACCESSのデータが300万行レコード EXCELのデータが平均10~20万行になるようなデータです。。。 以前は、何とか出来ていたのですが、その時のACCESSのバージョンは2010だったかも知れません。。 現在はACCESS2007しか無いのですが、この環境で何とかする手は有るでしょうか? エクスポート形式をEXCELからTXTに変更しても、同じ制限に掛かります。CSV型式というのはないようです。。

  • ACCESS2010Excelエクスポート1行目に

    おしえてください。 ACCESS2010、「クエリ」作成データを Excelへエクスポートを行う際、 ヘッター項目の「上の行」に固定の文字を入れ、Excelへエクスポートさせたいのですが、 どのようにすればよいでしょうか。 自分なりに調べたのですが答えが見つからずお力を貸してください。

  • AccessからEXCELへのエクスポート・・・みたいな・・・・

    accessからexcelへのデータエクスポートなのですが・・・ excelへの指定されたセルへのエクスポートならわかるのですが・・・ accessのデータ量(レコード数)が変化するので・・・その方法がわかりません・・・ 教えてください・・・。

  • Access2003で特定列の改行コードを削除してCSVへエクスポート

    またまた、質問させていただきます^^; Access2003にてCSVデータを一旦インポートして、クエリなどを使いデータを編集し、別のテーブルへ追加クエリを使用して吐き出し、そのテーブルのデータ全てをCSVファイルへエクスポートする、といった処理をしております。 はじめに取り込むCSVデータが、セル内(エクセルの編集画面でたとえさせていただきます)で沢山改行されているデータで、それをアクセスに取り込むと改行は一旦なくなったように、見えるのですが、エクスポートするとやはり改行コードが着いたままエクスポートされます。 この改行コードをAccessの処理で削除したいのですが出来るのでしょうか?CSV内の改行全てを削除するのではなく、特定列内(例えばC列など)のセル内の改行コードのみの削除です。 エクセルのClean関数なども試しましたがAccessの処理で一括してしまいたいのです。 TeraPad、秀丸などのテキストエディタで改行コードの置換をすると全て消えてしまい、CSVの行を意味する改行コードまで消えてしまうので使えないし。。。 皆様、お知恵をおかし下さい!お願いします。

専門家に質問してみよう