• 締切済み

GetOpenFileNameでファイル名でのフィルタ

こんにちは, EXCEL2007 VBAを用いて ワークブックオープン時にファイル選択ダイアログを表示しています。  GetOpenFileName("日報ファイル(*.CSV),*.CSV",false) 上記は拡張子*.CSVでフィルタを掛けていますが、 ファイル名を絡めてフィルタを掛けることはできないのでしょうか? 日報ファイルなら*day.CSV,月報なら*month.CSVといった様に・・・  GetOpenFileName("日報ファイル(*day.CSV),*day.CSV",false) 上の様にすると*.*となりフィルタがかかりません。 ファイル選択ダイアログのファイル名のところに*day.CSVと手入力すれば フィルタがかかります。これをVBAから行えないでしょうか? よろしくお願いいたします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 私は、今の段階で、Excel 2007 をインストールすることできない(併用すると誤動作の恐れがあるから)ので、はっきりしたことは言えません。もう、これ以上は、実際に、2007 のVBA上で、やってみないとわかりません。 最終的にできるかどうかは、ファイルオープンダイアログで、手動で可能なのかどうか、ということに係っていると思うのです。これは、あくまでも、ファイルオープンダイアログだけの問題で、できなければ、UserForm など、他のものを使ったりして、それはそれで手段はあるのですが。

a1b2c3d4e5f6g7h8
質問者

お礼

お世話になります。 結局、上手くいきませんでしたのでファイル種別ごとにフォルダを 分けました。 メニュー(リボン)の操作なども変わっているので悪戦苦闘です。 長々とお付き合い有難うございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 ひとつだけ気になるのは、 Application.Dialogs(xlDialogOpen).Show("*day.csv") 一体、どのような、エラーが返るのでしょうか? Dim Ret As Variant Ret = Application.Dialogs(xlDialogOpen).Show("*day.csv") ではダメでしょうか? Dialogs Object (2007) ↓

参考URL:
http://msdn2.microsoft.com/en-us/library/bb223747.aspx
a1b2c3d4e5f6g7h8
質問者

補足

おつきあい&URLありがとうございます。 エラーが出るのではなく、オープンダイアログは表示されますがフィルターがセットされません。 "*day.csv"どころか"*.CSV","*.XLSなど通常のフィルタすらかかりませんでした。 (ダイアログのファイル種別はデフォルトで、ファイル名はブランクです) 戻り値を返す様にしても同様です。ちなみに実行時の戻り値は正常でした。(選択でTrue、キャンセルでFalse) もう少し悩んでみます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 フィルタを掛けるだけでよいなら、以下のようにすればよいです。  With Application.Dialogs(xlDialogOpen)    .Show "*day.csv"  End With

a1b2c3d4e5f6g7h8
質問者

お礼

ご回答ありがとうございます。 Application.Dialogs(xlDialogOpen).Show("*day.csv") ためしてみましたがだめでした。 ちなみにExcel2000で試すとちゃんとファイル名のところにセットされました。 普通に Application.Dialogs(xlDialogOpen).Show("*.csv") でやってもうまくいかないので2007固有の問題かな?

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

> GetOpenFileName("日報ファイル(*.CSV),*.CSV",false)  GetOpenFileName("日報ファイル(*.CSV),*.CSV",,,,false) ではないでしょうか。

a1b2c3d4e5f6g7h8
質問者

お礼

ご返答ありがとうございます。 この関数のパラメータは省略しても大丈夫な様です。 Application.GetOpenFileName("日報ファイル(*day.CSV),*day.CSV",,,,false) (Applocationが抜けてました。すみません。) 念のため試してみましたがやはりだめでした。

関連するQ&A

  • EXCELでダイアログボックスを開く時表示ファイル名を指定したい

    Openfilenameでファイルを選択するような機能をEXCELのVBAで作っています。 表示するファイルの種類までは、指定の仕方がわかるのですが、 特定のファイル名のものを表示したい時のVBAの記述方法を教えてください。 下記は、作っているプログラムの抜粋なのですが、 これだと、全部のcvsファイルが表示されます。 このCSVファイルで、ファイル名が、*XXX.csvのものをダイアログボックスに表示したいです。 Dim File_list As Variant Dim Book As Workbook Dim j As Integer File_list = Application.getopenfilename(".csvfile(*csv),*.csv") If File_list = False Then Exit Sub Application.EnableEvents = False Set Book = Workbooks.Open(File_list)

  • エクセルでCSVファイルをユーザーに選択させたい

    エクセルVBAで、特定のフォルダ(C:\Data)に入っているCSVファイルをユーザーに選択させたいのです。 ただ、その際、選択肢に表示させるファイルに、例えば”企画“という文字列があることを条件にしたいのです。 組み込みダイアログであれば OpenFileName = Application.Dialogs(xlDialogOpen).Show("C:\Data\*企画*.csv") で大丈夫だと思います。 しかし、組み込みダイアログでは実際にそのファイルがエクセルで開かれてしまい、先頭の数字の0が消える等の不都合が起きてしまいます。 そのため、ファイルは指定させますが実際には開かずファイル名だけを取得する Application.GetOpenFilenameを使おうと思いました。 これでファイル名さえ所得できればあとは外部データの取り込みでCSVデータを取得できます。 ところが、 OpenFileName = Application.GetOpenFilename("C:\Data\*企画*.csv") はエラーになってしまいます。ネットで検索すると、Application.GetOpenFilenameではファイル名にワイルドカードは使えないようです。 このような場合、どのような方法をとればよいでしょうか?

  • VBAでファイルOPEN ダイアログを使用したいです

    現在、指定したファイルを開くVBAを書いているのですが、 ↓こんなの ----------------------------------------------------------- Dim vntFileName As Variant 'ファイルを開くダイアログを開きます vntFileName = _ Application.GetOpenFilename( _ FileFilter:="エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" _ , FilterIndex:=1 _ , Title:="開けゴマ" _ , MultiSelect:=False _ ) 'ファイルが選択されているときは '選択したファイルをWorkbooks.Openメソッドで開きます If vntFileName <> False Then Workbooks.Open Filename:=vntFileName End If ---------------------------------------------------------------- あらかじめ開くディレクトリを、ネットワーク上のフォルダに指定したいのですが、どこにパスを書いたらいいのか、わかりません。 教えていただけますでしょうか。

  • エクセル2003 GetOpenFilenameで呼び出される階層について

    エクセル2003VBAでGetOpenFilenameを使って ファイルを選択してその後の処理に用いてます。 質問なのですが GetOpenFilenameで呼び出されてくるフォルダの階層 がカレントフォルダだったと何処かで読んだ記憶があったので カレントフォルダをchdirを持ちいて必要なフォルダを呼び出せるよう しているのですが、呼び出したい階層のフォルダがネットワークに つながっているPC(サーバー機)の場合、どうしても欲しい階層が 呼び出せないのですが、どのようにしたらよいのでしょうか? また、GetOpenFilenameで呼び出されるダイアログの動きなどを 追跡(調べる方法)などあるのでしょうか? ご教授のほど宜しくお願いいたします。

  • ファイル名をシートに張り付けるには?

    今朝、質問し、ご回答をいただいたのですが、 それを試してみても、うまく動いてくれません・・・。 下記を用いて、ダイアログから選択したテキストファイル をシートに張り付けていくよう(外部データのインポート)に マクロを組んだんですけど、これを利用して、ついでにその選んだ テキストファイル名(拡張子なし)を 任意のセル(たとえばD2)に張り付けるにはどうしたらいいんでしょか? 当方、エクセル2000です。 Application.ScreenUpdatingやGetBaseNameを使っても うまくいきません。 Sub Macro1() fileToOpen = Application _ .GetOpenFilename("テキストファイル (*.txt), *.txt") If fileToOpen <> False Then With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & fileToOpen, Destination:=Range("B11"))

  • Excel VBA:ダイアログを使ってファイル名を取得したい

    ファイルを開く際に、GetOpenFilenameを使用し、以下のように記述しています。 Dim sFName As String Dim sPath As String sPath = ThisWorkbook.Path & "\データフォルダ" ChDir sPath sFName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", MultiSelect:=False) このとき、win98ですと、指定したフォルダが表示されますが、 win2000やXPですと、Excelのカレントフォルダが表示されます。 ダイアログ表示したときに、任意のフォルダを表示させるには、どのようにしたらよいですか? ご回答よろしくお願いします。

  • EXCELで複数のファイルを同じブック内で開きたい

    久しぶりにVBAを使用してやらせたいことがありますので、質問です。 複数のCSVファイルがあり、これを同じブック内のシートとして開くことは 出来ますでしょうか。 メニューから開くとして、それぞれのファイルを開くと、別々のブックにて開いてしまいます。 これを同じブックで、シート別に開かせたいのですが、出来ますでしょうか。 さらに、これをVBAでやりたいと考えております。 まず考えたのは、 ”Application.GetOpenFilename”です。 ただし、これを利用すると、別々のブックでしか開くことができませんでした。 次に考えたのが、”QueryTables.Add”を利用することです。 これだと、同一ファイル、同一シート内にデータを取り込むことができるので、 問題ないのですが、ファイル名を指定しなければなりません。 ファイルが変わるたびにVBAでパスを修正するのは大変ですので、 ”QueryTables.Add”のデータ取り込みでファイル選択ダイアログが開くような コードがあればよいと考えております。 ファイル選択のダイアログが開いて、そのファイルのパスが取得できるような コードにすれば、”QueryTables.Add”にてデータの取り込みができそうなのですが、 どうすればよいか思いつきません。 "Dialogs(wdDialogFileFind)"というものも見つけたのですが、うまくいきませんでした。 何か良い方法がありますでしょうか。 よろしくお願いします。 Dialogs(wdDialogFileFind)

  • ExcelのVBAでフォルダ名の取得

    お世話になります。 タイトルのままなんですが、 VBAでフォルダのフルパスを取得したいのですが出来るでしょうか? ファイルのフルパスは FN = Application.GetOpenFilename で取得出来たのですが 同じ様に ダイアログから選択する様に出来るでしょうか?

  • VisioのVBAでユーザにファイルを選択させる方法

    Visio 2003のVBAについてお伺いします。 ユーザに1または複数のファイルを選択させるためのダイアログを表示させたいのですが、どうやればよいのか分からなくて困っております。コマンドを教えて頂ければ幸いです。 ちなみに、VisioのVBAでは、ExcelにあるGetOpenFilenameコマンドがサポートされておりません。GetOpenFilenameコマンドと同様な機能を有するVisioのコマンドがあれば、それを教えてください。 よろしくお願い致します。

  • 複数のCSVファイルを自動でエクセルに変換したい

    フォルダの中に、300近いCSVフォルダがあります。 ネットで探したマクロVBAでやってみたところ、一つのCSVファイルを選び、それをエクセルファイルに変換できました。 このマクロを使って、フォルダ内にあるすべてのCSVファイルを一気にエクセルに変換するには、どうしたらいいのでしょうか。 ご教授のほど、よろしくお願いいたします。 Sub CSVからXLSX() Dim varFileName As Variant varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _ Title:="CSVファイルの選択") If varFileName = False Then Exit Sub End If Workbooks.Open Filename:=varFileName ActiveSheet.Cells.Copy ThisWorkbook.ActiveSheet.Cells ActiveWorkbook.Close SaveChanges:=False End Sub

専門家に質問してみよう