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

はじめまして。ken-zieです

エクセル2003でVBにチャレンジし始めたんですが

ブックの新規作成
   ↓
文字入力
   ↓
文字や、パターン等の書式設定

までは何とかできたのですが、
その後セルC7から下にネットワークドライブにある
フォルダの中身のjpgファイルを拡張子込みの形式で
取得して表示したいと考えています。
が!ここで詰まってしまいました。
だれかご教授願いたいと思います。

できたらダイアログを使用してフォルダの中のjpgを
一括で取得できたらいいなぁ~と思っています。
よろしくお願いします。

A 回答 (2件)

こんにちは。

KenKen_SP です。

Dir関数とかFileSearchオブジェクトでファイル検索します。

参考: http://oshiete1.goo.ne.jp/kotaeru.php3?q=1744224

上記URL の Wendy02さんのものが参考になります。下記は Wendy02 さんのものを
ちょこちょこっとカスタマイズしたものです。

フォルダ選択ダイアログについて、ネットワークドライブが想定される場合、下記
のコードはやや物足りないかもしれません。別の方法もありますが、コードが長く
なるので、、まずは下記でどんな感じか試してみて下さい。


Sub SampleMacro()

  Dim myFolder   As Object
  Dim myFolderItem As String
  Dim i      As Long
  Dim lngR     As Long
  
  'フォルダ選択ダイアログ表示(以下はCドライブ以下の設定です)
  Set myFolder = CreateObject("Shell.Application"). _
    BrowseForFolder(0, "フォルダを選択してください", 0, "C:\")
  If Not myFolder Is Nothing Then
    myFolderItem = myFolder.Items.Item.Path
  Else
    Exit Sub
  End If
  
  'FileSearch オブジェクトでファイル検索
  With Application.FileSearch
    .LookIn = myFolderItem
    .Filename = "*.jpg" '<-----検索ファイル名(ワイルドカード可)
    If .Execute > 0 Then
      
      '該当ファイルが見つかった場合の処理
      lngR = 7 '7行目から
      For i = 1 To .FoundFiles.Count
        '↓↓↓ この間に処理を書く ↓↓↓
        Sheets("Sheet1").Cells(lngR, "C").Value = .FoundFiles(i)
        lngR = lngR + 1
        If lngR = 65537 Then
          MsgBox "最大行数に達しましたので終了します"
          Exit For
        End If
        '↑↑↑ ここまで ↑↑↑
      Next i
      
    Else
      '該当ファイルが見つからない場合
      MsgBox "該当ファイルはありません"
    End If
  End With
  Set myFolder = Nothing

End Sub
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます!

ネットワークドライブなんですが、c:\の記述を
\:\としてみたらデスクトップから指定していかなければならないけど、なんとかできました(これって問題ありますか?)

あとはパス名表示を「ファイル名.拡張子」だけで
表示したいのです。
もしよかったらおしえてもらえますか?

お礼日時:2006/02/07 09:00

> あとはパス名表示を「ファイル名.拡張子」だけで


> 表示したいのです。

パスは Left、Mid、Right 関数辺りで分割できます。パスセパレータ
の¥記号の位置で切り取ってやります。¥記号の位置を調べるには
EXCEL2000 以降に限定されますが、InStrRev 関数を使うと簡単です。

#1 の次の部分を修正して下さい。

---------------------------------------------------------------
Sheets("Sheet1").Cells(lngR, "C").Value = .FoundFiles(i)

   ↓↓↓

Sheets("Sheet1").Cells(lngR, "C").Value = _
   Mid$(.FoundFiles(i), InStrRev(.FoundFiles(i), "\") + 1)
---------------------------------------------------------------


> ネットワークドライブなんですが...(これって問題ありますか?)

使ってみて不具合がなければ大丈夫だと思います。

ただ、ネットワークドライブに割り当てられるドライブレターは PC
により異なる場合がありますよね?

会社などで複数の PC で使うものをコーディングする場合、この相違が
トラブルの原因になる場合があります。ある PC では大丈夫なのに、あ
る PC では「ファイルやフォルダが見つかりません」といったエラーに
なるかも知れないということです。

特別な理由がないなら UNC を使った方がいいと思います。


【参考:UNC 】IT用語辞典 e-Words
http://e-words.jp/w/UNC.html
【参考:ドライブレター】IT用語辞典 e-Words
http://e-words.jp/w/E38389E383A9E382A4E38396E383 …
【参考:ネットワークドライブ】IT用語辞典 e-Words
http://e-words.jp/w/E3838DE38383E38388E383AFE383 …


> c:\の記述を\:\

ネットワークドライブなら Z:\ などのように割り当てたドライブを
指定します。UNC で指定するなら例えば、ネットワーク名が Server1
の PC なら

\\Server1\

のように指定します。Server1 上の共有フォルダを指定するなら

\\Server1\(共有フォルダ名)

です。

------------------------------------------------------------
以下は余談というか今後の参考話です。

BrowseForFolder(0, "フォルダを選択してください", 0, "ルートフォルダパス")

でルートフォルダに空または無効なパスを指定するとデスクトップが
ルートフォルダに設定されます。

フォルダ選択ダイアログの表示方法ですが、#1の方法の良いところは
コードが簡単なことですね。ただ、前回選択したフォルダを覚えてく
れないとか、、階層が深いフォルダだと面倒です。これを解決するに
は、「フォルダ選択ダイアログ」で WEB 検索するとサンプルが多く
ありますので、調べてみて下さい。

このサイトでは、下記スレッドが参考になると思います。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1449156


あと、今回は簡単にやってしまいましたが、FileSearch オブジェクト
はファイル検索に大変便利なのですが、多少不安定な面があるんです。

「FileSearch 不安定」などで WEB 検索してみて下さい。

絶対確実に、、というのであれば Dir 関数 でファイル検索した方が
いいかも知れません。

では。
    • good
    • 0
この回答へのお礼

KenKen_SPさん大変ありがとうございます!
当面はこの形式で問題なさそうなのでOKとします^^

今後の参考まで載せていただいてほんとありがとです!
これからもっと勉強したいとおもいます

ありがとうございました

お礼日時:2006/02/07 17:46

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