たとえば C:\My Documents\データ というフォルダーには20~30のエクセルファイルが入っています
ファイルの名前は「えくせる なんばー101」などという名前になっています
「えくせる なんばー」までは共通で「101」の部分はそれぞれランダムな数字が入っています
ランダムなファイル名なのでファイルを捜して開くのが大変です
インプットボックスなどで 「101」の部分を入力すれば該当ファイルが開くような マクロを作りたいのですが
(続きナンバーにして フォルダの整列をすれば捜しやすいのですが ネットワーク上の共有フォルダなので勝手にファイル名を変えることが出来ないのです)
VBA初心者なのでよろしくお願いします
A 回答 (3件)
- 最新から表示
- 回答順に表示
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
ありがとうございます
ちょっと見ただけでは難しそうですね・・・
週末で試すことができないので(家のパソにはOfficeが入っていないのです)
週明けに試してみます
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
この回答への補足
早速のご回答ありがとうございます
わがままついでにもうひとつ補足させてください
「えくせる ふぁいる」の後の数字は3桁ではなく「1010-1」だったり「1234-56」だったりするのです 本当はもっと複雑なのですが ハイフォンの前の数字は整数4桁と決まっています
ですが 全部正確に入力するのは大変なので 4桁の数字だけを入力すれば該当するファイルを選び出すということはできないでしょうか
ファイル名が「えくせる ふぁいる1234-56」の場合は 「1234」を入力すれば良い という風に
うまく説明できなくてすみませんが お分かりいただけましたでしょうか よろしくお願いします
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルの特定行の削除
-
iCloud for Windowsをアンイン...
-
vbsからのExcelマクロ呼び出し...
-
Excel: ファイル名になぜ、[...
-
WINDOWS CMDからゴミ箱のファ...
-
彼女の過去の恋愛に嫉妬してし...
-
FTPのgetとputの使いわけ。
-
エクセルの固定範囲にCSVを貼り...
-
VBAにおいて、ファイルの移...
-
エクセル保存終了で一時ファイ...
-
Googleドライブについて
-
ASP.NETでINIファイル読込みを...
-
エクセルのファイル:「自分」が...
-
ノーツの添付ファイルの場所を...
-
UTF-16 LE(BOM付き)可のコンペ...
-
[Unity]シーンファイルの中が消...
-
複数のExcelファイルにある同名...
-
このファイルは外部のエディタ...
-
docxをmht形式で保存したファイ...
-
ファイルが移動してもリンクの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
彼女の過去の恋愛に嫉妬してし...
-
CSVファイルの特定行の削除
-
vbsからのExcelマクロ呼び出し...
-
[Unity]シーンファイルの中が消...
-
iCloud for Windowsをアンイン...
-
Excel: ファイル名になぜ、[...
-
EXCELVBAにて文字列にして「01...
-
FTPのgetとputの使いわけ。
-
ファイルが移動してもリンクの...
-
このファイルは外部のエディタ...
-
docxをmht形式で保存したファイ...
-
ファイルを別のストレージに移...
-
WINDOWS CMDからゴミ箱のファ...
-
5000個のtiffファイルをpdfへ変...
-
複数のExcelファイルにある同名...
-
エクセルのファイル:「自分」が...
-
mediaplayerの取り込みフォルダ...
-
エクセル保存終了で一時ファイ...
-
OneDrive必要なものでしょうか
-
VBScriptでExcelファイルをDLす...
おすすめ情報