Excelで「全シートでA1セルに移動して元のシートに戻る」ショートカットを作る


##やったこと

1. 「全部のシートでA1セルに移動して元のシートに戻る」マクロを作って、

2. アドインとして保存(ブック依存じゃなくていつでも使えるように)し、

3. クイックアクセスツールバーに登録して、ショートカット一発で動くようにする。

##はじめに

###参考URL
[Excelで全シートのカーソルをA1に移動する”お作法”を自動化するVBAマクロ – NAEの仕事効率化ノート](https://work.naenote.net/entry/excel-move-cursor-to-a1)
コーディングの参考に

[マクロをアドインにして他のブックで使用する | Excel2013 | 初心者のためのOffice講座](https://hamachan.info/win8/excel/addin.html)
マクロの登録の仕方

###作ろうと思ったきっかけ

Excelを業務で使っていて最近やったやらかしの一つに、**「人の使ったファイルを開いて作業してたけど上までスクロールしてないのに気づかなくて何行か分まるっとデータがすっぽ抜けた」**というのがある。
これを外部向けの資料とかでやるともちろん怒られるし、数字が合わなくてえらいことになるのは自明である。
「一度ミスればこれからは気を付けるだろう、だから心配しなくていい」というありがたいお言葉をいただいたが、そんなもんはいつか忘れるのである。
なので**全シートA1にボタン一発でいくようにしとけば、スクロール忘れでデータが抜けるなんてことはなくなるはず。**

###A1に移動というお作法

[Excelで全シートのカーソルをA1に移動する”お作法”を自動化するVBAマクロ – NAEの仕事効率化ノート](https://work.naenote.net/entry/excel-move-cursor-to-a1)

そもそも「人にExcelファイルを渡すときは、全部のシートでカーソルをA1セルに移動させて、最初のシートをアクティブにして保存してから渡しなさい」というお作法的なヤツがあるらしい。
"ビジネスマナー"や"お作法"と化した手順についてはわりと猜疑的な方だが(何千行とある台帳的なファイルで毎回上からたどるのか、とか)、今回はおいておく。
少なくとも中途半端なスクロールで痛い目を見たのは間違いないので、必要なこともあるのだろう、と。

##実装

参考URLからのカスタマイズとして、大体のサイトは「全シートA1移動→最初のシートに移動」としているところを、「今アクティブなシートに戻る」ように変更した。
作業中にふと上を見たくなることもあるだろう、と。

###コーディング

コード自体に難しい要素はない。

```vb:A1move.xlam
Sub A1move()
    Dim wsnow As Worksheet
    Dim ws As Worksheet
'現在のシートを取得
    Set wsnow = Application.ActiveSheet
'各シートでカーソルをA1セルに移動
    For Each ws In Worksheets
        ws.Select
        ws.Range("A1").Select
    Next
'取得しておいた現在のシートに戻る
    wsnow.Select
End Sub
```

###マクロの登録

参考:[マクロをアドインにして他のブックで使用する | Excel2013 | 初心者のためのOffice講座](https://hamachan.info/win8/excel/addin.html)

###手順

1. コードを写した後に、ワークシートの方をアクティブにしてF12で別名保存ダイアログを開く
2. 拡張子を「Excel アドイン(*.xlam)」に変える
3. 自動でAddInsフォルダに保存先が切り替わるので、適当な名前つけて保存する
    - マクロのプロシージャ名にしておくと分かりやすい(今回なら「A1move.xlam」)
4.  アドインを登録する
5.  開発>アドインを選択
6.  保存したアドイン「A1move」にチェックを入れて、OKを選択
7.  クイックアクセスツールバーに登録する
8.  最上部メニュー「クイックアクセスツールバーのユーザー設定>その他のコマンド…」を選択
9.  プルダウンメニュー「コマンドの選択」で「マクロ」を表示
10.  「A1move」を選択して、「追加」で、クイックアクセスツールバーに登録されたことを確認
11.  OKで戻る
12.  最上部のクイックアクセスツールバーに、「A1move」が登録されたことを確認

これで、「Alt+(数字)」キーで常にA1moveが使えるようになった。

##マクロって何？とか詳しくない人向け

何もわからないけどできるようになりたい！という人向けに、丁寧な方の手順も書いておく。

<details><summary>最初っから手順をなぞる</summary><div>

1. 新規エクセルファイルを開く
2. 「Alt+F11」キーを押す(→VBAの開発画面が開く)
3. 上部メニューの「挿入>標準モジュール」を選択(→Module1(コード)って書いてる白くてでっかい入力画面が出る)
4. 以下のコードをコピーして、Module1に貼り付ける


```vb:
Sub A1move()
    Dim wsnow As Worksheet
    Dim ws As Worksheet
'現在のシートを取得
    Set wsnow = Application.ActiveSheet
'各シートでカーソルをA1セルに移動
    For Each ws In Worksheets
        ws.Select
        ws.Range("A1").Select
    Next
'取得しておいた現在のシートに戻る
    wsnow.Select
End Sub
```

5. 開かれたVBAのウィンドウをほっておいて、エクセルの元の画面をアクティブにする
6. 「F12」キーを押す(→「別名で保存」の画面が開く)
7. メニュー「ファイルの種類」をクリックして、「Excel アドイン(*.xlam)」を選択する
8. ファイル名を「A1move.xlam」に変えて、保存する
9. 「開発」タブを表示させる
    10. 上部メニュー「ファイル>左側のオプション」をクリック(→Excelのオプションが開く)
    11. 左メニュー「リボンのユーザー設定」を開く
    12. 右の窓「リボンのユーザー設定」の中の、「開発」にチェックを入れて、OKを押す(→Excelの上部メニューに「開発」タブが表示される)
13. 上部メニュー「開発>アドイン」をクリック
14. さっき保存したアドイン「A1move」が有効なアドインの中にあるので、チェックを入れてOKをクリック
15. エクセルの画面の最上部メニューに「A1move」という名前の、四角がみっつ組み合わさったようなアイコンが出来ている
16. 「Alt」キーを押すと、そのアイコンの上に数字が表示されるので、今後は「Alt」+「その数字のキー」を押すことで、いつでもA1moveが使えるようになる。 

</div></details>

##おわりに
ブックの起動時に自動で実行される(参考:[VBA基本(そのブックを開いた時に自動実行)](http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_130_04.html))とかもやってみたかったけど、ブック依存マクロとしてしか保存できず、どのファイルでも自動で実行にはならないみたいなのでひとまずあきらめた。

こいつのおかげでExcel地獄諸氏の貴重な数十秒とうちのようなやらかしがなくなることを祈る。