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

エクセルで、指定フォルダ内のファイルオープン→別フォルダに同じファイル名のcsvとして保存 のマクロを作ろうとしています。

現在下記のようなマクロを途中まで作成したのですが、保存の良い方法が分からず困っております。
(ファイルオープンまでは出来ているようですが、その後エラーが出てしまいます)
どなたかお知恵を拝借願えませんでしょうか。
どうぞ宜しくお願い致します。

Sub Book_Open()
Dim BookName As String
Dim PathName As String
PathName = "C:\test_htmltocsv\test\"
BookName = Dir(PathName & "*.html")
Do Until BookName = ""
Workbooks.Open PathName & BookName
BookName = Dir()
ActiveWorkbook.SaveAs "Sample.xls" ←←
Loop
End Sub

A 回答 (3件)

こんばんは。



補足で出ている内容については、両方とも、VBAマクロでも可能ですが、どちらかというと、Unix ツールで簡単に出来てしまいますが、テキストエディタでも良いと思います。メモ帳ですと、ファイルの大きさに制限がありますが、可能なら、メモ帳でも良いと思います。

「?」は、おそらく、Unicode が入り込んだものだと思います。Excel上で、通常、CSV は、JISですから、一旦、保存してしまうと、Unicode は文字化けというよりは、もう単なる「?」として、文字コードは単に、"x3F"でしかありませんから、そのまま、置換すれば済みます。

また、CSV はテキストファイルですから、Win用のGUIのcat ツールもあるとは思いますが、これも、テキストエディタで十分ではないではありませんか?なお、Unix 系は、すべて、コマンドラインで操作しますが、MS-DOSコマンドのCopy でも可能です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました
?が付いてしまうもの以外にも、文字化けにより完全に読めないページもありました。

色々トライしてみようと思います。

お礼日時:2009/06/23 12:12

#1です。


1.?が残る件はhtmlの文字コードの問題で文字化けしているのでしょうね。具体的なURLを開示した上で、別に質問を立てていただけると、詳しい方から回答が得られるでしょう。
2.CSVファイルの合併の件は、CSV作成からVBAでやろうとすると、全く別のコードになりますので、追加オーダーの範囲を超えていると思います。簡単には、CSVファイルといってもただのテキストファイルですので、
「テキストファイル 結合 フリーソフト」
で検索いただくと、合併順等画面で確認した上で、合併するといったソフトが見つかると思います。
あるいは、「エクセル ファイル 結合 VBA 1シート」等で検索していただくと見つかるコードを、xlsファイルをhtmlに置き換えて考えるだけで、適用可能でしょう。
    • good
    • 0
この回答へのお礼

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

早速調べたところ、結合ソフトは色々あるのですね。
文字化けについてはもう一度元データを検証してみたいと思います。

ご協力に感謝いたします。

お礼日時:2009/06/23 12:13

拡張子を変えても、同じ名前だとエラーになる様ですね。

適当な名前で保存後、所期の名前でコピーすると可能でした。
ご質問のコードと相違しますが、CSVで保存とありますので、それに合わせてみました。また、当方の環境に合わせてありますのでアレンジしてください、C:\直下、拡張子.htmなど。なお、当方XL2000です。
Sub Book_Open2()
Dim BookName As String
Dim PathName As String
Dim fso As Object

Set fso = CreateObject("Scripting.FileSystemObject")
PathName = "C:\"
BookName = Dir(PathName & "*.htm")
Do Until BookName = ""
Workbooks.Open PathName & BookName
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=PathName & "temp.csv", FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close savechanges:=False
fso.CopyFile PathName & "temp.csv", PathName & fso.getbasename(BookName) & ".csv"
Application.DisplayAlerts = True
BookName = Dir()
Loop
End Sub
FileSystemObjectを使うまでもないでしょうが、楽に走りました。詳細は下記をご覧下さい。
http://officetanaka.net/excel/vba/filesystemobje …

この回答への補足

mitarashi様

ご回答本当にありがとうございました。
先ほど走らせたところ無事動作を確認いたしました。
お忙しい中、ご回答に心より感謝いたします。

2つほど、ヒントだけでもお教えいただけると嬉しいのですが

■htmlから直接引っ張ってきているために、csv化の際に「?」や「 ?」が残ってしまうのですが、これを消してしまう手立てはありますでしょうか?

■もうひとつ
A1B1
A2B2
A3B3

というHTMLファイル(f1、f2、f3・・・)がたくさんあり、さきほどこれを個々にCSV化して頂けたわけですが、

f1A1 f1A2 f1A3
f1B1 f1B2 f1B3
f2A1 f2A2 f2A3
f2B1 f2B2 f2B3
・・・
と1つのcsvファイルにまとめることは出来ますでしょうか?

何度も質問してしまい申し訳ありません
お手すきのときで結構ですので、お力添えをいただけましたら幸いです。

今回を機にマクロについてもっと知りたいと思うようになりました。
どうもありがとうございました。
順引き、逆引き おすすめのマクロ本がございましたら、教えていただけると嬉しく思います。

補足日時:2009/06/21 17:06
    • good
    • 0

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