• ベストアンサー

CSVファイルをEXCELに変換の自動化作業

CSVファイルをEXCELに変換の自動化作業 {CSVファイルをEXCELに変換するため、 excel  ツールバーよりデータ(D)→外部データの取り込み(D)→テキストファイルのインポート→ファイルの種類変更→全てのファイル→○○.csvのファイル指定→“,”の区切り選択、、ウィザードに従って変更し次へで進む→A1が指定されるのでそのまま完了→CSVがEXCELファイルに変換された。 参照したabc1.csvの名前に対して新しいabc1.xlsとなずけて登録する。これらの作業をMYドキュメントのhenkan ホルダーに入っているCSVファイルに同様に作業して同じくhenkan ホルダーに入れる。} 上記の{ }内の作業を何か,excelのVBAのマクロのようなもので実行することはできませんか。 やり方を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.8

もともと、CSVとはカンマ区切りのはずですから、そうではないということなら、このコードは、違っています。こういう質問系掲示板は、質問者が分らない部分をお助けするような形で出来上がるものだと思いますので、回答者の回答を最初から否定するような発言は控えていだきたいと思いました。なお、フォルダーの中を一気に変換してしまうようなコードは、必ず変換後の様子を確認してからでなくてはなりませんので、それを確認していただくつもりでした。 私自身は、ここのカテゴリで、私は、一ゲンではありませんので、後々のためにコードを掲示しておきます。以下は、私が考えていたコードであって、その処理後の状態を保証するものではありません。 '<標準モジュール推奨> Sub DirectryCSV2XLS()   Dim myCSVFnames() As String   Dim myCSVFname As String   Dim xlFileName As String   Dim i As Long   Dim j As Long   Dim n As Variant   Dim msg As String '=====================================   '以下 フォルダー要設定   Const MY_FOLDER As String = ""C:\Documents and Settings\<User>\My Documents\" '=====================================   If Left$(MY_FOLDER, 1) <> "\" Then MsgBox "フォルダーの設定の最後は、「\」が必要です。": Exit Sub   If Dir(MY_FOLDER, vbDirectory) = "" Then _    MsgBox "そのフォルダーは存在しません。", vbCritical: Exit Sub     myCSVFname = Dir(MY_FOLDER & "*.csv")   Do While myCSVFname <> ""    ReDim Preserve myCSVFnames(i)    myCSVFnames(i) = myCSVFname    i = i + 1    myCSVFname = Dir()   Loop   If i = 0 Then MsgBox MY_FOLDER & " には、CSVファイルが存在しません。", vbCritical: Exit Sub   Application.ScreenUpdating = False   Application.DisplayAlerts = False   For Each n In myCSVFnames    xlFileName = Mid$(n, 1, InStrRev(n, ".csv")) & ".xls"    If Dir(MY_FOLDER & "\" & xlFileName) = "" Then      With Workbooks.Open(MY_FOLDER & "\" & n, Format:=2)       .SaveAs MY_FOLDER & xlFileName       Workbooks(xlFileName).Close False       j = j + 1      End With    End If   Next n   Application.DisplayAlerts = True   Application.ScreenUpdating = True   If i <> j Then msg = "既に" & CStr(i - j) & "個のCSV ファイルは、XLSに変換されています。"   MsgBox i & "個のCSVの内、" & j & "個のファイルをXLSに変換しました。" & vbCrLf & msg End Sub

taktta
質問者

お礼

自分が何もわからないのに、便りすぎ失礼な発言申し訳ない、 回答にはとても感謝しています。

taktta
質問者

補足

4個ほど質問があります。Q(1)などで示す。 素人の質問でもうしわけないが、よろしくお願いします。 <標準モジュール推奨> Sub DirectryCSV2XLS()     '以下 フォルダー要設定   Const MY_FOLDER As String = ""C:\Documents and Settings\<User>\My Documents\" ---------------------------------------- Q(1)””の対応が、先頭2つ、最後1つは先頭1つが正しいのですか。  ""C:\Documents and Settings\<User>\My Documents\" ------------------------------------------   If Left$(MY_FOLDER, 1) <> "\" Then MsgBox "フォルダーの設定の最 ------------------------------------------------------ Q(2) Left$(MY_FOLDER, 1) <> "\" は、Right$ですね また次のif分のTHENの次の_は続いているという意味ですか。     For Each n In myCSVFnames Q(3)  In myCSVFnames 他のmyCSVFnamesは(i)が付いていてここは付いていないが、これはいいのですね。(私もいいと思いますが念のため)       If Dir(MY_FOLDER & "\" & xlFileName) = "" Then      With Workbooks.Open(MY_FOLDER & "\" & n, Format:=2)       .SaveAs MY_FOLDER & xlFileName   Q(4)Withというのは何ですか、     .SaveAs の前の.は何ですか。     

その他の回答 (8)

回答No.9

この質問は、昔から繰り返されてますね。 マクロにしてもVBAにしてもコーディングの手間が必要な為だと思われます。 自分で使う用途で作りましたが、使えるか試してみてください。 http://blog.labo-miya.com/rnote.php?u=prog/20060208.htm 機能  CSVファイルをドラック&ドロップすると、列をすべて文字型にしてExcelが開かれ、同名の.xlsファイルを作成します。  一括で処理は出来ませんが、やってる事は同じです。  Win2000+Excel2000でしか試してないので他の環境で動くかどうか?

参考URL:
http://blog.labo-miya.com/rnote.php?u=prog/20060208.htm
taktta
質問者

お礼

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

taktta
質問者

補足

私の利用の場合は、日付けらしきデータは日付けとして表現してもらわなくてはいけないのですが。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんにちは。Wendy02です。 >前よりやりにくくなりました。 >よく考えてみれば、ひとつずつ開いてXLSに変えて保存したほうがはやそうです。 そうですか。とても残念な対応の仕方です。どうぞ、ひとつずつ開いて変換してください。こちらは、手を引かせていただきます。

taktta
質問者

お礼

意味がわかりましたのでこの補足は削除します。

taktta
質問者

補足

ANo.8のコードの中で Then MsgBox "フォルダーの設定の最後は、「\」が必要です。": とある フォルダーの設定の最後という意味がどういうことなのかわかりません。 (フォルダ名なら記号¥はつけられないし、説明をお願いしたいのですが、よろしくお願いいたします。まだコードは実行していません。自分でまずコードの意味を理解したいと思います。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

#4のWendy02です。 >1列目に表示され、 すみません。コードが間違っていました。(^^; 真中辺りに、以下のようなコードがあります。  On Error GoTo NextStatus × With Workbooks.Open(fn) '間違い ↓ On Error GoTo NextStatus  With Workbooks.Open(fn, Format:=2) '正解 でした。 元のほうにも訂正いれておきましたので、恐れ入りますが、もう一度試してみていただけますか?

taktta
質問者

補足

今度はダイアログが,MYDOCのものがでてきて、前よりやりにくくなりました。 更にXLSの内容も、”.”カンマでくぎられているだけ。 よく考えてみれば、ひとつずつ開いてXLSに変えて保存したほうがはやそうです。 もともとめざしていたのは 、マクロを実行すれば自動的に同じフォルダのものが自動的に変換されることだが、このまくろはひとつずつ、操作者がクリックしないとだめです。

  • cockerel
  • ベストアンサー率46% (253/548)
回答No.5

>abc1.csvをExcelのアイコンに重ねるというのは、意味がよくわかりません。 >どういう画面状態でExcelプログラムはどういう状態でしょうか。 アプリケーション本体のアイコンもしくはショートカットにabc1.csvをドラッグして、abc1.csvをExcelで開くという意味です。 ファイルをデフォルトでリンクされていない特定アプリケーションで開くときの常套手段であるため、「Excelのアイコンに重ねる」と単純に書いてしまいました。たとえば、Word書類を一太郎で開く場合、html書類をエディタで開く場合、csvをWordで開く場合など(ほかいろいろ)に使用します。そのため、頻繁に使用するアプリケーションのショートカットのコレクションを作成しておきます。ショートカットを作成していないときには、エクスプローラ表示を使用すれば簡単にアプリケーションにアクセスできます。

taktta
質問者

補足

ショートカットというのはExcelのショートカットのことですか。 その場合、CSVをドラッグしても何もならなかった。 拡張子csvのEXCELへの関連付けでもするんですか。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。#2のWendy02です。 とりあえず、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1853661  または、 http://security.okwave.jp/kotaeru.php3?q=1853661 の#5 の私のコードを試していただけませんか? 一気にxls ファイルに変換しまいますので、とりあえず、数ファイル選んで、どのような上がりになるか調べてみてください。もし、そのまま使えれば、それに越したことはありません。 こちらは、「テキストファイルのインポート」を使用しておりませんので、もしかしたら、支障があるかもしれません。その場合は、新たに書き直します。

taktta
質問者

補足

コードを入れてためしてみました。マクロ起動後、CSVファイルを選択すると確かにXLSという名前のファイルが、対応してできますがその内容をみると、” 1:テキスト情報,MMM-MNT,010.010.xxx.xxx,tanashi,00:00:0e:fa:69:d3,,Text,9/26/2002 18:48というのが1列目に表示され、本来”,"の区切り毎に別列に表示したいのが、そのようになっていません。

回答No.3

マクロを使えばできます。 処理手順は次のようになります。 (1) Dir関数で指定したフォルダのCSVファイル名を取得する。 (2) Sheetをクリアする。 (3) CSVファイルを外部データの取込でSheetに取り込む。 (4) Sheetを名前を付けて保存する。(Excel形式で) (5) Dir関数で次のCSVファイル名を取得する。 (6) 次のCSVファイル名が取得できたら(2)に戻る。 (7) 処理終了

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 おっしゃっていることが、私の思っていることと合っていれば、マクロを作ってみます。たぶん、検索すれば出てくるのでしょうけれども、それが目的にかなったものかどうかは、判別できないと思います。 >→外部データの取り込み(D) >→テキストファイルのインポート これを使わなくてはならない理由があるわけですね。.csv ファイルをクリックして開いてしまうと、一部の数字などに自動変換機能があって、違うものになってしまうこと。 もう1つは、 >MYドキュメントのhenkan ホルダーに入っているCSVファイル は、かなり多くあること。 ということでしょうか?そういう理由なら、マクロはやむを得ないと思います。 なお、VBA Excel97 以降となりますが、Excel 97 には、機能的に足りない部分がありますので、それ以降のものとコードとは違いますので、私は、自信がありません。 それと、この場合は、OS のVersion とExcelのVersion は、明示したほうが作りやすいかもしれません。

taktta
質問者

補足

OS のVersion:w-2000 ExcelのVersion :Excel 2000 ファイル:毎月20個処理 自動でクリック一発でできれば、もし可能ならすごいこと。

  • cockerel
  • ベストアンサー率46% (253/548)
回答No.1

>VBAのマクロのようなもので実行することはできませんか 「VBAのマクロのようなもので実行」しなければならない理由がある場合には見当はずれの答えになってしまいますが、abc1.csvをExcelで開き、abc1.xlsで保存というだけであれば、abc1.csvをExcelのアイコンに重ね、ExcelのBookとして保存するだけでよいような気がします。

taktta
質問者

補足

abc1.csvをExcelのアイコンに重ねるというのは、意味がよくわかりません。 どういう画面状態でExcelプログラムはどういう状態でしょうか。

関連するQ&A