• 締切済み

エクセルVBAで、任意指定のファイル名を取得する方法を

教えて下さい。 ファイル(エクセルブック)を数個開いています。そのうち基本となるファイル(便宜上基本ファイルとします)は常に開いていて、後の数個の作業ファイルを開きます。(作業ファイルはその都度入れ替わり固定のファイルではありません)  基本ファイルを、アクティブな状態でエクセルVBAマクロを走らせます。 そのマクロ実行中に、『ある作業ファイルの任意のセル(任意のセル)をクリックして、そのファイル名とシート名とセルのアドレスとそのセルの値を取得』して、基本ファイルの任意のセル(例えば基本ファイルのsheet1のセルA2~D2に)に記入したいのです。 分かりにくい文で申し訳ないですが、特に上の『 』内の部分です。 どのようにマクロを記述すればいいのか分からないので、教えて下さい。宜しくお願いします。

みんなの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

あー・・案の定やっちまった(;´Д⊂) シート名が正しく記録されないですね。。 ワークシートのダブルクリックイベントの中で下記の部分を 差し替えます。   (誤)   ' // ダブルクリックされたセルの情報を記録   With mSh     lRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1     .Cells(lRow, "A").Value = ActiveWorkbook.FullName     .Cells(lRow, "B").Value = ActiveSheet.Name     .Cells(lRow, "C").Value = ActiveCell.Address     .Cells(lRow, "D").Value = ActiveCell.Value   End With           ↓↓↓↓↓   (正)   ' // ダブルクリックされたセルの情報を記録   With mSh     lRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1     .Cells(lRow, "A").Value = Sh.Parent.FullName     .Cells(lRow, "B").Value = Sh.Name     .Cells(lRow, "C").Value = Target.Address     .Cells(lRow, "D").Value = Target.Value   End With

banzaiA
質問者

お礼

感動しました! ありがとうございます。早速実行し、確認できました。 私が考えていた目的の結果も得られました。 参考にさせていただきます。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。 基本ファイルの ThisWorkbook モジュールにコピペして下さい。 その後、ブックを保存してから開きなおすとツールバーが生成 されてます。 ツールバーの「セル情報の記録」ボタンをクリックした後、セルを 適当に DB クリックすると基本ファイルに記録します。 なお、基本ファイルのセルは記録しません。ほかブックのみです。 勢いで作ったのでテストは全然してませんが。 Option Explicit Private WithEvents xlApp  As Application Private WithEvents Cbb   As CommandBarButton Private mSh         As Worksheet ' // 作業用ツールバーの名前 Private Const TOOLBAR_NAME As String = "MyToolBar" ' // レコード記録シート名 Private Const RECSHEET_NAME As String = "Record" ' // ブックのオープンイベント Private Sub Workbook_Open()   Set xlApp = Application RETRY:   On Error GoTo ERR_NOEXIST_RECSHEET   Set mSh = ThisWorkbook.Worksheets(RECSHEET_NAME)   On Error GoTo 0   Call AddMyToolBar TERMINATE:   Exit Sub ERR_NOEXIST_RECSHEET:   With ThisWorkbook.Worksheets.Add(Before:=Sheets(1))     .Name = RECSHEET_NAME     .Range("A1:D1").Value = Array("Book", "Sheet", "Address", "Value")   End With   MsgBox "[ " & RECSHEET_NAME & " ] シートを作成しました。", _       vbInformation   Err.Clear   Resume RETRY End Sub ' // ブックのクローズイベント Private Sub Workbook_BeforeClose(Cancel As Boolean)   Set mSh = Nothing   Set xlApp = Nothing   Call DelMyToolBar End Sub ' // 作業用ツールバーの追加 Private Sub AddMyToolBar()   Dim Cmb As CommandBar   Call DelMyToolBar   Set Cmb = xlApp.CommandBars.Add(Name:=TOOLBAR_NAME, _                   Position:=msoBarTop, _                   Temporary:=True)   Set Cbb = Cmb.Controls.Add(Type:=msoControlButton)   With Cbb     .Caption = "セル情報の記録"     .Style = msoButtonIconAndCaption     .FaceId = 184   End With   Cmb.Visible = True   Set Cmb = Nothing End Sub ' // 作業用ツールバーの削除 Private Sub DelMyToolBar()   On Error Resume Next   Set Cbb = Nothing   xlApp.CommandBars(TOOLBAR_NAME).Delete   On Error GoTo 0 End Sub ' // 作業用ツールバーのボタンクリックイベント Private Sub Cbb_Click( _     ByVal Ctrl As Office.CommandBarButton, _     CancelDefault As Boolean _ )   With Cbb     '// ボタンの On/Off 状態を切り替え     .State = Not CBool(.State)     '// ボタンの On/Off 状態でアイコンを切り替え     If CBool(.State) Then       .FaceId = 228 ' // FaceID:228 ■マーク     Else       .FaceId = 184 ' // FaceID:184 ●マーク       xlApp.StatusBar = ""     End If   End With End Sub ' // ワークシートのダブルクリックイベント Private Sub xlApp_SheetBeforeDoubleClick( _     ByVal Sh As Object, _     ByVal Target As Range, _     Cancel As Boolean _ )   ' // 終了条件:: 作業用ツールバーのボタンが Off なら何もしない   If CBool(Cbb.State) = False Then Exit Sub   ' // 終了条件:: ThisWorkbook なら何もしない   If Sh.Parent Is ThisWorkbook Then Exit Sub      Dim lRow As Long   On Error GoTo ERR_HANDLER   ' // 編集モードを解除   Cancel = True   ' // ダブルクリックされたセルの情報を記録   With mSh     lRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1     .Cells(lRow, "A").Value = ActiveWorkbook.FullName     .Cells(lRow, "B").Value = ActiveSheet.Name     .Cells(lRow, "C").Value = ActiveCell.Address     .Cells(lRow, "D").Value = ActiveCell.Value   End With   ' // 記録したことをユーザーに通知(ステータスバーで)   xlApp.StatusBar = "Record: " _           & ActiveWorkbook.Name & "/" _           & ActiveSheet.Name & "/" _           & ActiveCell.Address TERMINATE:   Exit Sub ERR_HANDLER:   MsgBox Err.Description, vbCritical   Resume TERMINATE End Sub

banzaiA
質問者

お礼

早速のご回答ありがとうございます。 勉強しながら、ご提示いただいたマクロを実行してみます。

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

こんにちは。 『ある作業ファイルの任意のセル(任意のセル)をクリックして、 --クリックして、というのは、事実上はできません。ショートカットあたりかな? セルは、通常の作業で[左]クリックも[右]クリックも作業としてありますから、[左]クリックは完全に使えないし、[右]クリックは、その機能をつぶさないとできません。 そのファイル名とシート名とセルのアドレスとそのセルの値を取得』 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ でも、この範囲だけですと、『リンク貼り付け』の機能だと思います。 それを、何かひとつの操作でしたいというのなら、記録マクロを加工して、ショートカットやツール・コマンドボタンなどにしてあげれば、出来上がるはずです。(ただし、Ctrl + C のショートカット・コピーに関しては、割り当てることは、一般的にはできません。)

banzaiA
質問者

お礼

早速のご回答ありがとうございます。

関連するQ&A

  • エクセルマクロで任意のファイル名をつけて保存したい

     エクセルVBAについての質問です。  エクセルのマクロで、Aというファイルを開いて、そのうち必要なワークシートだけを抽出し、新しいブックに移動し、その新しいブックを新しいブックのsheet1のセルC2の文字列をファイル名として保存するようなマクロをくみたいと思っています。  ファイルを開いて必要なワークシートだけを抽出し、新しいブックに移動するところまではできましたが、新しいブックのセルC2の文字列をファイル名として保存することができません。FNを変数として宣言して、C2の文字列を代入し、FNをファイル名として保存しようとすると、ファイルにFNという名前が付いてしまいます。どうすれば、C2の文字列をファイル名として保存できるのでしょうか。なお、保存するフォルダはc:\変換ファイル\6月です。どなたか教えてください。よろしくお願いします。

  • ブック名をエクセルに貼り付けたい

    開いているエクセルのファイルのブック名を、同様に開いているエクセルファイル「book1」の「sheet1」の「A1セル」から縦に順番に貼り付けたいのですが、どのようなマクロの記述になるでしょうか? 簡単にできると思ったのにできません。誰かお助けを・・・

  • Access-VBAでExcelファイルを作成する。

    こんにちわお世話になります。 「Excelにエクスポート」ボタンをクリックすると、Inputboxか何かが表示されて、Pathやファイル名やシート名を入力し、「実行」ボタンを押すと、新規にExcelのBookを、そのPath、ファイル名、シート名で作成する。その後、そのシートにデータを書き込むという作業をしたいのです。 AccessのデータをExcelの任意のシートを開いて書き込むという部分のVBAコードはわかりますので、新規Book作成部分のコードがわかるかたお願いします。 Office97を使用しています。

  • VBAで、アクティブなBOOKのファイル名を取得し

    エクセルのVBAを使用して、選択されている、BOOKのファイル名を取得し、下記のように編集してA1セルに入れたいのですが、可能でしょうか? BOOKのファイル名が「大阪_たこ焼き_1234.xls」の場合 大阪_と.xlsをは省いて、「たこ焼き_1234」がA1セルに入るようにしたい。

  • VBAからファイルをセル入力から開く方法

    VBAからファイルをセル入力から開く方法 だれかご教授頂けませんでしょうか?VBAからエクセルファイルを開こうとしています。 そこでシート1のA1セルにファイル名を記述してあり、そのファイル名からファイルを開く事は出来ますでしょうか? 何か良い方法がありましたら教えて頂きたいのですが。

  • EXCEL VBA で現在開いているブックのファイル名を取得する方法

    EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。 作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。 このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。 常にファイル名を取得出来るVBAをどなたか、教えて下さい。

  • VBA アクティブなセルのシート名を取得したい

    エクセル2010使用です。 VBAで、アクティブなセルのあるシート名を取得する方法を教えてください。  マクロ.xls (マクロシートA1) ←今回のマクロを書き込んだファイル  参照.xls (参照シートA1)  入力.xls (入力シートF3) この3つのエクセルファイルを開きます。 ( )内はそれぞれの前面にあるシート名と選択されたセルです。 入力シートのF3にカーソルをおいて下記マクロを実行すると   MsgBox ActiveSheet.Name & ActiveCell.Address 「マクロシート F3」と返されます・・・ ほしい結果は「入力シート F3」なんです。 このような場合にアクティブセルのあるシート名を取得する方法があれば教えてください。 よろしくお願いいたします。

  • Excelマクロ/ファイル名を指定してインポート

    テキストファイルからExcelへインポートする作業を自動化させたいのですが。 毎回インポート元のファイル名(格納しているフォルダは同じです)が異なるので、マクロ記録ではうまく作成できません。VBAでないと無理でしょうか? できればファイル名をその都度入力するようなダイアログボックスが表示されれば理想的です。VBA初心者なので教えてください。

  • エクセルVBAについて

    今、エクセルVBAでマクロの作成を行っています マクロの中で、作業用に別なエクセルとシートを作成したのですが マクロの最後でその作業用のエクセルとシートを削除する用にしました。 その際に、エクセルがメッセージボックスが開き 『このエクセルブックを閉じますか』や『このシートを削除してよろしいですか』などと聞いてきます。 このボックスを出さないように強制的に消すことは出来ないのでしょうか? 出来るのであれば、やり方を教えてください。

  • エクセル(VBA)のブック間でのコピーペーストについて

    こんにちは。VBA入門レベルのものですが、質問させてください。 ブックAとブックBを開いた状態にし、 ・ブックA⇒VBAを組む&データ貼付け先 ・ブックB⇒データコピー元 ブックBの特定セル(例:D10)からブックAの特定セル(例:E12)にコピー⇒貼付 する方法を探しています。 なお、ブックBは、ブック名とシート名が都度変わるので、「ブックAではない方の開いているエクセルファイルからデータをコピーし、ブックAに貼付ける」の構文にしたいです。 また、コピペの他に数式(イコール)で飛ぶ方式でもかまいません。 この内容でのVBAの記述方法が分かる方、どなたか教えて頂けますでしょうか。 すみませんがよろしくお願いいたします。 ※エクセル2003です。

専門家に質問してみよう