t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

Excelからイミディエイトウインドウを素早く開いて自作コマンドを叩く方法

以前にVBAワンライナー(一行コマンド)を実行するための書籍を紹介した。
thom.hateblo.jp
※すでに絶版してしまったが、Amazonで中古本が手に入る。

ただ、これまでイミディエイトウインドウ自体を開くのにAlt+F11で起動し、マウスでイミディエイトウインドウを選択するという手順を踏むため、折角のコマンドがあまり格好よくない。
広いディスプレイを使っているなら、最初から横に並べて置けば良いけれど、ノートパソコンであればどうしてもExcelとVBEを切り替えて使うのが現実的。

これを素早く実行する方法を考えたので公開する。
さらに、ActiveSheetとか、Selectionとかを入力するのが手間なので、オリジナルのコマンドを作成してみた。

以下、自作コマンドを実行しているGIF動画
f:id:t-hom:20150816020805g:plain

Ctrl+iでイミディエイトウインドウが起動するように設定した。
標準でCtrl+iはセルの文字をイタリック(斜体)にするためのコマンドだが、普通、日本語で斜体は使わないので要らない。(要るときはボタンで良い)

最初のイミディエイトウインドウ起動に少々時間がかかっているが、以降は素早く起動している。

そしてVBEを閉じる時は、Alt+F4ではなく、Ctrl+Space→Cを使っている。
ホームポジションが崩れないので慣れるとその方がストレスが減る。

ちなみに、デスクトップのキーボードを使っていて、Ctrlキーが押しにくい人は、左手小指の付け根で押してみて欲しい。
押しやすいかどうかは個人差があるようだが、ホームポジションを崩さずに押せるし、指にも負担がかからない。

さて、入力しているsq20(Square 20pixel)や、sr(Selected Range)はオリジナルマクロである。
PERSONAL.XLSBプロジェクトのOneLinerモジュールに記述してある。

f:id:t-hom:20150816022842p:plain

問題は、イミディエイトウインドウでは、選択中のプロジェクトのマクロしか起動できないこと。

たとえば、OneLinerに書いたAshというプロパティをイミディエイトから参照してみた。
f:id:t-hom:20150816023239g:plain

別プロジェクトが選択されていると、エラーになる。

そこで、Ctrl+iでイミディエイトを起動する際に、プロジェクトも自動選択するようにした。

今回OneLinerモジュールに実装したコードはこちら

Public Sub ShowImmediate()
    Application.VBE.MainWindow.Visible = True
    Dim w As VBIDE.Window
    Set Application.VBE.ActiveVBProject = Application.VBE.VBProjects("★")
    For Each w In Application.VBE.Windows
        If w.Type = VBIDE.vbext_wt_Immediate Then
            w.SetFocus
        End If
    Next
End Sub

Public Sub sq20()  '方眼紙化
    ActiveSheet.Cells.RowHeight = 12
    ActiveSheet.Cells.ColumnWidth = 1.44
End Sub

Public Property Get ash() As Worksheet  'Active SHeet
    Set ash = ActiveWorkbook.ActiveSheet
End Property

Public Property Get abo() As Workbook ' Active BOok
    Set abo = ActiveWorkbook
End Property

Public Property Get awi() As Window 'ActiveWIndow
    Set awi = ActiveWindow
End Property

Public Property Get sr() As Range   'Selected Range
    Set sr = Selection
End Property

Public Sub Clip(Target As String)
    Dim CB As New DataObject
    CB.SetText (Target)
    CB.PutInClipboard
    Debug.Print "文字列「"; Target; "」をクリップしました。"
End Sub

※実行に必要な参照設定やセキュリティ設定の変更は以下記事を参照。
thom.hateblo.jp

今回、Ctrl+iへのマクロ割り当ては、Application.Onkeyではなく、通常のショートカット設定で対応している。

また、プロジェクト名を指定する以下の部分であるが、

Set Application.VBE.ActiveVBProject = Application.VBE.VBProjects("★")

これは以下の記事を参照。
thom.hateblo.jp


以上の環境を整えれば、ワンライナーも冗談ではなく便利に使えるようになる。
あとは書籍から使えそうなコマンドを拾って練習すると良い。

EXCEL VBA 1行コード活用辞典 (CD-ROM付き)

EXCEL VBA 1行コード活用辞典 (CD-ROM付き)

また、自分が良く使うマクロをPERSONAL.XLSB内に短い名前で登録しておけば、イミディエイトはなかなか良いランチャーになる。
引数を渡すこともできるので、Alt+F8やリボンのボタンで実行するよりも使いやすい。


おっと、Amazonでまた別のワンライナー本を発見。

エクセルマクロ超絶技巧 1行マクロで始めるVBAエキスパートへの道

エクセルマクロ超絶技巧 1行マクロで始めるVBAエキスパートへの道

こちらも絶版書のようだ。
安かったので早速注文した。
届いたらレビューしようと思う。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。