[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Excel2016forMacでDir関数を使ってフォルダ内検索をしたいです』(かえる)
Sub ddd()
Dim Pt As String Dim Buf As String
Pt = ThisWorkbook.Path Buf = Dir(Pt & "/" & "*.xlsx") MsgBox Buf End Sub
上記のコードで実行してもMsgBoxには何も表示されません。
同じフォルダ内に100以上の。.xlsxファイルが存在します。
Excel2016ではMacでもDir関数を使えると思うのですが、何が間違っているのでしょうか?
MsgBox Pt にするとパス自体は表示されます。
Mac使いの方が居られましたらご教示願います。
< 使用 Excel:Excel2016mac、使用 OS:unknown >
Mac使いではありませんが、ググったらこんな情報がありました。 http://neos21.hatenablog.com/entry/2019/01/20/080000
2016でも、いろいろ制約がありそうです。
リンク先を参考にして、 Buf = Dir(ThisWorkbook.Path, MacID("XLSX")) とかしたら、どうなりますかね? (´・ω・`) 2019/09/09(月) 17:23
回答ではありませんが 試していただきたいこととして
MsgBox ThisWorkbook.FullName
をコードのどこかに入れて実行し、結果を教えてください
(渡辺ひかる) 2019/09/09(月) 17:31
(´・ω・`)さん 返信ありがとうございます。リンク先は後で読んでみます。
差し当たって教えていただいた
Buf = Dir(ThisWorkbook.Path, MacID("XLSX"))
を試してみましたが。「プロシージャの呼び出し、または引数が無効です。」
というエラーが出てしまいました。
(かえる) 2019/09/09(月) 18:12
(渡辺ひかる)さん
MsgBox ThisWorkbook.FullName
を実行してみましたが、上記のPtに**.xlsxが追加されただけでした。
区切りは「/」でした
(かえる) 2019/09/09(月) 18:15
(´・ω・`)さんに貼って頂いたURLに書いてある「vbDirectory」も試してみましたが、こっちはエラーではなく空白が返ってるようです。
やっぱりMacだと「*」や「?」のようなワイルドカードは使えないんでしょうか?職場ではWindowsで、最近、VBAの勉強の為に自宅のMacにExcelを導入したので、出来る限り同じコードを書きたいのですが、やはり大分違うんですね
(かえる) 2019/09/09(月) 18:20
Mac版のインターフェイスに慣れてなくて色々すみません。
(かえる) 2019/09/09(月) 18:23
CTRLキーがCommandキーだったりとか、基本がWindowsと全然違うので、最初は違和感バリバリですが、試行錯誤して慣れてください。(そして、ここもそうですが、日本はWindows版Excelが普及しているので、Mac版は情報が少なかったりするので、英語ページも探さないといけなくなる…)
(???) 2019/09/09(月) 18:47
Sub text()
Dim i As Long Dim Buf As String Const Pt As String = "/Users/kaeru/Documents/Excel練習/examfile1 "
Range("A1").Value = "パス" Range("B1").Value = "ブック" Buf = Dir(Pt, vbDirectory) 'MsgBox Buf Do While Buf <> "" i = i + 1 Cells(i + 1, 1).Value = Pt Cells(i + 1, 2).Value = Buf Buf = Dir(Pt, vbDirectory) Loop End Sub
の様にThisWorkBookではなく他のブックからパスをしていしようとするとまた空白が返ってきます。
パスは開きたいフォルダ内のブックからBVEで「Debug.Print ThisWorkBook.Path」で意味ディエイトウィンドウからコピペしてるのであってるはずなのですが、コメントアウトしてる部分でMsgBoxで見ても空白が返っています。でもエラーにはならないです。
(かえる) 2019/09/09(月) 18:51
(???)さん なるほど。もう10年以上Macを使ってますが、ほとんどファイルの拡張子とかも気にした事がなかったので勉強になります。MacID(“XLSX”)ではなぜか取得出来なかったのに、vbDirectoryでは取得出来るっていうのもちょっと理解出来ない部分なのですが。
やはりMac版は情報が少ないですよね。そりゃ、エクセル使うならWindowsを使えよって話ですもんね笑。
Googleで「Mac VBA 2016 ファイル取得」とかでググってたのですが、中々めぼしい記事に出会えませんでした。
色々、試行錯誤してみます!ありがとうございます!
(かえる) 2019/09/09(月) 18:56
>区切りは「/」でした Macは : だと思ったのですがね...
試しに / の代わりに Application.PathSeparator を使用するとどうなりますか? (seiya) 2019/09/09(月) 19:25
(seiya)さん イミディエイトウィンドウに
Print(Application.GetOpenFileName)
と入力して上記のファイルを開いても同じです。区切りは「/」ですね
2016から「:」の代わりに「/」になった様です。
(かえる) 2019/09/09(月) 20:07
そうでしたか...関係なかったですね。 失礼しました。 (seiya) 2019/09/09(月) 20:27
しかし、問題は二回目のBuf=Dir(Pt,vbDirectory)でも同一のファイルしか読み込まないので
延々と処理を続けてしまう事でした。
どうやらマックで一つのフォルダ内の全てのファイルを取得するのは不可能な様です。
ほぼそれの為に導入したのに、完璧に無駄な出費でした。
MacIDの方はやっぱり実行時エラー5で引数が無効との事なので使えないです。無念
(かえる) 2019/09/10(火) 07:47
>MacIDの方はやっぱり実行時エラー5で引数が無効との事なので使えないです。 https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/macid-function
とか見ると、Excelファイルを探すときは、"XLS5" と書いてあるので、 Windowsでの拡張子とはちょっと違うのかもしれないですね。
(´・ω・`) 2019/09/10(火) 09:02
(´・ω・`) さん
"XLS5"で書いてみましたが同じエラーが出ました!アプリケーションシグネチャというヤツを
ググってみたのですが、ネット上に一覧の様な物はないと思われます。
Mac使いの方はどうやって調べてるんでしょうね?書籍であるのかな?
(かえる) 2019/09/10(火) 16:50
さらにググってみました
https://stackoverflow.com/questions/13292376/what-are-macid-filetypes-in-excel-vba
これを読むと
Macで mdlsコマンド使うと、ファイルのメタデータがみれるよ メタデータの kMDItemFSTypeCode がファイルの種類だよ
と書いてありますが、その後の回答では
Macで作ったファイルには正しくセットされるけど、PCで作ったファイルだと空だよ ということで、使えないというのがファイナルアンサーですね (´・ω・`) 2019/09/10(火) 17:10
(´・ω・`) さん
申し訳ないです。英語はからっきしなのでリンク先の情報は全く解りません。申し訳ない
mdlsコマンドというのはターミナル(Windowsでいうコマンドプロンプト)から入力する感じなんですかね?ターミナルもほとんど触った事が無いので、本当に素人ですみません。
多分、Windowsとのデータのやり取りはしないので大丈夫だと思います!
ファイルの検索とか取得って色んな場面で使うであろう事が出来ないって困りものですね
(かえる) 2019/09/10(火) 17:28
Windowsみたいに、禁止されているところ以外はどこでも見られる、というのとは真逆なんです。 自分の割り当てられたところしか見られない。
ちなみに、本当にやりたいファイル名の並べ替えに関しては、DictionaryはWindows固有の.NETのオブジェクトなので、Macじゃ使えませんよ。 数字部分だけ抜き出して、前ゼロつけて並び替えるとか、ソートロジックを自分で書くとかしないとです。 または、Macはスクリプト(AppleScript)が強力なので、フォルダの一覧から並び替えまでスクリプトで実施させてファイルに出力させておき、結果テキストを読むようにするとか。
(???) 2019/09/10(火) 17:49
(???)さん
フォルダはExcel用に作った普通のフォルダです。Excelの保存も出来ますし、一応
Dir("パス名",vbDirectory")で最初のファイルは読み込めます。
やっぱりMacでExcelのVBAをいじるのが間違いなんですかね?
Dictionaryも無理なんですね。職場のWindowsで使える様にVBAを勉強しているので、Macでしか使えないコードを勉強するのも何だかなって感じです。
AppleScriptはちょっと調べてみたらフォルダ内検索も出来そうですね。便利ではあるんですが、あまりにWindowsのVBAとはかけ離れてますね。それぞれ別で勉強しないとダメぽいですね
Mac上でVBAを使える事にメリットがあるのは解るんですが、自宅に導入してラーニングコストが倍になった感じが否めないのが残念です。
(かえる) 2019/09/10(火) 18:00
MacではDir関数がまともに機能しないようですね。
http://neos21.hatenablog.com/entry/2019/01/21/080000
(seiya) 2019/09/10(火) 18:55
そうみたいですね。やっぱりAppleSprictを使って処理するしか無いみたいです。
Windowsと共通でないやり方はちょっと今は避けたいので保留中です
(かえる) 2019/09/10(火) 19:41
目的は、職場のWindowsで使うことで
そのための勉強で、自宅のMacを利用しているだけですよね。
今回の件に関してなら、Winsowsでは、DirかFSOを使って
他の方法なんて考ないと思うのですが…
WindowsとMac共通で使える他の方法があっても
職場でその方法を使う意味ありますか?
(マナ) 2019/09/10(火) 20:21
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.