Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5327 / 13644 ツリー ←次へ | 前へ→

【51453】dir関数でワイルドカードを使用した検索結果 初級者 07/9/19(水) 3:14 質問[未読]
【51454】Re:dir関数でワイルドカードを使用した検索... ichinose 07/9/19(水) 7:44 発言[未読]
【51463】Re:dir関数でワイルドカードを使用した検索... 初級者 07/9/20(木) 1:30 お礼[未読]
【51473】Re:dir関数でワイルドカードを使用した検索... yhar 07/9/20(木) 12:41 発言[未読]

【51453】dir関数でワイルドカードを使用した検索...
質問  初級者  - 07/9/19(水) 3:14 -

引用なし
パスワード
   dir関数でワイルドカードを使用してファイルを検索しているのですが、
思った結果が得られません。アドバイスを頂けないでしょうか?


下記のソース(抜粋して掲示板用に修正しています)では
ワイルドカードで6文字指定して、あとは拡張子、としている
つもりんなんですけど、
 "FILENAME"_2.gif  ※FILENAMEは任意の文字列
とかが検索されます。

記述が悪いのか、dir関数や、ワイルドカードの仕様が
わかっていないのか、誰か教えてもらえませんか?


'FILE_PATH:ファイルのパス
'FILE_NAME:ファイルの名前
Dim strHoge as string
Dim strName as string

'"yymmdd.*"を検索
strHoge = FILE_PATH & "\" & FILE_NAME & "_??????.*"
strName = Dir(strHoge, vbNormal + vbReadOnly + vbHidden + vbSystem)
Do Until strName = ""
  MsgBox = strName
  '次のファイルを検索
  strName = Dir
Loop

【51454】Re:dir関数でワイルドカードを使用した検...
発言  ichinose  - 07/9/19(水) 7:44 -

引用なし
パスワード
   ▼初級者 さん:
おはようございます。

>dir関数でワイルドカードを使用してファイルを検索しているのですが、
>思った結果が得られません。アドバイスを頂けないでしょうか?

めったにDir関数は使わないのですが(というかDir関数を使うような仕様のプログラムがあまりない、極たまに使う場合は FSOですねえ)、
いくつか問題がありそうですねえ!!


>
>
>下記のソース(抜粋して掲示板用に修正しています)では
>ワイルドカードで6文字指定して、あとは拡張子、としている
>つもりんなんですけど、
> "FILENAME"_2.gif  ※FILENAMEは任意の文字列
>とかが検索されます。
>
>記述が悪いのか、dir関数や、ワイルドカードの仕様が
>わかっていないのか、誰か教えてもらえませんか?
>
>
>'FILE_PATH:ファイルのパス
>'FILE_NAME:ファイルの名前
>Dim strHoge as string
>Dim strName as string
Dim fso As Object
Set fso = CreateObject("scripting.filesystemobject")

>'"yymmdd.*"を検索
>strHoge = FILE_PATH & "\" & FILE_NAME & "_??????.*"
>strName = Dir(strHoge, vbNormal + vbReadOnly + vbHidden + vbSystem)
>Do Until strName = ""
>  MsgBox = strName
   Debug.Print fso.getfile(FILE_PATH & "\" & strname).shortname
'本当は↑このショートネームで比較しているのでは??
'きちんと検証してませんが、調べてみてください
>  '次のファイルを検索
>  strName = Dir
>Loop

Dir関数では、dir("d:\xxxx\yyy\*.*")
のように全てのファイル名を取得し、
これをLike演算子で比較してみては??
いかがですか?

【51463】Re:dir関数でワイルドカードを使用した検...
お礼  初級者  - 07/9/20(木) 1:30 -

引用なし
パスワード
   ▼ichinose さん:
アドバイスありがとうございます。

>Dir関数では、dir("d:\xxxx\yyy\*.*")
>のように全てのファイル名を取得し、
>これをLike演算子で比較してみては??
>いかがですか?

いろいろ試して原因追求をしようとは思ったんですが、
時間的な制約もあり、上記のアドバイスを頂戴しました♪
(shortnameが原因ではなさそうでした)

Likeで比較する際も、dir関数のときも、
ワイルドカードの使い方は同じはずなんですが、
Likeは期待通りなのに、Dirは・・・。

とにかく助かりました。
ichinose さん、ありがとうございましたm(_ _)m

【51473】Re:dir関数でワイルドカードを使用した検...
発言  yhar  - 07/9/20(木) 12:41 -

引用なし
パスワード
   初級者さん

以前、ここで助けて頂いて何とか書き上げたコードです。多分似たようなことをしたいのではとご参考までに書かせていただきます。
変数FileNamに YYMMDD*.CSV と言う頭6文字は年月日で「*」の部分はワイルドカードのファイル名を代入して「ファイルを開く」が自動実行されたときに指定のディレクトリ内で年月日と頭の6文字が一致するファイルのみをダイアログに表示すると言うコードです。
稚拙ですがご参考まで…
以下プログラムの写し===================================================
FPath = Selection.Text '選択したセルで開くCSVファイルのある場所を指定している。

'↓データファイルの置いてある場所を指定する。
CreateObject("WScript.Shell").CurrentDirectory = FPath  'ChDir ではうまく動作しないのでこれを使う。
SendKeys FileNam
SendKeys "{TAB}"

MyType = "csv ファイル (*.csv), *.csv"

FName = Application.GetOpenFilename(FileFilter:=MyType, MultiSelect:=True)

If VarType(FName) = 8204 Then GoTo 正常処理   'ファイルが選択されている時の関数 VarType(FName)の戻り値は「8204」となるので…
  If FName = False Then
    MsgBox ("ファイルが選択されなかったので、何もしません。")
    Exit Sub
  End If

正常処理:
=================================================

5327 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free