dポイントプレゼントキャンペーン実施中!

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を使用すればよいようなのですが、具体的にどのように
実行すれば答えにたどり着けるのかが分かりません。

ご存知の方いらっしゃいましたらお力をお貸しください。
お手数おかけいたしますがよろしくお願いいたします。

A 回答 (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を省き実行してみてください。
    • good
    • 0
この回答へのお礼

お礼 遅くなってしまい申し訳ありません。

皆さんにお教えいただいた方法をもとに
いろいろ試してみます。
もっと勉強しないといけませんね。

ありがとうございました。

お礼日時:2009/09/01 13:52

こんにちは。



昔、作ったマクロがありますので、それに多少手を加えました。
[標準モジュール]に貼り付けてください。このマクロは、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
    • good
    • 0
この回答へのお礼

御礼遅くなりましてすみません。

ものすごい記述ありがとうございます。
もっと勉強しなければと痛感します。

ありがとうございました。

お礼日時:2009/09/01 13:50

あまり詳しいわけではないので、もっと良い方法があるかもしれませんが…



Excel上で「文字列関数:CONCATENATE」を使って、項目を1つのセルにまとめる、というのはどうですか?

式は
=CONCATENATE("""",A1,""" """,B1,""" """,C1,""" """,D1,"""")
となります。
    • good
    • 0
この回答へのお礼

お礼遅くなりましてすみません。

CONCATENATE というものがあるのですね。
もっと勉強しなくては・・・。

ありがとうございました。

お礼日時:2009/09/01 13:49

A列からD列にかけてお示しのデータがあるとしてE1セルには次の式を入力して下方にオートフィルドラッグします。


=""""&TEXT(A1,"yyy/m/d")&""" """&B1&""" """&C1&""" """&D1&""""
    • good
    • 0
この回答へのお礼

お礼遅くなりましてすみません。

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

お礼日時:2009/09/01 13:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!