プロが教えるわが家の防犯対策術!

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

A 回答 (9件)

もともと、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

この回答への補足

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 の前の.は何ですか。  

  

補足日時:2006/02/03 11:09
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/02/03 09:25

この質問は、昔から繰り返されてますね。


マクロにしてもVBAにしてもコーディングの手間が必要な為だと思われます。

自分で使う用途で作りましたが、使えるか試してみてください。

http://blog.labo-miya.com/rnote.php?u=prog/20060 …

機能
 CSVファイルをドラック&ドロップすると、列をすべて文字型にしてExcelが開かれ、同名の.xlsファイルを作成します。
 一括で処理は出来ませんが、やってる事は同じです。

 Win2000+Excel2000でしか試してないので他の環境で動くかどうか?

参考URL:http://blog.labo-miya.com/rnote.php?u=prog/20060 …

この回答への補足

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

補足日時:2006/02/09 15:59
    • good
    • 2
この回答へのお礼

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

お礼日時:2006/02/09 16:02

こんにちは。

Wendy02です。

>前よりやりにくくなりました。
>よく考えてみれば、ひとつずつ開いてXLSに変えて保存したほうがはやそうです。

そうですか。とても残念な対応の仕方です。どうぞ、ひとつずつ開いて変換してください。こちらは、手を引かせていただきます。

この回答への補足

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

補足日時:2006/02/03 09:30
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/02/03 12:52

#4のWendy02です。



>1列目に表示され、
すみません。コードが間違っていました。(^^;

真中辺りに、以下のようなコードがあります。
 On Error GoTo NextStatus
× With Workbooks.Open(fn) '間違い


On Error GoTo NextStatus
 With Workbooks.Open(fn, Format:=2) '正解

でした。

元のほうにも訂正いれておきましたので、恐れ入りますが、もう一度試してみていただけますか?

この回答への補足

今度はダイアログが,MYDOCのものがでてきて、前よりやりにくくなりました。
更にXLSの内容も、”.”カンマでくぎられているだけ。
よく考えてみれば、ひとつずつ開いてXLSに変えて保存したほうがはやそうです。

もともとめざしていたのは 、マクロを実行すれば自動的に同じフォルダのものが自動的に変換されることだが、このまくろはひとつずつ、操作者がクリックしないとだめです。

補足日時:2006/02/02 17:23
    • good
    • 1

>abc1.csvをExcelのアイコンに重ねるというのは、意味がよくわかりません。


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

この回答への補足

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

補足日時:2006/02/03 09:26
    • good
    • 0

こんにちは。

#2のWendy02です。

とりあえず、
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1853661
 または、
http://security.okwave.jp/kotaeru.php3?q=1853661

の#5 の私のコードを試していただけませんか?
一気にxls ファイルに変換しまいますので、とりあえず、数ファイル選んで、どのような上がりになるか調べてみてください。もし、そのまま使えれば、それに越したことはありません。

こちらは、「テキストファイルのインポート」を使用しておりませんので、もしかしたら、支障があるかもしれません。その場合は、新たに書き直します。

この回答への補足

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

補足日時:2006/02/01 14:14
    • good
    • 0

マクロを使えばできます。


処理手順は次のようになります。

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

こんばんは。



おっしゃっていることが、私の思っていることと合っていれば、マクロを作ってみます。たぶん、検索すれば出てくるのでしょうけれども、それが目的にかなったものかどうかは、判別できないと思います。

>→外部データの取り込み(D)
>→テキストファイルのインポート

これを使わなくてはならない理由があるわけですね。.csv ファイルをクリックして開いてしまうと、一部の数字などに自動変換機能があって、違うものになってしまうこと。

もう1つは、

>MYドキュメントのhenkan ホルダーに入っているCSVファイル
は、かなり多くあること。

ということでしょうか?そういう理由なら、マクロはやむを得ないと思います。

なお、VBA Excel97 以降となりますが、Excel 97 には、機能的に足りない部分がありますので、それ以降のものとコードとは違いますので、私は、自信がありません。

それと、この場合は、OS のVersion とExcelのVersion は、明示したほうが作りやすいかもしれません。

この回答への補足

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

補足日時:2006/01/26 09:31
    • good
    • 0

>VBAのマクロのようなもので実行することはできませんか


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

この回答への補足

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

補足日時:2006/01/26 09:30
    • good
    • 0

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