- ベストアンサー
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を使用すればよいようなのですが、具体的にどのように 実行すれば答えにたどり着けるのかが分かりません。 ご存知の方いらっしゃいましたらお力をお貸しください。 お手数おかけいたしますがよろしくお願いいたします。
- みんなの回答 (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を省き実行してみてください。
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 昔、作ったマクロがありますので、それに多少手を加えました。 [標準モジュール]に貼り付けてください。このマクロは、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
お礼
御礼遅くなりましてすみません。 ものすごい記述ありがとうございます。 もっと勉強しなければと痛感します。 ありがとうございました。
- miwa_28
- ベストアンサー率61% (29/47)
あまり詳しいわけではないので、もっと良い方法があるかもしれませんが… Excel上で「文字列関数:CONCATENATE」を使って、項目を1つのセルにまとめる、というのはどうですか? 式は =CONCATENATE("""",A1,""" """,B1,""" """,C1,""" """,D1,"""") となります。
お礼
お礼遅くなりましてすみません。 CONCATENATE というものがあるのですね。 もっと勉強しなくては・・・。 ありがとうございました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
A列からD列にかけてお示しのデータがあるとしてE1セルには次の式を入力して下方にオートフィルドラッグします。 =""""&TEXT(A1,"yyy/m/d")&""" """&B1&""" """&C1&""" """&D1&""""
お礼
お礼遅くなりましてすみません。 お教えいただいた方法で試したところ、入力は大変でしたが何とか こなせました。 ありがとうございました。
お礼
お礼 遅くなってしまい申し訳ありません。 皆さんにお教えいただいた方法をもとに いろいろ試してみます。 もっと勉強しないといけませんね。 ありがとうございました。