- 締切済み
指定フォルダ内のファイルオープン→別フォルダに同じファイル名のcsvとして保存 のマクロを作ろうとしています
エクセルで、指定フォルダ内のファイルオープン→別フォルダに同じファイル名の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
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 補足で出ている内容については、両方とも、VBAマクロでも可能ですが、どちらかというと、Unix ツールで簡単に出来てしまいますが、テキストエディタでも良いと思います。メモ帳ですと、ファイルの大きさに制限がありますが、可能なら、メモ帳でも良いと思います。 「?」は、おそらく、Unicode が入り込んだものだと思います。Excel上で、通常、CSV は、JISですから、一旦、保存してしまうと、Unicode は文字化けというよりは、もう単なる「?」として、文字コードは単に、"x3F"でしかありませんから、そのまま、置換すれば済みます。 また、CSV はテキストファイルですから、Win用のGUIのcat ツールもあるとは思いますが、これも、テキストエディタで十分ではないではありませんか?なお、Unix 系は、すべて、コマンドラインで操作しますが、MS-DOSコマンドのCopy でも可能です。
- mitarashi
- ベストアンサー率59% (574/965)
#1です。 1.?が残る件はhtmlの文字コードの問題で文字化けしているのでしょうね。具体的なURLを開示した上で、別に質問を立てていただけると、詳しい方から回答が得られるでしょう。 2.CSVファイルの合併の件は、CSV作成からVBAでやろうとすると、全く別のコードになりますので、追加オーダーの範囲を超えていると思います。簡単には、CSVファイルといってもただのテキストファイルですので、 「テキストファイル 結合 フリーソフト」 で検索いただくと、合併順等画面で確認した上で、合併するといったソフトが見つかると思います。 あるいは、「エクセル ファイル 結合 VBA 1シート」等で検索していただくと見つかるコードを、xlsファイルをhtmlに置き換えて考えるだけで、適用可能でしょう。
お礼
ご回答ありがとうございました。 早速調べたところ、結合ソフトは色々あるのですね。 文字化けについてはもう一度元データを検証してみたいと思います。 ご協力に感謝いたします。
- mitarashi
- ベストアンサー率59% (574/965)
拡張子を変えても、同じ名前だとエラーになる様ですね。適当な名前で保存後、所期の名前でコピーすると可能でした。 ご質問のコードと相違しますが、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/filesystemobject/index.htm
補足
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ファイルにまとめることは出来ますでしょうか? 何度も質問してしまい申し訳ありません お手すきのときで結構ですので、お力添えをいただけましたら幸いです。 今回を機にマクロについてもっと知りたいと思うようになりました。 どうもありがとうございました。 順引き、逆引き おすすめのマクロ本がございましたら、教えていただけると嬉しく思います。
お礼
ご回答ありがとうございました ?が付いてしまうもの以外にも、文字化けにより完全に読めないページもありました。 色々トライしてみようと思います。