• 締切済み

特定のフォルダー内のエクセルファイルを開くVBA

たとえば C:\My Documents\データ というフォルダーには20~30のエクセルファイルが入っています ファイルの名前は「えくせる なんばー101」などという名前になっています 「えくせる なんばー」までは共通で「101」の部分はそれぞれランダムな数字が入っています ランダムなファイル名なのでファイルを捜して開くのが大変です インプットボックスなどで 「101」の部分を入力すれば該当ファイルが開くような マクロを作りたいのですが (続きナンバーにして フォルダの整列をすれば捜しやすいのですが ネットワーク上の共有フォルダなので勝手にファイル名を変えることが出来ないのです) VBA初心者なのでよろしくお願いします

みんなの回答

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

こんばんは。 私の考えが間違っていなければ、全面的にやり直さないとダメだと思います。そこで、考え方を換えて作ってみました。 えくせるふぁいる「    」-123.xls の「    」の中に数字を入れるので、数字だけ聞いてきます。 なければ、先頭文字と、後尾文字 フォルダーの中に、数千もあるようですと、ちょっと厳しいかもしれません。ただ、今の方法が、一番速いというか、だいたい、特殊なファイルサーチプログラムも、このような考えたをしています。 '-------------------- Sub FileOpenSample2()   Dim OrgPath As String, Fname As Variant, Fnames() As Variant   Dim j As Long, i As Variant, myNo As Variant, flg As Boolean   Dim BackF1Name As String  '======================================================  'ユーザー設定   Const FrontFName As String = "えくせるふぁいる" '"先頭文字   Const BackFName As String = "-123.xls" '後尾文字   Const myPath As String = "C:\My Documents\" '調べるフォルダ  '======================================================  If InStrRev(BackFName, ".XLS", , 1) = 0 Then    BackF1Name = BackFName & ".XLS"  Else     BackF1Name = BackFName  End If   OrgPath = ThisWorkbook.Path   ChDir myPath   Fname = Dir(FrontFName & "*.xls")   If Fname = "" Then    MsgBox FrontFName & _    "該当するファイルが見つかりませんので、設定を修正してください。", 64    Exit Sub   End If   Do    ReDim Preserve Fnames(j)    Fnames(j) = StrConv(Fname, vbUpperCase)    j = j + 1    Fname = Dir   Loop Until Fname = ""     myNo = Application.InputBox(FrontFName & " ???? " & BackF1Name & vbCr & _   "番号を入れてください。", Default:=1234, Type:=2)   If VarType(myNo) = vbBoolean Or myNo = "" Then    GoTo LineEnd   End If   '入力されたファイルがあるか調べる   For Each i In Fnames    Fname = StrConv(FrontFName & myNo & BackF1Name, vbUpperCase)    If i Like Fname Then      flg = True      Exit For    End If   Next i   If flg Then    Workbooks.Open Fname   Else   '番号で見つからない場合、ファイル・オープンダイアログで、調べる   Application.Dialogs(xlDialogOpen).Show (FrontFName & "*" & BackF1Name)   End If LineEnd:   ChDir OrgPath End Sub

potapotahoshi
質問者

お礼

ありがとうございます ちょっと見ただけでは難しそうですね・・・ 週末で試すことができないので(家のパソにはOfficeが入っていないのです) 週明けに試してみます

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

こんにちは。 こんに風に考えてみました。 Option Explicit Sub FileOpenSample()   Dim OrgPath As String, Fname As Variant  '======================================================  'ユーザー設定   Const BaseFileName As String = "えくせる なんばー"   Const myPath As String = "C:\My Documents\"  '調べるフォルダ  '======================================================   OrgPath = ThisWorkbook.Path   ChDir myPath   Fname = Application.InputBox(BaseFileName & " の次番号を入れてください。", Default:=101, Type:=2)   If VarType(Fname) = vbBoolean Or Fname = "" Then    GoTo LineEnd   End If   '入力されたファイルがあるか調べる   If Dir(BaseFileName & Fname & ".xls") <> "" Then    Workbooks.Open BaseFileName & Fname & ".xls"    Else    'ない場合は、オープンダイアログで、調べる    Application.Dialogs(xlDialogOpen).Show (BaseFileName & "*.xls")   End If LineEnd:  ChDir OrgPath End Sub

potapotahoshi
質問者

補足

早速のご回答ありがとうございます わがままついでにもうひとつ補足させてください 「えくせる ふぁいる」の後の数字は3桁ではなく「1010-1」だったり「1234-56」だったりするのです 本当はもっと複雑なのですが ハイフォンの前の数字は整数4桁と決まっています ですが 全部正確に入力するのは大変なので 4桁の数字だけを入力すれば該当するファイルを選び出すということはできないでしょうか ファイル名が「えくせる ふぁいる1234-56」の場合は 「1234」を入力すれば良い という風に うまく説明できなくてすみませんが お分かりいただけましたでしょうか よろしくお願いします

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

こんな所でしょうか?ショートカットを設定するか、図形にマクロの登録で設定してください。 Sub NOFILEOPEN_Click() On Error GoTo NOFILE_Err Dim FPASS, FNAME, FNO As String FPASS = "C:\My Documents\データ\" FNAME = "えくせる なんばー" FNO = Format(InputBox("ファイルナンバーを入力"), "000") Workbooks.Open FPASS & FNAME & FNO Exit Sub NOFILE_Err: X = MsgBox("ファイルが存在しません。", vbOKOnly) End Sub

関連するQ&A

  • エクセル VBA ファイルをフォルダへ移動させる

    エクセル VBA 手探り状態です。 001大企業.xls、001中小企業.xls、003大企業.xls、003中小企業.xls、008大企業.xls、008中小企業.xls・・・・というファイルが300ほど企業種類という名前のフォルダにあります。 VBAで企業種類という名前のフォルダの中に、001、003、008・・・というフォルダは作成しました。 (ネットで”フォルダ作成”を検索して、、、自力ではVBAは書けません) それを001という名前のフォルダへは、001大企業.xls、001中小企業.xlsのファイル、003という名前のフォルダへは003大企業.xls、003中小企業.xlsのファイルを、008フォルダへは008大企業.xls、008中小業.xlsファイルを・・・というように、マクロで移動させたいのです。 これらのファイル、フォルダは全て、企業種類というフォルダの中にあります。 VBAを教えていただけましたら嬉しいです。

  • EXCEL2003 VBAマクロ 特定フォルダ直下のファイル処理

    EXCEL2003 VBAマクロ 特定フォルダ直下のファイル処理 いつも大変御世話になっております。 WiindowsXP環境にある【D:\input】フォルダ直下にいろんなフォルダ及びファイル等があります。 【D:\input】直下にあるファイルすべてを【D:\output】に移動したいのですが 【D:\input】直下にはファイルだけあれば制御しやすいのですが、 【D:\input】直下には、サブフォルダ(その下にファイル・フォルダ等もあるので)もあるのでうまく マクロで制御出来ません。 移動対象は、【D:\input】フォルダ内の拡張子がある(.○○系)ファイルのみです。 拡張子自体が存在しないフォルダは移動対象ではありません。 どうすれば【移動対象のフォルダ構成は崩壊した状態で、すべてのファイルが【D:\output】直下に移動する。】 事が可能でしょうか? もしご存知の方がいらっしゃるようでしたら、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • VBA ファイルの開き方

    マクロでファイルを開くときに Workbooks.open FileName:="\c:=\My Documents\Book1.xls" のように記述しますが、この「Book1」にあたる部分を その日の日付(20090422)のようにするにはどうすれば良いのでしょうか? つまり、ファイル名のところに日付を入れたいのです。 よろしくお願いします。

  • Excel VBAで同じフォルダ内のファイルを開くには?

    Windows2000、Excel2000を使用しています。 「経理」というフォルダに「見積」「請求」の2つのExcelファイルがあります。 「見積」から「請求」を開くマクロを作りたいのですが、どうすればいいでしょうか? 「経理」フォルダは場所が変わることがあるので、パスをどうすれば良いかがわからず苦しんでいます。 VBAはまったくの素人で、本を見ながら挑戦しているのですがうまくできないのです。 どうかよろしくお願いします。

  • エクセル マクロで特定ファイル名だけを開く

    エクセルのマクロで 特定のファイル名だけをフォルダの中から探して 開くというものを作りたいのですが うまくできません。 フォルダを指定して 「060927.xls」というエクセルファイルだけを 開きたいのですが この日付のところが毎日変わるので 「06XXXX.xls」というような 最初が06であと4つの文字が入ってるファイル名だけを 流動的に指定できるようにするには どのようなVBAマクロにすればよいのでしょうか? とても困っています。 是非教えてください!宜しくお願いします。

  • VBA フォルダ内にファイルが存在するか確認したい

    OS: WindowsXP Office: 2003 ExcelVBAについて教えてください。 VBAで特定のフォルダー内でファイルが存在するかの確認をしたいのです。 例えば、以下のようなフォルダーに営業日がファイル名に付いた複数のファイルがあります。  C:\Documents and Settings\aaa\デスクトップ\作業\報告書20120201.xls  C:\Documents and Settings\aaa\デスクトップ\作業\報告書20120202.xls  C:\Documents and Settings\aaa\デスクトップ\作業\報告書20120203.xls  C:\Documents and Settings\aaa\デスクトップ\作業\報告書20120206.xls  C:\Documents and Settings\aaa\デスクトップ\作業\報告書20120207.xls  C:\Documents and Settings\aaa\デスクトップ\作業\報告書20120208.xls 処理は20120201(2012年2月1日)から順番に行うのですが、その際、 報告書20120203.xlsはファイルが存在しているので変数1を返す。 報告書20120204.xlsは休日のためファイルが存在しないので変数0を返す。 次の処理で変数1の場合は処理をし、変数0の場合は処理を飛ばすと言った内容のマクロを考えています。 要はフォルダー内にファイルが存在するかしないかの部分のマクロ記述を知りたいのです。 どなたか、よろしくお願いします。

  • フォルダ内のファイルの自動整列をやめさせたい!

    OS: Windows7で、フォルダの中のファイル名を変更すると、フォルダ内で自動的に自動整列をおこないます。例えば、デジカメでとった写真をfile1, file2・・・などとフォルダ内部で名前を変えると、 フォルダ内でファイルが元にあった位置から自動的に名前ごとに整列をおこなってしまいます。 この機能をやめさせるには何か方法はありますでしょうか?

  • VBA サブフォルダ内のエクセルファイル転記

    VBAについてお尋ねします。 当方VBA初心者です。 やりたい事は下記です。 ・サブフォルダ(2階層目)に入っているエクセルファイルからマクロ実行ファイルにセルデータを転記 ・全てのサブフォルダを網羅 サブフォルダに対しての扱いが難しくて理解に困ってます。 サルプルなどありましたらいただけると幸いです。 よろしくお願いします。

  • Excel VBA ファイルをまとめる

    Excel2003にてフォルダにある複数ファイル(8個)の各1番左のシートを 指定したファイルにまとめるVBAを組みたいと思います。 まとめる際、ファイル名の一部を取得し、シート名にしたいのですが可能でしょうか? 例: ファイル名:20110927_△△△△株式会社.xls ⇒ シート名:△△△△株式会社 ※ファイルの個数は固定ですが、年月の部分は変わります。 簡単なVBAの経験しかなく、キーワード検索でもしっくりこないものばかりで どのようにコードを記述してよいのか非常に困っています。

  • VBAエクセル・・・フォルダ名を取得する

    VBA初心者です。 マクロで、ヘッダー部分にフォルダ名を入力したいのですが、 どのように取得すればよいでしょうか? ThisWorkbook.Path にすると、パスが出てきますが、 \C:\***\△△△\○○○\XXX.xls だとすると、「○○○」だけを入力したいのですが・・・ よろしくお願いいたします。

専門家に質問してみよう