こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルで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ではファイル名にワイルドカードは使えないようです。
このような場合、どのような方法をとればよいでしょうか?

投稿日時 - 2018-10-28 22:06:50

QNo.9552254

困ってます

質問者が選んだベストアンサー

複数のファイルを選択しないという条件なら

Sub Sample5()
 Dim FD As FileDialog
 Set FD = Application.FileDialog(msoFileDialogOpen)
    
 With FD
  .InitialFileName = "C:\Data\*企画*"
 
  If .Show = True Then
   MsgBox (.SelectedItems(1))
   '.Execute
  Else
    MsgBox "キャンセルされました"
  End If
 End With
End Sub

といったコードはいかがでしょうか。

投稿日時 - 2018-10-29 00:43:45

お礼

Application.FileDialog(msoFileDialogOpen)は初めて知りました!
これは簡単で便利ですね!
これを使わせていただきます。
ありがとうございました。

投稿日時 - 2018-10-29 14:41:13

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>このような場合、どのような方法をとればよいでしょうか?
ユーザーフォームに
リストボックス~1個
コマンドボタン~1個を設けて
リストボックスにファイルの一覧を書き出し選択してみては
-標準モジュール-
Sub Test()
  'ユーザーフォームを起動
  UserForm1.Show
End Sub
-ユーザーフォームモジュール-
Private Sub UserForm_Initialize()
  Dim Files As String
  Files = Dir("D:\Data\*企画*.csv")
  Do While Files <> ""
    Me.ListBox1.AddItem Files
    Files = Dir()
  Loop
End Sub
Private Sub CommandButton1_Click()
  If ListBox1.ListIndex = -1 Then
    MsgBox "データを選択してください。", vbExclamation
    Exit Sub
  Else
    MsgBox ListBox1.Value & "を開きます。"
    'CS Vファイルを開く処理
    '・・・・・・・
  End If
End Sub

投稿日時 - 2018-10-28 23:17:41

お礼

ありがとうございます。ユーザーフォームはまだ使ったことがありませんでした。こういう方法があるんですね、勉強になります。

投稿日時 - 2018-10-29 14:35:15

あなたにオススメの質問