【コピペで簡単】仕事が超速い人になる~AutoHotkeyで生産性向上~

会社で働いていると、驚くほど仕事が速い人に出会うことがあるのではないでしょうか。
あの人みたいに速く仕事を回したいと思って頑張ってみても、やっぱり自分には無理だとあきらめてしまう人も多いと思います。

私も基本的に先送り体質で仕事も遅い人間なのですが、周りに仕事が速いと思わせることはできると思っています。

今回はその秘密の一つ、キーボード操作の自動化方法をご紹介します。
プログラミング言語のようなものも登場しますが、基本的にコピペだけで今日から皆さんの環境でも利用できるように解説していきたいと思います。

ぜひ一度騙されたと思ってお試しください。

AutoHotKeyとは

「AutoHotKey」はキーボードやマウスの入力を自動化するためのWindows専用ツールで、簡単なプログラミング言語のようなスクリプトを書くことで、自由に動作をカスタマイズできます。GUIも作成できたり、モニタ上の部分イメージにマッチする座標を取得したりとかなり高機能です。

世の中では、RPAという言葉とともに有償・無償のツールがたくさん出回っていますが、AutoHotKeyは主にキーボード操作をメインにして超軽量・お手軽にPC作業を自動化できるものです。

私は会社でも自宅でもこのAutoHotKeyを愛用していて、特に仕事ではAutoHotKeyがなければ生産性が半減すると言っても過言ではありません。
AutoHotKeyがないPCはPCじゃないと言うくらい活用しています。

ちなみに余談ですが、拙作のキーボード配列ヘルパーなどもAutoHotKeyで作成しています。

本記事では私のAutoHotKeyの導入方法から使い方まで、私のオリジナルスクリプトのサンプルとともに紹介します。

では始めます。皆様の生産性の向上を祈って・・・

準備(AutoHotKeyのインストール)

※すでにAutoHotKeyを使っていてスクリプトのサンプルをすぐに見たい人はコチラから
※AutoHotKeyのインストールはしているけど使い方が分からない方はコチラから

  1. まずは下記のサイトに行きます。
    https://www.autohotkey.com/
  2. 画面の中程にある「Download」ボタンをクリックします。

  3. 続いて表示されるボタンの中から「Download Current Version」をクリックします。

  4. ダウンロードした「AutoHotkey_1.1.xx.xx_setup.exe」というファイルをダブルクリックして実行します。

  5. 下のような画面が表示されるので「Express Installation」ボタンをクリックします。

  6. インストールが完了すると下のような画面が表示されるので「Exit」ボタンをクリックします。

以上でAutoHotKeyのインストールは完了です。

AutoHotKeyの基本

スクリプトの準備

AutoHotKeyはインストールしただけでは何もできません。スクリプトというテキストファイルにAutoHotKeyのプログラムを書いて、それを実行することで色々なことができるようになります。

でもご安心ください。プログラムを自分で作成する必要はありません。本記事で紹介するものをそのままコピーして自分のスクリプトファイルにコピペするだけで使えてしまいます。

それでは、最初に空のスクリプトファイルを用意しましょう。
メモ帳を起動し、以下の内容をコピーして貼り付けて好きな場所に「MyScript.ahk」という名前で保存してください。

;スクリプトリロード
;Shift+Ctrl+F5
^+F5::
    Reload
return

注意点ですが、ファイルの種類と文字コードの欄を次のように変更してから保存してください。

項目選択内容
ファイルの種類すべてのファイル (.)
文字コードUTF-8

保存できたら、「H」というアイコンで表示されますので、これをダブルクリックします。

ダブルクリックしても特に何も起こりませんが、タスクトレイに緑色の下のようなアイコンが表示されていれば成功です。

スクリプトのスタートアップ登録

上記で作成したMyScript.ahkは今後Windowsを起動する度に自動的に実行される方が便利なので、以下の手順でスタートアップに登録します。

MyScript.ahkのアイコンを右クリックして、「ショートカットの作成」をクリックします。

 ↓右クリック

 ↓ショートカットの作成

次に、Windows10のタスクバー左端のWindowsアイコンを右クリックし、「ファイル名を指定して実行」をクリックします。

名前欄に以下をコピペしてOKボタンをクリックします。

shell:startup

開いたスタートアップフォルダに、先ほど作成したMyScript.ahkのショートカットをコピーします。(移動でも可)

これで次からWindowsの起動と同時にMyScript.ahkが実行されます。

スクリプトの作成

先ほど作成したMyScript.ahkをメモ帳で開きます。
開き方が分からなければ、タスクトレイの「H」のアイコンを右クリックして表示されるメニューから「Edit This Script」をクリックしても開けます。

以降で色々と私が作成した便利なスクリプトを紹介しますので、欲しいと思ったものをここに貼り付けて保存していってください。

便利なスクリプト

ここでは実際に私が生産性向上のために作成して使っているスクリプトをご紹介したいと思います。
早速ですが、これから紹介するスクリプトで使っているIME.ahkというファイルを下記サイトからダウンロードして、MyScript.ahkと同じフォルダに置いておいてください

これから紹介するスクリプトはほぼ全て以下の形式になっています。
この例では、

指定したウィンドウ(Chrome)にフォーカスがあるときだけ、Ctrl+Eを押すと一番内側に記述した内容が実行される

という意味になります。

上記例のCtrl+Eという部分を「ホットキー」と呼びます。キーボードからこのホットキーを入力すると発動するという指定です。
ホットキーの指定方法は以下の通りです。

モディファイアキーというのは全部で4つありそれぞれ、以下の記号で表されます。

モディファイアキー記号
Ctrl^
Alt!
Shift+
Windowsキー#

これらの記号を組み合わせて、ホットキーを定義します。
例えば、Shift+Alt+Vというホットキーなら「!+v」または「+!v」と記述します。モディファイアキーの記号の順番は問いません。

日本語入力のOn/Off

Macの日本語キーボードには、かなキーと英数キーがスペースキーの右と左に独立して存在しています。
これにより脊髄反射的に「かな」か「英数」かを指定することができるのですが、Windowsの日本語キーボードでは半角/全角キーが1つだけで、かなと英数の切り替えはトグル式になっています。

これは、半角/全角を切り替える際に常に現在のIMEの状態を把握しておかなければならず、英数入力をしたいのに全角で入力してしまったり、その逆の体験をして苦労されている方は大変多いと思います。
おそらく、Windowsを使ったことがある日本人全員が感じたことのあるイライラではないでしょうか。

私は以下のスクリプトで、スペースキーの右にある変換キーを「かな」に、左にある無変換キーを「英数」にして、Macのようにしています。

これにより、変換キーと無変換キーを失うことになるのですが、この2つのキーの使用頻度は非常に少ない方が一般的ではないかと思います。少なくとも私自身はこれらのキーがなくて困ったことはありません。

これを利用するには、メモ帳で開いたMyScript.ahkの最後に、以下をコピーして貼り付けてください。

#Include, IME.ahk

;IMEのON/OFF
vk1Csc079::
    IME\_SET(1)
return
vk1Dsc07B::
    IME\_SET(0)
return 

貼り付けたら上書き保存し、Shift+Ctrl+F5キーを押してください。そうすると更新したスクリプトファイルが再読込され、貼り付けたスクリプトが有効になります。

もう変換キーで全角、無変換キーで半角に切り替わる状態になっていると思います。
このような設定はIME側で行っているという方もいるかもしれませんが、IMEの状態や日本語入力システムの種類に依存しないため、こちらの方がおすすめです。

引用貼り付け

メールを書いていると、相手のメールの一部分を引用して、その下に自分のコメントを書くということが仕事の現場で頻出します。↓のようなものですね。

> あれはどうなりましたか?
今日やります。

メーラーの機能で引用記号を行頭につけているという方も多いと思いますが、最近はこのような引用を使うのはメーラーの中だけではなくなってきました。
たとえばWebメールだったり、Webサイトのフォームだったり、Teams、Slackといったチャットツールなどでも引用記号を使いたいことは多いです。

私は以下のスクリプトで、相手のメッセージをコピーして貼り付ける際にCtrl+Vの代わりにShift+Ctrl+Vを押すことで、自動的に行の先頭に引用符をつけています。

;引用貼り付け
;Shift+Ctrl+v
^+v::
    StrRefMsg := "> " + RegExReplace(Clipboard, "\n", "`n> ")
    Clipboard = %StrRefMsg%
    Send, ^v
return

これもMyScript.ahkの下に貼り付けて上書き保存してCtrl+Shift+F5で有効になります。
どんなアプリでも簡単に引用記号をつけられて便利です。

数字の桁区切りカンマ

Excelなどでは数字の桁区切りカンマはセルの書式設定をすれば自動的につけてくれますが、メールなどで金額を書くときには自分でカンマを入力しなければいけません。

しかし、「,」というのはテンキーにありません。金額などの数字をテンキーで入力している際に、カンマを入れながら入力したいと思うと、一旦テンキーから右手を離して、キーボードの , を入力して、またテンキーに戻ってくるという操作になり、非常に生産性が低下します。

私は以下のスクリプトで、Ctrl+ . (テンキーのピリオド)で「,」を入力できるようにしています。
右手はテンキーに置き、左手で左Ctrlを押す準備をしておきながら、カンマを入力したいタイミングで左Ctrlを押しながら、テンキーの . を押すのです。

;テンキーでカンマ
;Ctrl+.
^NumpadDot::Send `,

金額を扱うことが多い営業さんなどは重宝すると思います。

日時の入力

PCを使った仕事をしていると、ファイル名に日付をつけることがよくあります。例えば、「20170205_見積書.xlsx」などのようにyyyymmddの数字8桁をファイル名につけたりします。
こういうものを毎回テンキーで入力していたりしないでしょうか?

私は以下のスクリプトで、Shift+Ctrl+Tでその日のyyyymmddが入力できるようにしています。

;日時入力
;Shift+Ctrl+T
$+^t::
    TimeString = A\_Now
    ;FormatTime, TimeString, yyyy MM dd hh:mm R
    FormatTime, TimeString, TimeString, yyyyMMdd

    ime\_mode := IME\_GET()
    IME\_SET(0)
    Send,%TimeString%
    IME\_SET(ime\_mode)
return

上記のスクリプトでは、通常Shift+Ctrl+tを表すなら「+^t」で良いところを、「$+^t」のように先頭に$を付けています。
これは、他のAutoHotKeyスクリプトの中で「Shift+Ctrl+t」のキーコードを送った際に、この日付入力のスクリプトが実行されないようにするためのものです。

例えば、他のアプリでもともとShift+Ctrl+tに何か機能が割当たっていた場合、Shift+Ctrl+tを押すとその機能は実行されず、日付が入力されてしまいます。
その機能のショートカットをAutoHotKeyで実現したいとすると以下のように書くわけですが、この「$」が付いているお陰で、アプリケーションに本来のShift+Ctrl+tを送信できるというわけです。

^d::
    send,^+t
return

括弧囲み

例えばテキストを入力したあとで、特定の部分をカギ括弧で囲みたい、ダブルコーテーションで囲みたいということがよくあると思います。
括弧というのはキーボード上、開始括弧と終了括弧は近い位置に配置してあり、開始と終了を連続して入力しやすいようになっています。

例えば「」というのは、エンターキーの左側のキーを上下と押すだけですし、()であればShiftを押しながら数字の89を連続で押すことで入力できます。
また、半角のダブルコーテーションやシングルコーテーションは開始も終了も同じ文字です。

これらの括弧囲みを効率化するために私は下記のスクリプトを作って使っています。
使い方は、括弧で囲みたい文字を選択し、Ctrl+8を押します。
すると括弧を入力するダイアログを表示し、ここに入力した括弧文字で選択していたテキストを囲むというものです。

言葉だけで説明するのは難しいので、動作している様子の動画を載せておきます。

;括弧囲み
;Ctrl+8
^8::
    InputBox, UserInput, 囲み, 対になる囲み文字を入力, , 240, 130
    If (ErrorLevel = 0)
    {
        If (StrLen(UserInput) > 0)
        {
            bk=%ClipboardAll%
            Clipboard=
            Send,^x
            ClipWait, 0.5
            If (Clipboard)
            {
                If (StrLen(UserInput) >= 2)
                {
                    bText := SubStr(UserInput, 1 , 1) . Clipboard . SubStr(UserInput, 2 , 1)
                }
                Else If (StrLen(UserInput) = 1)
                {
                    bText := UserInput . Clipboard . UserInput
                }
                Clipboard=%bText%
                Send, ^v
            }
            Clipboard=%bk%
        }
    }
return

なぜCtrl+「8」かというと、“(”記号のキーだからというだけです。


ここまではシステム全体に効くスクリプト(つまりWindowsのどこでも、どんなアプリでも有効なスクリプト)でしたが、次からは特定のアプリケーションや画面だけで動作するスクリプトになります。

自動ログイン

最近の社内システムはほぼ例外なくWebベースだと思います。SSO(シングルサインオン)の仕組みを導入してくれている親切な会社でない限り、システムごとにIDとパスワードの入力を求められます。

私自身はパスワードは「KeePass」というパスワード管理ツールで管理していて、IDとパスワードの自動入力もこのツールで行っています。
しかし、そこまでのものは必要ないという方や、検証環境などでは、AutoHotKeyを使ってお手軽にIDとパスワードを自動入力する方が便利です。
私は検証環境でこのスクリプトを利用しています。検証作業で毎回ログインIDとパスワードを入力するというのは最も生産性の悪い行為だと思います。

ただしスクリプトにパスワードを平文で記載することになるので、セキュリティには十分ご注意ください。

;Google Chrome 、IE、Edge上の設定
#IfWinActive ahk_class Chrome_WidgetWin_1  ahk_class IEFrame ahk_class Chrome_WidgetWin_1
    ;ID・パスワード自動入力
    ;Ctrl+E
    ^e::
        send,○○○○○
        sleep,200
        send,{Tab}
        sleep,200
        send,●●●●●
        sleep,200
        send,{Enter}
    return
#IfWinActive

このスクリプトは少し説明が必要です。

○○○○○の部分はユーザーIDに、●●●●●の部分はパスワードに置き換えてください。

send,{Tab}という部分はキーボードからTabキーを入力するのと同じ意味になります。
同様にsend,{Enter}はエンターキーを押したことになります。
sleep,200というのは200ミリ秒待つという意味です。

つまり上記の例では、最初にユーザーID欄にカーソルがあるという前提で、以下の操作を自動化していることになります。

  1. ○○○○○を入力 (ユーザーID入力)
  2. 200ミリ秒待つ
  3. TABキーを入力  (パスワード欄にカーソル移動)
  4. 200ミリ秒待つ
  5. ●●●●●を入力 (パスワード入力)
  6. 200ミリ秒待つ
  7. エンターキーを入力 (ログイン実行)

途中で200ミリ秒待っているのは、あまりに高速に動作してしまうため、カーソル移動などが間に合わないことがあるためです。
性能が低いPCでは待ち時間の数値を増やしたりする必要があるかもしれません。

このスクリプトはCtrl+Eで発動するようになっていますが、ChromeとIEとEdgeの画面内でのみ有効になります。AutoHotKeyの詳細な文法説明はこの記事の趣旨と外れるので省略しますが、以下の部分で有効になるアプリケーションを絞っています。

#IfWinActive ahk_class Chrome_WidgetWin_1  ahk_class IEFrame ahk_class Chrome_WidgetWin_1

「ahk_class Chrome_WidgetWin_1」がChrome、「ahk_class IEFrame」がIE、「ahk_class Chrome_WidgetWin_1」がEdgeを指していて、それらをスペースで区切って並べることで、
Chrome、IE、Edgeのいずれかを使っているときだけ有効になるようにしています。

他のアプリケーションに絞りたい場合、上記の「ahk_class IEFrame」のようなものを知る必要がありますが、これは以下のように調べることができます。

タスクトレイの「H」アイコンを右クリックし、「Window Spy」をクリックします。

そして、調べたいアプリケーションをマウスで選択すると下図のように取得することができます。
例えばメモ帳の場合は「ahk_class Notepad」となります。

このキータイプをエミュレートする技は簡単ですが、かなり使えます。
キーボードで操作できるものは全て自動化できるということだからです。

上記例では{tab}と{enter}が使われていますが、そのほかにキーボード操作でよく使うキーを挙げておきます。

キー表記
タブ{Tab}
エンター{Enter}
スペース{Space}
コンテキストメニューキー{AppsKey}
カーソルキー(←→↑↓){Left} {Right} {Up} {Down}
エスケープ{Esc}
バックスペース{BS}
デリート{Delete}

Webの画面は、ほとんどがTabキーでフォーカスを移動でき、Enterキーでボタンを押すことができますし、プルダウンメニューなどはカーソルキーで選択できます。

例えば以下のようなフォームでその時刻の東京から大阪までの経路を調べるという操作を自動化するとします。

  1. Tabキーを1回押す
  2. 「東京」と入力する
  3. Tabキーを1回押す
  4. 「大阪」と入力する
  5. Tabキーを9回押す
  6. エンターキーを押す

という操作になり、これをAutoHotKeyのスクリプトで記述すると以下になります。

send,{Tab}
send,東京
send,{Tab}
send,大阪
send,{Tab 9}
send,{Enter}

これを前述の自動ログインスクリプトのsend,○○○○○で始まる部分と入れ替えれば、好きな自動化スクリプトが簡単に作成できます。

勤怠の時刻入力

会社などの勤怠管理システムに、毎日開始時刻と終了時刻を入力している方は多いのではないでしょうか。
時間を入力する際に現在の時刻を確認し、時間欄にカーソルを入れて時を入れ、分欄にカーソルを移動して分を入力する、、、といった操作ですが、意外と面倒です。

例えば、時間と分が別々の入力ボックスになっている下のようなフォームに一発で現在時刻を入力するスクリプトは以下です。

;勤怠現在時刻入力
;Alt+E
!e::
    TimeStringH = A_Now
    TimeStringM = A_Now
    FormatTime, TimeStringH, TimeString, H
    FormatTime, TimeStringM, TimeString, mm
    Send,%TimeStringH%{tab}%TimeStringM%
return

時間のテキストボックスにカーソルがある状態で、Alt+Eを押すと自動的のその時の時刻が入力されます。

マウスの拡張

AutoHotKeyはキーボード操作だけでなく、マウス操作も自動化できます。

最近のマウスは、「左ボタン」、「右ボタン」、「ホイール上下スクロール」が基本装備されています。
これに「進むボタン」、「戻るボタン」、「ホイール押し下げ」、「ホイールの左チルト」、「ホイールの右チルト」を加えたものが一般的なOAマウスの定番だと思います。

AutoHotKeyには標準でこれらのキーが使えるように、ホットキーの定義に使えるものとして以下の9種類が用意されています。

マウスボタン指定文字
左ボタンLButton
右ボタンRButton
中ボタン (ホイールクリック)MButton
拡張ボタン1 (戻る)XButton1
拡張ボタン2 (進む)XButton2
ホイール↓WheelDown
ホイール↑WheelUp
チルト左WheelLeft
チルト右WheelRight

お使いのマウスのボタンが上記だけであれば、例えば以下のようなスクリプトが書けます。

特定のアプリだけCtrl+ホイールの動作を逆にする

多くのアプリケーションでは、Ctrl+マウスのホイールで画面や文字の拡大・縮小ができます。
通常の場合、Ctrl+ホイールUPで「拡大」、Ctrl+ホイールDownで「縮小」なのですが、特定のアプリケーションではそれが逆になっていることがあります。
アプリ側の設定で変更できないと、いつもこのアプリだけ挙動が逆で間違ってしまうということが起こります。

そんなとき、以下のスクリプトで指定したアプリでCtrl+マウスホイールの挙動を反転させられます。
私が良く困るのは、DocuWorks形式のファイルを表示するときに使う「DocuWorks Viewer Light」です。
このアプリケーションはCtrl+ホイールの拡大・縮小の挙動が一般的なアプリと逆になっているにもかかわらず、設定でそれを入れ替えることができません。

;DocuWorks Viewer LightでCtrl+ホイールを逆にする
#IfWinActive ahk_class DocuWorksViewerLightMainWindow
    ^WheelDown::^WheelUp
    ^WheelUp::^WheelDown
#IfWinActive

ただし経験上、上記のマウスの標準ボタンは誤動作をすることがあるため、あまり上記の9種類のボタンについてはAutoHotKeyで挙動をいじくらない方が良いです。

ゲーミングマウスを活用する

会社でゲーミングマウスを使っている人は少ないかもしれませんが、自宅のPCでは結構使っている人もいると思います。
私もゲームは一切しませんが、自宅PCのマウスはゲーミングマウスです。

このようなゲーミングマウスにある”一般的ではない”ボタンにAutoHotKeyで色々な機能を割り当てるやり方がおすすめです。

ちなみに↓これです。安いのに高性能でボタンがたくさんついていて、ゲームじゃなくても非常に便利です。

Amazon | エレコム ゲーミングマウス 【DUX】 有線 14ボタン 3500dpi ハードウェアマクロ対応 M-DUX50BK | エレコム | パソコン・周辺機器 通販
エレコム ゲーミングマウス 【DUX】 有線 14ボタン 3500dpi ハードウェアマクロ対応 M-DUX50BKがパソコン・周辺機器ストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無料(一部除く)。

このようなマウスは専用の設定ソフトがついていて、そのソフト上でどのボタンにどういう機能を割り当てるという設定ができます。
しかし、マウスの設定ソフトも万能ではなく、割り当てられる機能が限られているものも多く、たくさんボタンがあってもうまく使えていないこともあると思います。

例えば私の使っている上記マウスの場合、下図のようなソフトがついてきます。

しかし、あくまでもこのような設定ソフト上で用意された機能しか手取当てられないのが一般的です。
そこで私は以下のようにこれらのマウス設定ソフトとAutoHotKeyを連動させて利用しています。

これには、AutoHotKeyで用意されているファンクションキーがF1~F24であることを利用します。
まずマウスの設定ソフト側で、ゲーミングマウスのたくさんあるボタンをそれぞれF13~F24のいずれかに割り当ててしまいます。

そしてAutoHotKey側で、上記で割り当てたF13~F24のキーをホットキーとして任意の機能に割り当てます。

なぜF13~F24かというと、通常のキーボードにはF12までしか存在しないからです。
つまりF13以降は押したくても物理的には押せないキーのため、ここをマウスのボタンとして利用してしまおうというわけです。

以下は、F13、F14、F15をそれぞれ、「貼り付け(Ctrl+V)」「コピー(Ctrl+C)」「保存(Ctrl+S)」に割り当てる例です。

F13::
    send,^v
return

F14::
    send,^c
return

F15::
    send,^s
return

このような簡単な機能だけではく、本記事の中で紹介したような機能を割り当てれば、マウスのボタン1つで一気に色々な自動化が行えます。

最後に

私はこのようなスクリプトを他にも大量に書いて、日々の業務の生産性向上を図っています。
ほとんどは個人的に便利な機能で万人受けするものではないのですが、その中でも一般的に受け入れられそうなものをピックアップして紹介してみました。

何か使えるものがあればそのままコピペしても良いですし、自分のスクリプトのアイデアにしていただくのも良いと思います。
少しでも皆さんの生産性向上に役立てば幸いです。

今後も汎用的なスクリプトを作成したら、本記事を更新して公開していきたいと思います。

コメント

  1. oooka より:

    AutoHotKeyを調べていてたどりつきました。とても興味深い使い方が色々あり参考になりましたです。カッコはそういうやり方もあるのか、と目から鱗でした。(「」戻る、を1キーに当ててたこともあったので)

    記事最後の「万人でない使い方」に興味が出てきました。「人はどこを短縮するのだろう」ということに興味があります。「普通だとこれこれこれの手間をしなければならないが、それをこのようにすればイライラせずにスムーズに行く」事例を集めることで、共通事項が見えて来るはずです。よろしければその解説もお願いします。

    • forestail より:

      コメントいただきありがとうございます。
      勇気をいただきましたので、今後万人受けしないものも臆せず晒していってみたいと思います。

タイトルとURLをコピーしました