[[20091002234820]] 『同一フォルダ内のcsvファイルの数』(ゴンタ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『同一フォルダ内のcsvファイルの数』(ゴンタ)
 毎度お世話になってます
 マクロを書いているBookが入っているフォルダ内のcsvファイルの数を
 VBAで取得する方法を教えてください
 現在こんなふうに書いてます

 Sub coun()
 Dim cou As Long
    cou = Workbooks.Count(ThisWorkbook.Path & "\*.csv")
       MsgBox cou
 End Sub

 が、 コンパイルエラー:     引数の数が一致していません。または不正なプロパティを指定しています。

 となって、.Count の所が茶色になります
 正しい構文を教えてください  宜しくお願いします
     Windows XP   Excel2003 です
          (ゴンタ)

 Workbooks.Count は現在開いているEXCEL ファイル(Workbook)の数を示すプロパティで
 中に引数はとりません。

 いろいろな方法があると思いますが、マクロであれば Dir や FileSystemObject を使用
 してカウントするのが素直でしょうか。1例です。
 Sub coun()
    Dim cou As Long
    With CreateObject("Scripting.FileSystemObject")
       For Each ff In .GetFolder(ThisWorkbook.Path).Files
            If UCase(.GetExtensionName(ff.Path)) = "CSV" Then cou = cou + 1
       Next
    End With
    MsgBox cou
 End Sub
 (Mook)


 Mookさん
 おかげで希望していたファイル数がバッチリ取得できました。
 有難う御座いました
 CreateObject関数に関してはこの学校内でよく目にしていました
 CreateObject("Scripting.Dictionary") 等々
 が、その内容が 私にはさっぱり分かってません
 CreateObjectのヘルプを見ました
 CreateObject(class,[servername])で[servername]が省略可能なので今回の場合
 クラスが "Scripting.FileSystemObject" でこの時点ではPC内のすべてのファイル????
 しかし、この時点でどんな事が行われてるんでしょう????

 .GetFolder(ThisWorkbook.Path).Files でThisWorkbook.Pathのフォルダ内のファイルをGet????
 UCase(.GetExtensionName(ff.Path)) で拡張子 csvを大文字 CSV にする?なぜ????

 今回の件は解決ですが、せっかく教えて頂いたのに今の私には応用する事がまったく出来ません
 なんとか手の内に入れたいので色々調べて見ます。
 下記の事だけお教え願えませんでしょうか

 CreateObject("〜〜〜〜〜〜")
               ^^^^^^^^^^^^^ この部分は色々と種類が有るようですがどうやって調べてますか?

  Scripting.FileSystemObject    GetFolder      GetExtensionName はそれぞれどういう意味でしょうか?ヘルプに無いです

 拡張子を大文字にしているようですが、これは大文字 小文字が混在しても確実に数を数えるためでしょうか?

 Mookさんの お時間がある時でけっこうですので宜しくお願い致します
                                                                        (ゴンタ)

 >拡張子を大文字にしているようですが、これは大文字 小文字が混在しても確実に数を数えるためでしょうか?
 この点に関してはその通りです。

 オブジェクトに関しては CreateObject を調べるよりそれぞれのオブジェクト名に
 ついて調べたほうが良いでしょう。

 Scripting.FileSystemObject はもともと EXCEL 専用のオブジェクトではなく
 VBS、JavaScript(JScript) 等でも利用できるものです。

 ヘルプに関してはネットで探せばたくさんの使用例もありますし、MS の
http://msdn.microsoft.com/ja-jp/library/cc409798.aspx
 が全体を網羅したヘルプになるかと思います。

 オブジェクトは多数ありますが、私が EXCEL からよく使うのは他には
 Scripting.Dictionary(キーと項目の管理),
 ***.Application(*** は Word、Access、Outllook、InternetExplorer など)
 ADODB.Connection(Database接続)
 あたりでしょうか。

 ご参考までに。
 (Mook)

 http://msdn.microsoft.com/ja-jp/library/cc409798.aspxを開いて見てます

 ひぇ〜ッ$&#%*]?卍л△〆!!!!????!!!???
 と〜〜っても難しいです
 でも頑張って絶対ものにします!!
     Mookさん たいへん感謝です。有難う御座いました
               (ゴンタ)


 全体の量に圧倒されてしまったかもしれませんが、まずは プロパティあたりを見てください。
 そこにあるのが、FSO(FileSystemObject)で取得できる情報です。

 ファイルであれば、Size, Path,  DateLastModified あたりが良く使うところでしょうか。
 サンプルもあるので、中を見るとよいでしょう。

 そのうえで FSO には File と Folder オブジェクトがあることを理解できれば、
 今回のように
  .GetFolder(ThisWorkbook.Path)
 が Folder オブジェクトを示し
   .GetFolder(ThisWorkbook.Path).Files
 がその下にある File オブジェクトの集合であるのがわかるでしょう。

 For Each を使用してそれらを File オブジェクト ff として個々に処理しています。
 そうすれば、ファイルパス ff.Path から FSO の拡張子を取得するメソッドで
   .GetExtensionName(ff.Path)    
 取得していることも見えてくるかと思います。
 (Mook)

 老婆心ながら
 何処までを「ある程度」とするかは問題ですが
 ある程度は、呪文のように覚えておいて
 ある日突然「はっっ」と気付くのでも良いんじゃないかと思います。

 >と〜〜っても難しいです
 >でも頑張って絶対ものにします!!
 なんだか、読破しそうな勢いを感じるので。。。

 それよりも、やりたいことを出来るコードを探して
 見つけたときに、該当のページを見て正確に確認して
  ・・・その時に、一寸脇目も振ったりして・・・
 使うようにした方が効率的なんじゃないかと思います。

 辞書は単に読むだけよりも
 知りたい事について調べて読んだ時の方が、頭に入ると思います。

 こんな感じで探すと
http://www.google.co.jp/search?hl=ja&source=hp&q=%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB%E3%80%80VBA%E3%80%80%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E5%86%85%E3%80%80%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%95%B0&lr=&aq=f&oq=
 色々な方法が見つかると思います。

 (HANA)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.