• ベストアンサー

Excel 2002 をtxt形式にして書き出すには

Excel2002を使用しており以下のようなデータがあります。 例 生年月日 氏名 郵便番号 県名  1999/2/2 @@@@ 115-0023 東京都 1998/7/2 @@@@ 335-0005 埼玉県 これを最終的に「.txt」の形式にして「”」でそれぞれのセルを 囲った状態にしたいのです。 (ダブルコーテーション間は半角スペース1個) "生年月日" "氏名" "郵便番号" "県名"  "1999/2/2" "@@@@" "115-0023" "東京都" "1998/7/2" "@@@@" "335-0005" "埼玉県" Excelの機能を使ってテキスト形式に書き出すとタブ区切りになります。 メモ帳の置換機能を使ってタブ区切りになっている部分を「" "」に 置き換えるという方法をとってみたのですが、件数が2000件以上項目数も10項目以上あるため非常に時間がかかる上、「応答なし」で止まってしまいます。 不慣れなAccess2002を使用して、なんとかダブルコーテーションで くくった状態で書き出せたのですが、表記が一部変わってしまいました。 数字       5 ⇒ 5.00 生年月日 1998/7/2 ⇒ 1998/7/2 0:00:00 Accessを使用すればよいようなのですが、具体的にどのように 実行すれば答えにたどり着けるのかが分かりません。 ご存知の方いらっしゃいましたらお力をお貸しください。 お手数おかけいたしますがよろしくお願いいたします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

テキスト形式関連のファイルについて、旧Basic時代から データの表し方は  全て""でデータ項目を囲う  文字列だけ囲う、数字は裸  数字も文字列も裸 区切りは  カンマ CSV  タブ  TXT  1スペース TXT  1-複数スペース Prn方式(データは”などつけない)   そのまま印刷したとき、表の見た目のように文字列左詰め先頭そろえ、数字右詰最後尾そろえ(印刷するとそのまま罫線なしの表のような感じ)位置あわせは複数スペースを埋め込みか) ーー これのそれぞれの可能な組み合わせバリエーションが採られる。 ーー 質問者の望む形式は、古臭い形式で、実現するなら、ソフトを探すか 自作するほか無いでしょう。正規表現で加工が出来るかもしれない。 数字””なし、文字列””囲うならぴったりのステートメントが旧Basicにあるが。 ーー 2000行にもなるとデータを加工するので多少時間がかかるでしょう。>件数が2000件以上項目数・・は??ですが。 ーー Sub test01() Close #1 Open "test011.txt" For Output As #1 d = Range("A65536").End(xlUp).Row '最下行 r = Range("IV3").End(xlToLeft).Column '最右列 MsgBox r MsgBox d For i = 2 To d '2はスタート行 s = "" For j = 1 To r s = s & Chr(34) & Cells(i, j) & Chr(34) & Chr(44) Next j MsgBox Left(s, Len(s) - 1) Print #1, Left(s, Len(s) - 1) Next i Close #1 End Sub 例データ エクセル A2:E4 1999/2/2 山田 115-0023 東京都 123423 1998/7/2 宮田 335-0005 埼玉県 234 2009/8/2 村山 335-0006 千葉県 1122233 結果 メモ帳で "1999/02/02","山田","115-0023","東京都","123423" "1998/07/02","宮田","335-0005","埼玉県","234" "2009/08/02","村山","335-0006","千葉県","1122233" ーーーー 当初少数データでやってメモ帳で確認した後、Msgboxを省き実行してみてください。

popotan5-8
質問者

お礼

お礼 遅くなってしまい申し訳ありません。 皆さんにお教えいただいた方法をもとに いろいろ試してみます。 もっと勉強しないといけませんね。 ありがとうございました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 昔、作ったマクロがありますので、それに多少手を加えました。 [標準モジュール]に貼り付けてください。このマクロは、ExcelのCSVの出力表現が限られているものに対して、バリエーションを加えるためのものです。空白セルに対しては、"" となります。 Sub OutputCSV() 'CSV["" (クォーテーションマーク)]付き出力  Dim myPath As String  Dim myFname As Variant  Dim Fno As Integer  Dim buf As String  Dim i As Long  Dim j As Long  Const QT As String = """"  '「""」を入れるかどうか  '0 =すべて, 1 =書式文字列のみ, 2 =すべてない  '注:数値でも、'02 や書式文字列にしていれば、文字列として認識する  Const SWITCH As Integer = 0  '区切り文字  Const DELIM As String = " " '半角空白  '拡張子  Const EXT As String = "*.txt"  myFname = Application.GetSaveAsFilename("", "テキスト ファイル (" & EXT & "), " & EXT)  If myFname = False Then   Exit Sub  ElseIf Dir(myFname) <> "" Then   If MsgBox("同じ名前のファイルがあります。上書きしますか?", vbQuestion) = vbCancel Then    Exit Sub   End If  End If    With ActiveSheet.UsedRange   If WorksheetFunction.Count(.Cells) = 0 Then    MsgBox "データが一つもありません。", vbCritical    Exit Sub   End If      Fno = FreeFile   Open myFname For Output As #Fno   For i = 1 To .Rows.Count    For j = 1 To .Columns.Count     If Not IsEmpty(.Cells(i, 1).Value) Then      If SWITCH = 0 Then       buf = buf & DELIM & QT & .Cells(i, j).Text & QT      ElseIf SWITCH = 1 Then       If VarType(Cells(i, j).Value) = vbString Then        buf = buf & DELIM & QT & .Cells(i, j).Text & QT       Else        buf = buf & DELIM & .Cells(i, j).Text       End If      Else       buf = buf & DELIM & .Cells(i, j).Text      End If     End If    Next j    Print #Fno, Mid$(buf, 2)    buf = ""   Next i  End With  Close #Fno End Sub

popotan5-8
質問者

お礼

御礼遅くなりましてすみません。 ものすごい記述ありがとうございます。 もっと勉強しなければと痛感します。 ありがとうございました。

  • miwa_28
  • ベストアンサー率61% (29/47)
回答No.2

あまり詳しいわけではないので、もっと良い方法があるかもしれませんが… Excel上で「文字列関数:CONCATENATE」を使って、項目を1つのセルにまとめる、というのはどうですか? 式は =CONCATENATE("""",A1,""" """,B1,""" """,C1,""" """,D1,"""") となります。

popotan5-8
質問者

お礼

お礼遅くなりましてすみません。 CONCATENATE というものがあるのですね。 もっと勉強しなくては・・・。 ありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

A列からD列にかけてお示しのデータがあるとしてE1セルには次の式を入力して下方にオートフィルドラッグします。 =""""&TEXT(A1,"yyy/m/d")&""" """&B1&""" """&C1&""" """&D1&""""

popotan5-8
質問者

お礼

お礼遅くなりましてすみません。 お教えいただいた方法で試したところ、入力は大変でしたが何とか こなせました。 ありがとうございました。