• ベストアンサー

エクセルVBA セルに表示されたテキストと同じ名前のファイルを開きたい

EXCEL2003を使っています。コマンドボタンをクリックすると、VLOOKUPなどで検索し、あるセルに表示させた文字と同じ名前のファイルを開くVBAを教えてください。ファイルは同フォルダにあります。VBA初心者です。よろしくお願いします。

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

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

こんにちは。Wendy02 です。 >今はツール→マクロ→マクロという手順で行うしか >私の知識不足でできません。 ツールバーを右クリックして、[コントロールツール]を出し、その中から、コマンドボタンを選んで、シートに貼り付けます。 そのボタンを右クリックすると、 コードの表示というのがあります。それをクリックします。 そうすると、Visual Basic Editor画面が現れその中には、以下のように出ているかと思います。 Private Sub CommandButton1_Click() End Sub そこで、その間に以下のように書き加えます。 (ただし、マクロ名は、FindFileName が、「標準モジュール」に登録されていることが条件です。)   ↓ Private Sub CommandButton1_Click()  Call FindFileName  '一行書き加えます。 End Sub なお、ツール-マクロ-マクロという代わりに、Altを押しながら、F8 を押すとマクロ名の一覧が出ます。

kyo-ryu
質問者

お礼

できました!本当にありがとうございました。

その他の回答 (6)

  • taocat
  • ベストアンサー率61% (191/310)
回答No.6

再度のこんにちは。No.3です。 既にWendy02さんがフォローしてくださってますが、 開きたいファイル名が、例えば、"売上.xls"  それが、セルA1に入力されているとした場合 先のコードでは、セルA1には、"売上.xls"と拡張子(.xls)込みで入力されているものとしています。 もし、拡張子なしで、"売上" とだけ入力されているのであれば、 下記のように●のところに拡張子(.xls)を付加しましょう。 --------------------------------------------- Private Sub CommandButton1_Click()  Dim Wbk As Workbook  Dim Fname As String  Fname = Range("A1").Value & ".xls"  '●ここ  For Each Wbk In Workbooks    If Wbk.Name = Fname Then      MsgBox Fname & "は既にオープンされています"      Exit Sub    End If  Next Wbk  If Dir(Fname) = "" Then    MsgBox Fname & "はありません"  Else    Workbooks.Open Fname  End If End Sub ----------------------------------------- 以上です。

kyo-ryu
質問者

お礼

ありがとうございました。開けました。やはり拡張子のせいだったようです。どうもすみませんでした。

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

こんにちは。 >シート内にある顧客マスターを電話番号やふりがなの一部から検索し、あるセルに表示させ、そのセル内の名前と同じブックを開かせたいのです。 これは、具体的なセル情報がないと、編集していただかなくてはなりません。また、ふりがな情報はセル上に出されているものとします。それは、書かれていないので、こちらかで作ったものをサンプルとさせていただきます。 なお、#3 のtaocat さんに関するものは、 >、「***はありません」となってしまいます。***は確かに同フォルダ内にあるのですが・・・。何か私のやり方が悪いんでしょうか? これは、たぶん、セル上のリストにあるファイル名(Fname)に、.xls の拡張子がついていないからだと思います。 以下は、こちらで考えたサンプルです。   A    B    C    D      E 1 名前  ふりがな  住所  電話番号  ファイル名 2 朝日  アサヒ   東京  12-124   050821a 3 毎日  マイニチ  大阪  12-125   050822a '<標準モジュール登録> Option Explicit Sub FindFileName()  Dim myFind As String, myFadd As String, rtn As Integer  Dim DataRng As Range  Dim c As Range  Set DataRng = Range("A1").CurrentRegion 'リストのある左端上を設定  myFind = Application.InputBox("検索値を入力してください。", Type:=2)  If myFind = "False" Or myFind = "" Then Exit Sub  Set c = DataRng.Find(What:=myFind, LookIn:=xlValues, LookAt:=xlPart)  If Not c Is Nothing Then   myFadd = c.Address   Do    rtn = MsgBox(DataRng.Cells(c.Row, 1) & "でよろしいですか?", _    vbYesNoCancel)    If rtn = vbYes Then     Call OpenFile(DataRng.Cells(c.Row, 5))     Exit Sub    ElseIf rtn = vbCancel Then     Exit Sub    End If    Set c = DataRng.FindNext(c)   Loop Until c Is Nothing Or c.Address = myFadd  End If End Sub Private Sub OpenFile(Fname As String) Dim myFno As Integer  If InStr(Fname, ".xls") = 0 Then   Fname = Fname & ".xls"  End If   If Dir(Fname) <> "" Then    myFno = FreeFile    On Error Resume Next    Open Fname For Binary Lock Read Write As #myFno    Close #myFno    If Err.Number = 0 Then     Workbooks.Open Fname    ElseIf Err.Number = 70 Then     MsgBox Fname & "は開いています。", 64     Err.Clear    End If   Else    MsgBox Fname & "は存在しません。", 16   End If End Sub

kyo-ryu
質問者

お礼

ほぼ私のやりたかったことができました。感激です。本当にありがとうございました。ついでにもう一つお聞きしたいのですが、このマクロをコマンドボタンから呼び出すのはできますか?今はツール→マクロ→マクロという手順で行うしか私の知識不足でできません。よろしくお願いします。

  • komet163
  • ベストアンサー率51% (22/43)
回答No.4

こんにちは。 >文字と同じ名前のファイル がエクセルブックとは限らないかもしれないので、 Private Sub CommandButton1_Click() Dim sPath As String sPath = ThisWorkbook.Path & "\" & Range("A1").Value If Dir(sPath) <> "" Then  With CreateObject("WScript.Shell")   .Run """" & sPath & """"  End With End If End Sub としてみました。 (A1セルには、開きたいファイルの「ファイル名.拡張子」があるとします。) 関連付けされたファイルなら全て開きます。 ブックの場合、既に開いていたときはアクティブになります。

kyo-ryu
質問者

お礼

ありがとうございます。お礼が遅くなってごめんなさい。今回はエクセルブックのみですが、そうではない時の参考になりました。みなさん凄いですね。

  • taocat
  • ベストアンサー率61% (191/310)
回答No.3

こんばんは。 該当ブックが既にオープンされてる場合のチェックも入れたほうがベターですね。 ------------------------------------------------- Private Sub CommandButton1_Click()  Dim Wbk As Workbook  Dim Fname As String  Fname = Range("A1").Value  For Each Wbk In Workbooks    If Wbk.Name = Fname Then      MsgBox Fname & "は既にオープンされています"      Exit Sub    End If  Next Wbk  If Dir(Fname) = "" Then    MsgBox Fname & "はありません"  Else    Workbooks.Open Fname  End If End Sub ------------------------------------------- 以上です。     

kyo-ryu
質問者

お礼

ありがとうございます。お礼が遅くなってごめんなさい。教えていただいたようにしたのですが、「***はありません」となってしまいます。***は確かに同フォルダ内にあるのですが・・・。何か私のやり方が悪いんでしょうか?

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

こんばんは。 >VLOOKUPなどで検索し、 この部分の意味がわかりませんが、こういうことでしょうか? 一応、カレントディレクトリのファイル名を検索して、その名前があれば、ブックを開くようにしています。 Private Sub CommandButton1_Click()  Dim Fname As String  Fname = Range("A1").Value  If Dir(Fname) <> "" Then   Workbooks.Open Fname  End If End Sub

kyo-ryu
質問者

補足

ありがとうございます、説明不足ですみません。私がしたいのはこんなことです。シート内にある顧客マスターを電話番号やふりがなの一部から検索し、あるセルに表示させ、そのセル内の名前と同じブックを開かせたいのです。他に良さそうなやりかたがございましたらご教授下さい。

  • Gody
  • ベストアンサー率52% (9/17)
回答No.1

Sheet1のA1のセルを対象にしたと仮定すると、以下のような記述で可能だと思いますが、どうでしょうか。 Sheets("Sheet1").Activate Workbooks.Open Range("A1").Value

kyo-ryu
質問者

お礼

ありがとうございました。お礼が遅くなってごめんなさい。

関連するQ&A

  • エクセル2003 VBAで セル内を 一発呼び出し

    エクセル2003 オートフィルタではなく VBAで セル内を 一発呼び出ししたいので。  よろしく お願いします。 表 列A~E(結合2行) :商品名と内容   列H~K(結合2行) 住所氏名電話番号を記載してます。 1年分を オートフィルターで  氏名 や 商品名で 探すのは 結構 時間がかかります。 同じものが ほぼ少ないため。。。 そこで  たまに 同じ氏名  同じような 品を 検索する セルを 2個ほど作って  そこへ セル1へ 商品名を入力すると  該当する 行のみ 表示される。 セル2に 名前をを入力すると  該当する 行のみ 表示される。 また、セルを赤色に塗った部分の結合行(2~3行)を 赤色に塗りつぶした行のみ 表示も できれば うれしいです。 コマンドボタン等を使ってもいいので お願いします。 そんな VBAを 作っていただけませんでしょうか^^; お手数おかけしますが どなたか よろしく お願いします。 

  • Excel VBA コメントに関して

    Excel2003を使用しています。 VBAになるのかは定かではないのですが Excelの機能に「コメント」を付ける機能がありますよね セルに対してカーソルを合わすことで表示される黄色い枠のコメントのことをしるす。 これをオートシェイプやコマンドボタン等のオブジェクトに対してカーソルを合わせることに よってこのコマンドがなんなのかのコメントを付けたい場合Excelでできるのでしょうか? もし、できるとしたならばどのようにしたらいいのでしょうか? VBAを使いできるのか、もっと楽な方法があるのか 教えて頂きたいのです。 ご教授願えないでしょうか、宜しくお願いします(人>д<*ペコ謝) ※補足※ コマンドボタンやオートシェイプでテキストを入れてしまうとボタン自体が入れる文字数によって大きくなってしまうのでできるだけ小さいボタンを作り補足事項やヘルプとして使用したい。 コマンドボタンにはVBAプログラムを組むとして、オートシェイプならば、図形にマクロを登録するとして、カーソルを合わした時のみコメントを表示させたいということです。

  • 同じ名前のフォルダーとテキストをリンクさせるVBA

    エクセルのマクロ台帳と事前にフォルダーを作った物とを ボタンを押す事により、フォルダーとテキストをリンクする様にしたいのですが、 VBA初心者でどうすれば良いか解りません。 どなたか保存先位を修正すれば良い位のVBA例を教えて頂けないでしょうか? 事前準備: フォルダーを指定の場所に保存しておく。 仮:D:\TEST\AA11111 ← リンクしたいフォルダー 内容: (1)添付資料の様に台帳を作成し、セルAにリンクさせたいフォルダー名「AA11111」を入力。 (2)入力したセルを選択し、マクロ実行ボタン「ファイルリンク」を押すと保存しておいた  D:\TEST\AA11111と台帳に記載したフォルダーと同じ名前の「AA11111」テキストがハイパーリンクする。 (3)その後、上記と同じ様にD:\TESTの中にあるフォルダーと、セル入力した同じ名前のフォルダー名とをリンク

  • VBAでEXCELから固定長のテキストデータにしたい

    VBAにてEXCELに展開されたデータを固定長のテキストデータに落としたい。 EXCEL側の用件 (1)シート1にボタンを用意して、ボタンをクリックしたらテキストファイルを作成する処理にしたい。 (2)シート2にデータが展開されている。 列は10個程度、行は場合によりけり(MAX65536?) 固定長にする箇所とかはわかるのですが、ボタンクリックしたらシート2を見て、セル(もしくはrange)をどのように取得すればいいのかVBAがよくわからないのです。

  • Excelのセルにインデントを設定するVBAはありますか

    Excel2003のセルに文字列を入力し、ボタンをクリックするとインデントが設定され1文字分ずつ右へずれるようにしたいのです。 マクロで、書式→セル→配置タブ→インデント設定を記録してボタンを作成しました。 VBAでは以下の記録になりました。 With Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 1 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With これだとボタンをクリックすると確かに1文字分ずれるのですが、「IndentLevel = 1」と固定されてしまいます。 2文字や3文字ずらすセルがあるため、ボタンをクリックするたびに1文字分ずつ続けてずれるようにする必要があります。 構文を変更すればこのようなことは可能なのでしょうか。 どうかお知恵をお貸しください。よろしくお願いします。

  • エクセルvba初心者です・・・

    エクセルvba初心者です・・・ シート1にあるひとつのセルをコマンドボタンを押した時にそのセル内の文字列をシート2にかいていくようなプログラムをつくりたいです。 例えば シート1のセルに文字入力→”田中”→登録ボタンおす→シート2のセルA1にはいる シート1のセルに文字入力→”竹山”→登録ボタンおす→シート2のセルA2にはいる                  ・                  ・                  ・ というようになるコードわかる方いたら教えてください。おねがいします。

  • Excel VBA --- コマンドボタンが表示上で消える ---

    Excel VBAの初心者です。 今回、マニュアル本を見ながら試行錯誤でマクロにチャレンジしています。 用語や説明が上手くできないかもしれませんがよろしくお願いします。 OSはWindows2000、Excelのバージョンは2000です。 sheet1をメニュー画面として、コマンドボタンをいくつか貼り付けて、そのシート名を表示したコマンドボタンをクリックすると別のシートに 飛ぶようにしています。 別のシートに飛んで、そこで作業を終えたら、今度はそのシート上に貼り付けた『メニューに戻る』コマンドボタンをクリックしてsheet1のメニュー画面に戻るようにマクロを組みました。 ところが、作業用のシートからメニューに戻ると前回クリックしたコマンドボタンが表示上消えてしまっています。 そのコマンドボタンがあった位置にカーソルを持って行ってクリックするとちゃんとコマンドボタンの動作をします。 同じような質問がないか検索してみましたら『コマンドボタン上の文字の表示がおかしくなる』という質問があって、下記コードを入れたら解決したそうなので、Sheet1に下記のようなコードを入れてみました。 でもダメでした。 Private Sub Worksheet_Activate() Application.ScreenUpdating = False ActiveWindow.ScrollRow = 100 ActiveWindow.ScrollRow = 1 End Sub 解決方法のご教授をお願い致します。

  • エクセル VBA 

    エクセル VBA  Sheet上にコマンドボタンをクリックさせたら 電卓表示させるにはどのように記述をしたら良いですか? (1)勿論、VBAで電卓作成したいのですが…何か良いサイトはありますか?それか  作り方を教えて欲しいです。 (2)ツール⇒すべてのプログラム⇒アクセサリ⇒電卓  で表示できますよね!それをコマンドボタンクリックで  表示させるには、どのように記述したら良いですか?   すいません教えてください!

  • セルの値をテキストボックスに表示したい

    excel-vba初心者です。教えてください。 選択したセルと同じ行の別の列のセルの値をフォームの テキストボックスに表示する方法を教えてください。

  • VBAでテキストボックスにセルの内容を表示させたい

    EXCEL2016を使っています。 EXCEL中のグラフ内にテクストボックスを挿入し、セル値を連動させて表示したいのですが、VBAでうまくいきません。 マニュアルではできるのですが、なぜかVBAではマクロの記録もできませんでした。 VBAの表記を教えていただければ助かります。

専門家に質問してみよう