- ベストアンサー
ファイルを選択するマクロ
ファイルを選択するマクロを教えてください。 ブックAのシートA セルA1に100という数字が入力されています。 C:\Users\Documents のフォルダの中に シート選択#100.xlsm シート選択#101.xlsm シート選択#102.xlsm シート選択#103.xlsm シート選択#104.xlsm というシートがあるとします。 やりたいことはセルA1に数字が入力されている状態でマクロ実行ボタンを押した時 C:\Users\Documentsのフォルダの中にあるシート選択#100.xlsmのシートを開きたいです。 セルA1が101ならシート選択#101.xlsmを開く。 またセルA1になにも入力されていない場合はメッセージで [入力されていません] 入力されていてもフォルダ内に当てはまる番号がない場合は [ヒットするNo.がありません] みたいな感じでメッセージを表示したいです。 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>シート選択♯100のブックのシートAを指定して開きたい場合です。 >シートの名前はどの番号でも固定です。 最下のコードと差し換えてください。 設定に新しく追加した以下の箇所でブックを開いた後に表示するシート名を設定してください。 Const st As String = "シートA" また不要かもしれませんが、A1セルの値に対してのエラーチェックを2重にされていたため、 シートが存在しない場合もエラー表示をするように変更しております。 不要であれば以下の箇所を削除してください。 MsgBox "ワークブック """ & Dir(f_fmt) & """ に、ワークシート """ & st & """ が見つかりません" ■VBAコード Sub file_open() Dim f_fmt As String, i As Integer '設定============== Const dpath As String = "C:\Users\Documents\" Const adr As String = "A1" Const st As String = "シートA" f_fmt = "#<NO>\シート選択#<NO>.xlsm" '================== If Len(Range(adr).Value) = 0 Then MsgBox "入力されていません": Exit Sub f_fmt = dpath & Replace(f_fmt, "<NO>", Range(adr).Value) If Dir(f_fmt) = "" Then MsgBox "ヒットするNo.がありません": Exit Sub Workbooks.Open Filename:=f_fmt For i = 1 To Worksheets.Count If Worksheets(i).Name = st Then Worksheets(i).Activate Exit Sub End If Next i MsgBox "ワークブック """ & Dir(f_fmt) & """ に、ワークシート """ & st & """ が見つかりません" End Sub
その他の回答 (2)
- eden3616
- ベストアンサー率65% (267/405)
>まとめると、A1セルに100と入っていたら、C:\Users\Documents\"の次にあるフォルダの中から >♯100のフォルダを選び、その中のシート選択♯100のファイルを開くということです。 設定部分の3行目でフォーマットを以下のように設定してください。 f_fmt = "#<NO>\シート選択#<NO>.xlsm" もし、対象のxlsmファイルが「#100」のフォルダ以下に有る場合と、「Documents」のフォルダ以下に有る場合が混在する場合はNo1のコードでは対応できませんので修正致しますので補足願います。
補足
ありがとうございます! 頂いた補足のご回答で完全に狙い通りの事が出来ました! 本当にありがとうございます。 これが本当に最後のご質問なのですが 開いたブックのシートを指定するにはどのようにすればよいでしょうか? シート選択♯100のブックのシートAを指定して開きたい場合です。 シートの名前はどの番号でも固定です。 何度も申し訳ありませんが、よろしくお願いします。
- eden3616
- ベストアンサー率65% (267/405)
Alt+F11でVBEを開き、挿入から標準モジュールを挿入 最下のVBAコードを貼り付けて右上の「×」でVBEを閉じる コマンドボタンまたはシェイプにマクロ「file_open」を登録してシートに配置 コード内の設定の箇所3行を変更することで仕様をある程度変更することができます。 '設定============== ▼フォルダパスを設定してください(最後は「\」としてください) Const dpath As String = "C:\Users\Documents\" ▼番号を記載するセル番地を設定してください。 Const adr As String = "A1" ▼ファイル名のフォーマットを設定してください。 『<NO>』を記載した箇所が上記セル番地の内容で置換されて ファイル名として使用されます。 f_fmt = "シート選択#<NO>.xlsm" '================== ■VBAコード Sub file_open() Dim f_fmt As String, fname As String '設定============== Const dpath As String = "C:\Users\Documents\" Const adr As String = "A1" f_fmt = "シート選択#<NO>.xlsm" '================== If Len(Range(adr).Value) = 0 Then MsgBox "入力されていません": Exit Sub fname = Replace(f_fmt, "<NO>", Range(adr).Value) If Dir(dpath & fname) = "" Then MsgBox "ヒットするNo.がありません": Exit Sub Workbooks.Open Filename:=dpath & fname End Sub
補足
ありがとうございます! 完璧に目的が果たせました。感動です。 ここで追加のご質問もしたいのですがよろしいでしょうか? 新しい質問は新たにということであればご回答は大丈夫ですので。もしお許し頂けるならご回答を下さい。 先程質問しました内容とは少し異なるのですが、C:\Users\Documents\"の先に♯100、♯101などの名前がついたフォルダがあるとします。 そのフォルダを選んで、シート選択♯100などのファイルを開きたい場合はどうすればいいでしょうか? まとめると、A1セルに100と入っていたら、C:\Users\Documents\"の次にあるフォルダの中から♯100のフォルダを選び、その中のシート選択♯100のファイルを開くということです。 ごちゃごちゃな質問で申し訳ありませんが、よろしくお願いします。
お礼
ありがとうございます! 完璧すぎるほど完璧です。 さらにメッセージの表示なども追加して頂きありがとうございます! また1つ勉強になりました。 今後ともよろしくお願いします。