仕事でExcelを使っているが、もっと早く作業ができるようになりたい。
エクセル時短術の書籍を読んだが自分のやりたいことが実現できない。
こんな悩みを抱えていないでしょうか?
この記事ではシートの移動をショートカット1発で実現する方法を解説します。
基本的にExcel VBAを使っていきますが、ソースコードはすべて掲載し、改造のポイントも記載していこうと思います。
- エクセル作業を時短したい
- エクセルマクロを自分で作りたい
- 「シート移動」をキーボード1タッチだけで実現したい
第3回目は「シート移動」を1タッチで実現するマクロを作成します。
環境はWindows10、Microsoft Excel 2016で作成、動作確認しています。
さぁどうぞ!
「シート移動」で実現できること
シートの多いエクセルで目的のシートを探すのに苦労していませんか?
マウスでカチカチ、なかなか辿り着かない。同じような名前のシートで目がチカチカする。
こんなストレスを解消するためにキーボード1タッチで最初のシートへ移動、最後のシートに移動、シート名検索をできる方法を紹介します。
メニューに「開発」が表示されてない場合は、第1回の「ExcelBAを使う準備」を参照してください。
また、合わせて【新発想】ちりつもエクセル時短術② 1タッチ罫線もご覧ください。
マクロの記録
それではマクロの記録をしていきます。
メニューの「開発」 > 「マクロの記録」をクリック。
マクロの記録ウィンドウが表示されたら、マクロ名、マクロの保存先、説明を入力し「OK」ボタンをクリックします。
今回は後ほどコードを書き換えますので、ショートカットキーは入力しなくて良いです。
- マクロ名 :英字か数字で入力します。ただし先頭は英字のみ有効です。
- マクロの保存先 :すべてのエクセルで使えるようにするため、個人用マクロブックを選択します。
- 説明 :入力しなくても良いですが、律儀な方は入力してください。
これでマクロの記録が開始されたため、シート移動を操作します。
最後のシートを選択→最初のシートを選択。
操作し終わったら「記録終了」をクリックします。
マクロの作成
「開発」 > 「Visual Basic」をクリックします。
[Alt] + [F11] キーでもOKです。
VBAのウィンドウが表示されたら、「VBAProject(PERSONAL.XLSB)」配下の標準モジュール > 「Module1」をクリックします。
※過去にマクロの記録をしたことがある場合、「Module2」や「Module3」になっている可能性があります。
右側にソースが表示されますので、不要な部分を削除したり、追加のコーディングをします。
今回も、マクロの記録で生成されたコードは内容を理解するために使用します。
シートの選択は、Sheets(“シート名”).Selectとコーディングすれば良いことがわかります。
しかし、エクセルによってシート名は様々なため、シート名を固定にするわけにはいきません。
こういうときは、ネットで調べます。
「エクセル マクロ シート選択」とかで検索すると出てくると思います。
結果、Sheets(1).Selectとコーディングすれば最初のシートが選択できることがわかります。
次に最後のシートを選択する場合ですが、最後のシートは数字がわかりません。
ということで、ネットで調べます。
「エクセル マクロ 最後のシート選択」とかで良いと思います。
結果、Sheets(Sheets.Count).Selectとコーディングすれば最後のシートが選択できることがわかります。
ここで、この2つをサブルーチン化します。
Sub MoveFirstSheet()
On Error Resume Next
Sheets(1).Select '先頭シートを選択
End Sub
Sub MoveLastSheet()
On Error Resume Next
Sheets(Sheets.Count).Select '最終シートを選択
End Sub
シート名検索については少し複雑になりますので、実際のコーディングを見ながらポイントを解説します。
Sub SearchSheet()
Dim inti As Integer '親ルールの添字
Dim intj As Integer '子ループの添字
Dim strMsg As String 'メッセージ
Dim strSearchString As String '検索文字列
Dim intSearchLen As Integer '検索文字列の文字数
Dim intSheetLen As Integer 'シート名の文字数
Dim intStartPoint As Integer '検索開始位置
On Error Resume Next
strMsg = "シート名を入力してください(部分一致)" 'メッセージを退避
strSearchString = InputBox(strMsg) '検索文字入力
If Trim(strSearchString) = "" Then Exit Sub '検索文字列なしの場合終了する
intSearchLen = Len(strSearchString) '検索文字列の文字数を取得
For inti = 1 To Sheets.Count '全シート分ループする
intSheetLen = Len(Sheets(inti).Name) 'シート名を取得
If intSearchLen <= intSheetLen Then '検索文字数 <= シート名文字数の場合
For intj = 1 To (intSheetLen - intSearchLen) + 1 '検索回数分ループ
If strSearchString = Mid(Sheets(inti).Name, _
intj, intSearchLen) Then '検索文字列とシート名を比較
Sheets(inti).Activate '一致したら、そのシートを選択
Exit Sub 'サブルーチンを抜ける
End If
Next intj
End If
Next inti
MsgBox "一致するシートはありませんでした。" 'メッセージを表示する
End Sub
以下はソースの解説です。ソース上緑色のコメントで十分説明できている部分の解説は省略します。
- 14行目 strSearchString = InputBox(strMsg)
-
検索文字列を入力し、変数strSearchStringに格納します。
- 20行目~32行目
-
全シート分の検索文字列とシート名を比較するために1~シート数合計までループします。
- 24行目~30行目
-
該当シート(Sheets(inti).Name)に対して検索文字列と部分的に一致するか比較を行い、一致した場合は該当シートを選択状態にし、サブルーチンを終了します。
部分的に一致するか比較をするために、シート名から検索文字列と同じ文字数を切り出し比較をしています。Mid関数は Mid(文字列, 開始位置, 文字数)という構成で、開始位置から文字数分を切り出します。
最後まで一致しない場合は、20行目に戻ったときにintiに1加算され次のシートが対象となります。
ショートカットキーの割当
最後にショートカットキーを割り当てます。
ツールバーから「開発」 > 「マクロ」をクリック。
マクロウィンドウが表示されるため、「マクロの保存先(A)」に「PERSONAL.XLSB」を選択し、「オプション(O)」ボタンをクリックします。
マクロの保存先は「PERSONAL.XLSB」を選択しましょう。これで全てのブックでマクロが有効になります!
ショートカットキーとして割り当てたい文字を入力し、「OK」ボタンをクリックします。
[Ctrl] + [何かのキー]だと、すでに割当たっている可能性が高いため、[Ctrl] + [Shift] + [何かのキー]にすることをおすすめします。
下図の場合[Shift]キーを押しながら[A]を入力します。
同様に、下罫線、右罫線、左罫線もショートカットキーを割り当てていきます。
ショートカットキー | 罫線の方向 |
---|---|
[Ctrl] + [Shift] + [A] | 最初のシートに移動 |
[Ctrl] + [Shift] + [Z] | 最後のシートに移動 |
[Ctrl] + [Shift] + [S] | シート名検索 |
マクロウィンドウが残っているため、「キャンセル」ボタンをクリックします。
まとめ
これですべての工程が完了となります。
割り当てたショートカットキーを押してシートの移動をしてみてください。
シート数が多いエクセルを多用する場合は時短の効果が出るはずです。
1回1回の時間はわずかですが、塵も積もれば山となるで繰り返す内に効果を実感すると思います。
- ITエンジニア歴24年(現役)
- マネージャー兼システムアーキテクト
- 国家資格 FE・SW・SA・PM 保有
- 孫請けSES ⇒ SIer ⇒ 起業を目指し中
- 輝くエンジニアを増やしたい
X(twitter) : (@evolution_Avi)
コメント