• ベストアンサー

ファイルを選択するマクロ

ファイルを選択するマクロを教えてください。 ブック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.がありません] みたいな感じでメッセージを表示したいです。 宜しくお願いします。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答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

yyrd0421
質問者

お礼

ありがとうございます! 完璧すぎるほど完璧です。 さらにメッセージの表示なども追加して頂きありがとうございます! また1つ勉強になりました。 今後ともよろしくお願いします。

その他の回答 (2)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

>まとめると、A1セルに100と入っていたら、C:\Users\Documents\"の次にあるフォルダの中から >♯100のフォルダを選び、その中のシート選択♯100のファイルを開くということです。 設定部分の3行目でフォーマットを以下のように設定してください。 f_fmt = "#<NO>\シート選択#<NO>.xlsm" もし、対象のxlsmファイルが「#100」のフォルダ以下に有る場合と、「Documents」のフォルダ以下に有る場合が混在する場合はNo1のコードでは対応できませんので修正致しますので補足願います。

yyrd0421
質問者

補足

ありがとうございます! 頂いた補足のご回答で完全に狙い通りの事が出来ました! 本当にありがとうございます。 これが本当に最後のご質問なのですが 開いたブックのシートを指定するにはどのようにすればよいでしょうか? シート選択♯100のブックのシートAを指定して開きたい場合です。 シートの名前はどの番号でも固定です。 何度も申し訳ありませんが、よろしくお願いします。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

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

yyrd0421
質問者

補足

ありがとうございます! 完璧に目的が果たせました。感動です。 ここで追加のご質問もしたいのですがよろしいでしょうか? 新しい質問は新たにということであればご回答は大丈夫ですので。もしお許し頂けるならご回答を下さい。 先程質問しました内容とは少し異なるのですが、C:\Users\Documents\"の先に♯100、♯101などの名前がついたフォルダがあるとします。 そのフォルダを選んで、シート選択♯100などのファイルを開きたい場合はどうすればいいでしょうか? まとめると、A1セルに100と入っていたら、C:\Users\Documents\"の次にあるフォルダの中から♯100のフォルダを選び、その中のシート選択♯100のファイルを開くということです。 ごちゃごちゃな質問で申し訳ありませんが、よろしくお願いします。

関連するQ&A

  • ファイルを検索するマクロで教えて下さい

    質問No.9060575で下記のような質問をさせて頂きました。 ↓↓↓↓↓↓↓↓ ファイルを選択するマクロを教えてください。 ブック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.がありません] みたいな感じでメッセージを表示したいです。 宜しくお願いします。 ↑↑↑↑↑↑↑↑ この質問で回答をもらい、解決できましたが ここにプラスαで、もしA2セルに999と入力されていて C:\Users\Documents のフォルダの中に シート選択#100#999.xlsm というシートや シート選択#101#995.xlsm というシートがある場合はどのようにすればよろしいでしょうか? 前回と同じく100や999の部分はランダムに変わります。 前回のベストアンサーを載せておきます。 ■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

  • エクセルのマクロでセル選択するには

    初心者です! エクセルのSheet1に30箇所のセルをマクロで選択したいのですが、 たまに選択するセルが変わります。 そこで、Sheet2のA1から下へSheet1の選択する位置を「B2」「C5」「D10」・・・としてマクロで一発で30箇所のセルを選択する方法を教えてください Sheet2のA1から下へ入力するセル位置はその都度変化します。 変化したときにそのマクロを実行すると選択できるといいのですが!! よろしくお願いします。

  • [ExcelVBA]ファイル間集計についてです.

    こんにちは. ExcelVBA初心者の者です. book1.xlsm book2.xlsm book3.xlsmのように三つのマクロファイルが共有フォルダ内に存在するとします. 各マクロファイルの中身は同じで,Sheet1のA列に文字が入っており,B列C列に数字が入っています. 同じく,Sheet2にもA列に文字が入っており,B列C列に数字が入っています. book1,book2,book3各マクロファイルに誰かが毎日入力を行うのですが,Sheet1はAさんが入力を行い,Sheet2はBさんが入力を行うように決まっています.(Sheet1はAさんが入力担当Sheet2はBさんが入力担当) このとき,book4.xlsmというマクロファイルを別に用意し,このマクロファイルのユーザーフォーム1のCommandBotton1を押すだけで,各ファイル(book1,book2,book3)の値をSheet毎に集計(値をbook4に持ってくる)したいのです. 集計を行う際に,2回目以降にボタンを押した際には,前回集計された続きから集計をしたいで す. しかし,マクロは初心者のため,どなたかご教授頂けると助かります.よろしくお願いします.

  • エクセルで特定のセルを選択したい(マクロ)

    以下のようなマクロを組もうとしていますが、出来ません。 sheet1において 1)マクロを実行すると、メッセージボックスが出る。 2)メッセージボックスに入力した文字と同じ文字が入力されているセルを選択する。 3)2)のセルの1行下のセルを選択する。 2)で必ずエラーが出てしまいます。どのような方法が良いのか教えていただけるとありがたいです。よろしくお願いします。

  • 同じ行だが、A列を選択させるマクロ

    マクロを組んでいます。 以下のように、4行3列のデータがある場合に・・・ 1  A  ア 2  B  イ 3  C  ウ  4  D  エ 「B」のセルが選択されていても、その左端にある数字の2のセルを選択させるようにする。 「エ」のセルが選択されていても、その左端にある数字の4のセルを選択させるようにする。 ・・・というマクロは、どのように組んだらよいでしょうか? アドバイスを、よろしくお願いいたします!  

  • マクロで可視セルのみの削除

    A行に数字を入れ、B行にA行同列セルの数字に対して 数値を返す数式を入れています。 B行は非表示にしています。 (C・D行、E・F行・・・とも同じ処理) 数字を入力する範囲(A、C、E・・・)を選択し、 入力されている数字を消去するようマクロを組みました。 (範囲選択→ツールの編集→ジャンプ→可視セルを選択後、Delete) これはうまく作動します。 が、数式が壊れるのを防ぐ為、念には念を・・・と、 入力範囲部分はセルの書式設定で保護ロックを外し、 シートを保護しました。 そうすると、保護されているからだめ!と エラーが出て、マクロが作動しません。 (可視セル選択部分にデバッグがでます。) ・非表示のセルがある ・一部を除きシートを保護している 状態で、マクロで可視セルのみ削除することは不可能なんでしょうか? 宜しくお願いします。

  • マクロ セルに入力されたシートを選択する

    なかなか理解出来ない初心者です。 セルに入力したシート名で、そのシートを選択するマクロの記述はどうするのでしょうか? また、そのシートが選択された時にメッセージを出力したいです。 御指導お願い致します。

  • 他ファイルを参照するマクロ

    excel2010 check.xlsmというファイルにマクロが存在します。 このファイルは、c:\workフォルダに登録されている***A2***.xlsmというファイルからデータを抽出するマクロになっています。 ***A2***.xlsmの***は、ファイル名の中にA2という文字があり、 色々とファイル名が変化するということを意味しています。 ***A2***.xlsmのファイルにはチェックボックスがあり、名前を付けています。 _ch227173520_0002 が一例です。 check.xlsmのファイルで、いろんなファイルのチェックボックス状態を収集するマクロが 下記です。 Dim mypath As String Dim myFile As String '検索フォルダ mypath = "C:\work\" '検索ファイル名 myFile = Dir(mypath & "*A2*.xlsm") 'F列に抽出した結果を記載 Workbooks.Open mypath & myFile With Workbooks("check.xlsm").Worksheets("Sheet1").Range("F65536").End(xlUp) .Offset(0, 0).Value = myFile 'ファイル名 .Offset(63, 0).Value = Range("_ch227173520_0002").Value End With Workbooks(myFile).Close savechanges:=False このマクロでcheck.xlsmファイルのF64セルに、 100A2001.xlsmファイルのチェックボックス_ch227173520_0002の内容を抽出しています。 しかしながら、***A2***.xlsmファイルに仕様変更があり、チェックボックスの名前が変わってしまいました。 _ch227173520_0002 → _ch3131000 の様にです。 これだと、データを参照できないので実行エラーが出てしまいます。 なので、 .Offset(63, 0).Value = Range("_ch227173520_0002").Value → .Offset(63, 0).Value = Range("_ch3131000").Value とマクロを修正すれば、データは参照可能になりますが、 どのA2ファイルがどちらのチェックボックスなのかは、分かりません。 エラーが出たらcheck.xlsmのファイルを変えてやり直すというのは不便です。 チェックボックスの名前がどちらであっても .Offset(63, 0).Valueにデータを持ってくる様にしたいのですが、 どの様にしたらよいでしょうか? マクロ初心者です。 学習マクロくらいしかできないので、ベタで教えていただきたく、 よろしくお願いします。

  • ファイル選択マクロで教えて下さい

    別々のフォルダ内にあるファイルを一括して読み込むマクロを教えて下さい。 まず \\10.000.000.000\data\検査結果\LETO\712\20150204160549\ID000 というフォルダ内に 090 100 110 ・ ・ ・ ・ 270 というフォルダが13個あります。この13個のフォルダ内には RawData という名前のファイルがそれぞれ保存されています。 現在はこのRawDataファイルを1回1回選択してエクセルシートに読み込んでいます。 これを上記アドレスの最後の、ID000のフォルダを選択してOKを押すと 13個のフォルダ内のRawDataというファイル名の中身を各シートの指定のセルに 貼り付けるようにしたいです。 090フォルダ内のRawDataはブック1のシート1のセルF2へ 100フォルダ内のRawDataはブック1のシート2のセルF2へ という感じで、シートは変わりますが、セル番号はかわりません。 現在使用しているマクロを貼り付けておいきます。 ご指導の程宜しくお願いします。 Sub open2(pbs_pos)    f_name_org = ActiveWorkbook.Name    MsgBox ("PBS = " & pbs_pos & " degのraw_dataファイルを選択")    open_file    fname_temp = ActiveWorkbook.Name    Range("b1:b180").Copy    Workbooks(f_name_org).Activate    Sheets("pbs" & pbs_pos).Activate    Range("f2").Select    ActiveSheet.Paste    Application.CutCopyMode = False    Workbooks(fname_temp).Close Sheets("calibration").Select End Sub

  • エクセル マクロ 特定のフォルダ内 ファイルコピー

    エクセルのセルに入力されたフォルダを参照して、 CSVファイルを シート1・2・3・4に1度にコピーしたいのですが 例えば C\ドキュメント¥フォルダA |-フォルダB |-フォルダC                 |-フォルダD                 |-フォルダE                        |-フォルダ1                             |-CSVファイルA                         |-フォルダ2                             |-CSVファイルB                          |-フォルダ3                             |-CSVファイルC                         |-フォルダ4                              |-CSVファイルD 上記のアドレスで シート1のA1セルに フォルダEを入力し  シート2に CSVファイルA シート3に CSVファイルB シート4に CSVファイルC シート5に CSVファイルD それぞれすべての内容を貼り付けたいのですが 何分初心者なもので ご指導いただければと思います。  ちなみに A1セルの入力は変わるため各シートは1度削除した上で再度貼り付けを行いたいです。     

専門家に質問してみよう