Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10418 / 13644 ツリー ←次へ | 前へ→

【21882】.csv の保存形式 草加Jacky 05/2/2(水) 16:51 質問[未読]
【21900】Re:.csv の保存形式 IROC 05/2/3(木) 9:38 回答[未読]
【21905】Re:.csv の保存形式 草加Jacky 05/2/3(木) 10:39 発言[未読]
【21906】Re:.csv の保存形式 IROC 05/2/3(木) 11:35 回答[未読]
【21907】Re:.csv の保存形式 IROC 05/2/3(木) 11:41 回答[未読]
【21959】自分で書き出したファイルぐらい読んでほし... 草加Jacky 05/2/4(金) 18:52 お礼[未読]
【21965】Re:自分で書き出したファイルぐらい読んで... IROC 05/2/4(金) 20:39 回答[未読]
【21966】Re:自分で書き出したファイルぐらい読んで... 草加Jacky 05/2/4(金) 22:44 発言[未読]

【21882】.csv の保存形式
質問  草加Jacky  - 05/2/2(水) 16:51 -

引用なし
パスワード
     Workbooks.Item("hoge.csv").Close SaveChanges:=True

で保存するとき、一行が"" で囲まれて、各列が tab で区切られた形式で保存されてしまうときと、一行がカンマで区切られた形式で保存されるときとあるのですが、明示的に指定できないものなのでしょうか?

【21900】Re:.csv の保存形式
回答  IROC  - 05/2/3(木) 9:38 -

引用なし
パスワード
   どのようなデータをどのように保存したいのか不明ですが、
Closeメソッドで保存せずに、Saveasメソッドで保存してはどうでしょ?

【21905】Re:.csv の保存形式
発言  草加Jacky  - 05/2/3(木) 10:39 -

引用なし
パスワード
   ▼IROC さん:
>どのようなデータをどのように保存したいのか不明ですが、
>Closeメソッドで保存せずに、Saveasメソッドで保存してはどうでしょ?

お返事ありがとうございます。
それほど特殊なデータではありません。やりたいことは、

たくさんのファイル(現在数十個、そのうち数百個ぐらいまで増える予定)があります。これらのファイルは内容は異なりますがフォーマットは完全に統一されています。これらは全て一つのフォルダに存在します。

これらをただ単純につなげる(下にのばしていく)ことだけがしたいのですが、これらのファイルの親フォルダにhoge.csv を作成してあって、これのみを立ち上げた状態で全てのファイルを開き、hoge.csv をいったん閉じたあと


For I = 1 To FileNo   'FileNo は対象ファイルの個数
  ActiveCell.SpecialCells(xlLastCell).Select
  x1 = ActiveCell.Row
  y1 = ActiveCell.Column
  
  Range("a1", Cells(x1, y1)).Select
  Selection.Copy
  ActiveWorkbook.Close SaveChanges:=False
  
  Workbooks.Open HogePath & "hoge.csv"
  Range("a1").Select
  If ActiveCell.Value <> "" Then  'A1には全ファイルに必ずデータがある
    ActiveCell.End(xlDown).Select
    ActiveCell.Offset(1, 0).Range("A1").Select
  End If
  Selection.PasteSpecial
  
  Workbooks.Item("hoge.csv").Close SaveChanges:=True


Next I


てな感じで開いて閉じて、開いて閉じて…とやっているんです。
美しくはないですけど、ファイルの名前が特定できないので荒技です。
読み込むファイルの順番は気にしなくて良いのでこういう風にやってます。

ところが、全く同じ形式のファイルであるにもかかわらず、最初にコピペしたファイルだけ「""で囲まれてタブで区切られた」形でセーブされてしまうんです。困ったもんです。ちなみにSaveAs でもうまくいきませんでした。

(ちなみに、別スレで「オープンしてあるブックの数による分岐」はこのマクロの前に置いてあります。hoge.csv 以外のファイルが開いてある時はエラーにするような仕様です。)

【21906】Re:.csv の保存形式
回答  IROC  - 05/2/3(木) 11:35 -

引用なし
パスワード
   >ところが、全く同じ形式のファイルであるにもかかわらず、最初にコピペしたファイルだけ「""で囲まれてタブで区切られた」形でセーブされてしまうんです。


どのCSVファイルでも、最初のファイルだけそのようになるのでしょうか?


>美しくはないですけど、ファイルの名前が特定できないので荒技です。
読み込むファイルの順番は気にしなくて良いのでこういう風にやってます。

DIR関数をループで使用すると、フォルダ内の全ファイルに対して処理できます。

【21907】Re:.csv の保存形式
回答  IROC  - 05/2/3(木) 11:41 -

引用なし
パスワード
   Sub サンプルマクロ()
Dim myDir As String
Dim myFileName As String
Dim wbcsv As Workbook, wscsv As Worksheet
Dim wb As Workbook, ws As Worksheet
Dim r As Long
    
   myDir = "C:\Data\"
   myFileName = Dir(myDir & "*.csv")
  
   Set wb = Workbooks.Add
   Set ws = wb.Worksheets(1)
   ws.Name = "data"
   r = 1
  
   Do While myFileName <> ""
    If myFileName <> ThisWorkbook.Name Then
      Set wbcsv = Workbooks.Open(myDir & myFileName)
      Set wscsv = wbcsv.Worksheets(1)
      
      wscsv.UsedRange.Copy ws.Cells(r, 1)
      r = ws.Range("A65536").End(xlUp).Offset(1).Row
      wbcsv.Close False
      myFileName = Dir()
    End If
   Loop
 
  wb.Activate
  MsgBox "完了"
End Sub

【21959】自分で書き出したファイルぐらい読んでほ...
お礼  草加Jacky  - 05/2/4(金) 18:52 -

引用なし
パスワード
   ▼IROC さん:
>Sub サンプルマクロ()
*以下略*

うわ、どうもありがとうございました。きれいなコードですねぇ。まるまる頂きます。感謝感激です。これで僕の仕事の方は問題なく進むことになりました。


ところで、どうやら本質は「csvファイルを明示的に書き出せない」と言うところにあるわけではなくて、「エクセルが自ら書き出したcsvを、csvと認識して読み込まない」というところにあることに気がつきました。

具体的に説明しますと、くだんのファイルのデータは、一行が

2,2,1,埼玉,Q,,1,2,3,4,5,6,7,8,9,10,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,C

てな感じの行が30〜40行あるだけの何の変哲もない csv ファイルです。(こんなファイルが数十個ある)。
これを読み込んで、まとめ用のファイルにコピぺして

  Workbooks.Item("hoge.csv").Close SaveChanges:=True

で書き出すと、「""で囲まれた、一行がタブで区切られたデータ」(具体的には下記の様)

"2    2    1    埼玉    Q        1    2    3    4    5    6    7    8    9    10    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    C"

になってしまうのです。(ただし最初のファイルだけ)。

まぁそう書き出しても、きちんと読み込んでくれさえすれば許してもいいのですが、これをエクセルで開くとA列に全ての項目がむぎゅっと押し込められて(上の例なら2からCまで)表示されてしまうのです。おいおい。

自分で書き出したファイルぐらい責任を持って元通りに読み込んでほしいと思います。どうなってんでしょうね。

【21965】Re:自分で書き出したファイルぐらい読ん...
回答  IROC  - 05/2/4(金) 20:39 -

引用なし
パスワード
   マクロを使わずにCSVを開いたり保存したりするとどうなりますか?

【21966】Re:自分で書き出したファイルぐらい読ん...
発言  草加Jacky  - 05/2/4(金) 22:44 -

引用なし
パスワード
   ▼IROC さん:
>マクロを使わずにCSVを開いたり保存したりするとどうなりますか?

もう自宅に帰ってきてしまったので検証はできませんが、元ファイルは普通に保存できているわけですから大丈夫のはずですけど。(元ファイルもエクセルで作成したcsvです)

10418 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free