AIと戦って、あなたの人生のリスク診断 >>

Excelのマクロのショートカットキーを一覧で取得する方法

Office2003のExcelでマクロを利用しているのですが、
場当たり的にマクロをショートカットキーに対応させてきたために、
自分でも管理できず、収拾がつかなくなってしまいました。

一つ一つマクロのオプションを見ることが確実なのでしょうが、
手間がかかってしまいます。
自分で登録したマクロのショートカットキーを一覧で取得する方法はないでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こんばんは。



昔、作ったマクロで、古典的なコードです。現在は、あまり推奨されるようなコードの内容ではありませんが、良かったら試してみてください。

ツール-マクロ-セキュリティを

 Visual Basic プロジェクトへのアクセスを信頼する

にチェックしていただいてから、以下のマクロを実行してください。
Debug.Print に出す場合は、該当部分のブロックを外してください。

今後、ショートカットを設ける場合は、Application.OnKey で設定して管理したほうが楽だと思います。

'-------------------------------------------
Sub GetShortCutKeys()
'現在の設定は、自ブックに限る
Dim DefPath As String
Dim FNo As Integer
Dim LineBuf As String
Dim i As Integer
Dim buf() As String
Dim bufName As String
Dim bufKeyName As String
Dim vbc As Object
Const AT1 As String = "Attribute "
Const AT2 As String = "VB_Invoke_Func ="
Const TMPF As String = "Temp1.bas"

DefPath = ThisWorkbook.Path & "\"
 With ThisWorkbook.VBProject
 For Each vbc In .VBComponents
 .VBComponents(vbc.Name).Export Filename:=DefPath & TMPF
 FNo = FreeFile()
 Open DefPath & TMPF For Input As #FNo
 While Not EOF(FNo)
  Line Input #FNo, LineBuf
  If InStr(1, LineBuf, "Sub", vbTextCompare) = 1 Then
   bufName = Mid$(LineBuf, InStr(LineBuf, "Sub") + 4)
  End If
  If InStr(LineBuf, AT1) = 1 And InStr(LineBuf, AT2) > 0 Then
   ReDim Preserve buf(i)
   bufKeyName = " : Ctrl + " & Mid$(LineBuf, InStrRev(LineBuf, "=") + 3, 1)
   buf(i) = bufName & bufKeyName '配列出力
   
   'Debug.Printへ"
   'Debug.Print bufName; bufKeyName   
   i = i + 1
   bufName = ""
  End If
  LineBuf = ""
 Wend
 Close #FNo
 Kill DefPath & TMPF
 Next
 End With
 MsgBox Join(buf, vbCrLf)
End Sub
    • good
    • 1
この回答へのお礼

返信が遅くなってしまい、すみません。

教えていただいた方法で一覧を取得することができました。
作業時間の短縮になり、助かりました。

ちなみに、「Visual Basic プロジェクトへのアクセスを信頼する」へのチェックを行わずに、教えていただいたマクロを実行したところ、「プログラミングによるVisual Basic プロジェクトへのアクセスは信頼性に欠けます」とのメッセージが出ました。
Wendy02さんがおっしゃられたように、セキュリティ的に気をつける必要があるようです。
今後は、教えていただいたApplication.OnKeyというものを調べて使いたいと思います。
ありがとうございました。

お礼日時:2010/02/06 12:02

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcel ショートカットキーの一覧出力ができるか

Excelで、ショートカットキーの一覧を出力することって、出来るのでしょうか。特に、自分でショートカットキー登録しまくったマクロについて、忘れたりした時に一覧出力したいのですが、そういう機能はあるでしょうか。

Aベストアンサー

過去ログですが、参考になるのでは?
https://oshiete.goo.ne.jp/qa/5646731.html

Qエクセル:マクロ「Application.CutCopyMode = False」って?

エクセルのマクロを記録していると

「Application.CutCopyMode = False」

というものがよく出てきますが、これは何でしょう?
どういう意味のものかわかりません。
削除しても差し支えないのもでしょうか?

Aベストアンサー

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
Range("A1").Select
Selection.Copy
Range("A2").Select
Application.CutCopyMode = False
ActiveSheet.Paste ← ココでエラー
------------
ご自分で、セルをコピーしてみると分かると思いますが、コピーした範囲が点線で点滅されます。
「Application.CutCopyMode = False」をすると、
その点滅がなくなります。

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
...続きを読む

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

Qエクセル VBA ショートカットキーの設定場所と変更

普通にエクセル(2002Sp3)を起動して、マクロ登録を行います。
そのマクロに「キー割り当て」で「Ctrl+Shift+S」を割り当てました。
マクロの内容は仮に下記のようなものだとします。
-----------------------
Sub Macro1()
MsgBox "###"
End Sub
-----------------------
これを、MyTools.xlaとして保存します。
アドイン設定でMyTools.xlaを使用できるようにします。
エクセルを一度終了して、新規にエクセルを起動し、先ほど行った「Ctrl+Shift+S」を押すと、メッセージボックスが表示されます。
(キー割り当てが有効に動作している)
ここまでは問題ありません。

本題の、MyTools.xlaの中では、
「キー割り当て」「Ctrl+Shift+S」
これは、どこで設定されているのでしょうか。
キー割り当てを変更しようとした時に見つけることができませんでした。

よろしくお願いします。

Aベストアンサー

ツール→マクロ→マクロ(Alt+F8)
マクロ名(Macro1)を指定して「オプション」
その中に「ショートカットキー」の設定がある

QExcelでマクロ実行中に画面を固定する方法

Excelでマクロ(VBA)を実行しているとお考えください。
内容は他のシートのデータを別のシートにコピー&ペーストするとお考えください。
すると、画面がめまぐるしく動きます。
これをとめる方法をご存知の方教えていただければうれしいです。
(以前、やったことがあるんですが、忘れてしまいました)
(また、検索で調べようとしたのですが、どのようなキーワードで検索すればいいのかわかりませんでした(私のキーワードでは見つかりませんでした))
よろしくお願いいたします。

Aベストアンサー

はじめまして.

以下のコマンドでできると思いますよ。

マクロの最初に
Application.ScreenUpdating = False '画面更新抑止
を入れて、

マクロの最後に
Application.ScreenUpdating = True '画面を更新
を入れる。

こんなのでどうでしょう!?
では。

Qエクセル:マクロの保存先(I):どれを選択するの?

【新しいマクロの記録】→マクロの保存先(I):
(1)個人用マクロブック
(2)新しいブック
(3)作業中のブック
どれを選択すればいいのでしょうか?
次の場合は、(1) (2) (3)の どれを選択すればいいか?

◆マクロ専用のファイルにマクロを記録して、必要なときに呼び出して使いたい。

Aベストアンサー

私の方法を紹介しておきます。

>【新しいマクロの記録】→マクロの保存先(I):

は、100%「作業中のブック」に保存します。

記録マクロのレベルは、絶対に、「個人用マクロブック」には登録しません。

きちんとした名前をつけ、きちんとコーディングをしなおし、それから作動試験をして、いろんなケースの際にもエラーなど出ないようにしてから、個人用マクロブックに登録します。

個人用マクロブック側は、大きなマクロにはしません。そして、ツールバーに登録します。もし、ふだん使うことのないけれど便利だとか、大きなマクロの場合は、アドインにして呼び出します。

ただし、マクロを登録したブックを開いている限りは、他のブックでも、そのマクロは使えますから、ふつうは、アドインにする必要はありません。ユーティリティのブックとして、開けばよいわけです。

それと、XLStartの代替フォルダは、Personal.xls のみにしないと、誤動作を起こします。なるべく、使わないほうが無難だと思っています。

もし、XlStartフォルダなら、個人用は、標準的には、以下の場所になっているはずです。設定の必要はありませんが。

C:\Windows\Profiles\<ユーザー名>\Application Data\Microsoft\Excel\Xlstart

私の方法を紹介しておきます。

>【新しいマクロの記録】→マクロの保存先(I):

は、100%「作業中のブック」に保存します。

記録マクロのレベルは、絶対に、「個人用マクロブック」には登録しません。

きちんとした名前をつけ、きちんとコーディングをしなおし、それから作動試験をして、いろんなケースの際にもエラーなど出ないようにしてから、個人用マクロブックに登録します。

個人用マクロブック側は、大きなマクロにはしません。そして、ツールバーに登録します。もし、ふだん使うことのな...続きを読む

QVBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。

マクロを含むエクセル(EXCEL2000)をHTMLのページからハイパーリンクで呼び出しています。そのエクセルでボタン操作に従い罫線やセルの着色を行っています。しかし、着色結果が更新されません。スクロールバー等で画面を移動すると正しく着色されています。このエクセルを通常に起動した場合は、問題なく動作するのですが、シート全体を更新する方法を教えて下さい。
各関数では、以下のスクリーンアップデータの処理を入れています。
Application.ScreenUpdating = False
    (処理)
Application.ScreenUpdating = False

Aベストアンサー

たぶん、EXCEL独特の問題だと思うのですが、HTML の場合、すでに色の部分を表面上で使用しているので、それでメモリが占有させているのではないかと私は思っています。

他にも、

 ActiveWorkbook.HTMLProject.RefreshDocument True

というのがありますね。
ホスト アプリケーション内のブックに含まれる HTML プロジェクトを更新する、というのがありますね。

QEXCELのキーボードショートカットの空きを教えてください。

 エクセルでマクロを組んで,キーボードショートカットに割り当てようと思うと,元々のショートカットの割り当てが多く,また,Windows標準のショートカットもあるので,どこが空いているのか良く分かりません。

 割り当てたいマクロが結構多いのですが,

 CTRL+キー,及びShift+CTRL+キーの空きをご存じの方は,お教えいただけませんでしょうか?

 特に,よく使う操作はCTRL+キーに割り当てたいので,こちらだけでも分かると非常に助かります。

Aベストアンサー

http://www.excel7.com/excel_shortcut.htm

のページにショートカット一覧表がありました

参考URL:http://www.excel7.com/excel_shortcut.htm

QVBAでドラッグ・アンド・ドロップ

エクスプローラからファイルを選択して、ワードもしくはエクセルにD&Dしファイル名を取得したいと思います。

VBだとOleDragDropでいけるようですが、VBAにはこのイベントがありません。

ということは、無理ってことなのでしょう赤?

Aベストアンサー

こんにちは。

Excelしかやったことがありませんが、エクスプローラを開いて、ドラッグ&ドロップすれば、ふつう、そのままでいけるはずですが?

それにチェック機能をつけるのでしたら、Office では、ユーザーフォームの[ツール]メニューの、[その他のコントロール]で、Microsoft Listview Control (SP4) があるかと思います。そのListview Control に 以下のように、OleDragDrop イベントをつければよいと思います。

以下のコードでは、Explorer は、自分で閉じてください。

Excelの場合。
サンプルコード

'<UserFormモジュール以外>
Sub uformShow()
Dim myPath As String, myID As Double
myPath = ThisWorkbook.Path
myID = Shell("Explorer.exe /e, /root," & myPath, vbNormalFocus)
If myID = 0 Then Exit Sub
UserForm1.Show 0
End Sub

'<ユーザーフォームモジュール>
Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, _
                 Effect As Long, Button As Integer, _
                 Shift As Integer, x As Single, y As Single)

Dim i As Long
With Me
  AppActivate Me.Caption
  .ListView1.ListItems.Clear
  If Data.Files.Count < 1 Then Exit Sub
  For i = 1 To Data.Files.Count
   If InStrRev(Data.Files(i), "xls") > 0 Then
    Workbooks.Open (Data.Files(i))
   Else
    MsgBox "Excelの標準ファイルではありません。", vbCritical
   End If
  Next i
End With
End Sub

Private Sub UserForm_Activate()
  With Me.ListView1
    .OLEDragMode = 1
    .OLEDropMode = 1
    .View = 2
  End With
End Sub

こんにちは。

Excelしかやったことがありませんが、エクスプローラを開いて、ドラッグ&ドロップすれば、ふつう、そのままでいけるはずですが?

それにチェック機能をつけるのでしたら、Office では、ユーザーフォームの[ツール]メニューの、[その他のコントロール]で、Microsoft Listview Control (SP4) があるかと思います。そのListview Control に 以下のように、OleDragDrop イベントをつければよいと思います。

以下のコードでは、Explorer は、自分で閉じてください。

Excelの場合。
サンプル...続きを読む

QExcelVBA ショートカットファイルからリンク先を取り出す

こんにちは!
「.lnk」などのショートカットファイルからリンク先のパスを取り出したいのですが、どうやればいいのでしょうか?
エクセルシートのセル上に、ショートカットファイルのパスが書いてあります

Aベストアンサー

セルから.lnkのパスを取得する形になってないですが、
少し改造すればお望みのことが出来ると思います。

Sub test()
Dim objWSShell As Object
Dim objSC As Object
Set objWSShell = CreateObject("WScript.Shell")
Set objSC = objWSShell.CreateShortcut("C:\Documents and Settings\marbin\デスクトップ\test.lnk")
MsgBox objSC.TargetPath
End Sub


人気Q&Aランキング