シートの右端から左端へ、左端から右端へ移動
シートの移動にショートカットを利用されている方がおられると思います。
右のシートに移動する場合はCtrl + PageDown、左のシートに移動する場合はCtrl + PageUpです。
私もこのショートカットをマウスホイールの左右の動きに割り当てていたのですが、しばらく使っていると不便を感じてきました。
それは、左端や右端のシートに到達した場合、反対側のシートに移動してくれないことです。
そのように両端に到達した場合に、反対側のシートの端に移動するのが以下の関数になります。
マクロの紹介
以下に3つの関数がありますが、実際に使うのは1つ目「シート右移動」と2つ目の「シート左移動」です。
3つ目の「シート選択」は1つ目と2つ目から呼び出される関数です。
「シート右移動」は右のシートに移動し、一番右のシートの場合は一番左のシートに移動します。
「シート左移動」はその逆です。
非表示シートが存在する場合は読み飛ばして、表示シート間の移動を行うようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
'//---------------------------------------------------------------------------- '// 機能 :シート右移動 '// 引数 :なし '// 戻り値 :なし '//---------------------------------------------------------------------------- Sub シート右移動() Dim iSheetCount Dim iNowIndex Dim shActive iSheetCount = Sheets.Count Set shActive = ActiveSheet iNowIndex = shActive.Index If (iSheetCount > 1) Then '// 一番右のシートの場合 If (iSheetCount = iNowIndex) Then '// 一番左のシートを選択 Call シート選択(1, "Right") Else Call シート選択(iNowIndex + 1, "Right") End If End If End Sub '//---------------------------------------------------------------------------- '// 機能 :シート左移動 '// 引数 :なし '// 戻り値 :なし '//---------------------------------------------------------------------------- Sub シート左移動() Dim iSheetCount Dim iNowIndex Dim shActive iSheetCount = Sheets.Count Set shActive = ActiveSheet iNowIndex = shActive.Index If (iSheetCount > 1) Then '// 一番左のシートの場合 If (1 = iNowIndex) Then '// 一番右のシートを選択 Call シート選択(iSheetCount, "Left") Else Call シート選択(iNowIndex - 1, "Left") End If End If End Sub '//---------------------------------------------------------------------------- '// 機能 :シート選択 '// 引数 :(I) a_iSheetNo :遷移先シートのindex '// :(I) a_sLeftRight :左右のどちらに遷移するかを指定する("Left","Right") '// 戻り値 :なし '// 備考 :非表示シートは飛ばして次の表示シートを選択する '//---------------------------------------------------------------------------- Sub シート選択(a_iSheetNo, a_sLeftRight) Dim iSheetCount Dim sht Dim iAdd Dim iMark Dim iSheetNo iSheetCount = Sheets.Count iSheetNo = a_iSheetNo If (a_sLeftRight = "Left") Then iMark = -1 Else iMark = 1 End If iAdd = 0 '// 全シートが非表示なのはありえないため、例外系の終了条件は設けない(表示シートにあたるまでループする) Do Set sht = Sheets(iSheetNo + iAdd) '// シートが表示されている場合 If (sht.Visible <> xlSheetHidden) And (sht.Visible <> xlSheetVeryHidden) Then sht.Select Exit Do End If iAdd = iAdd + iMark '// 右端を越えた場合は一番左に遷移 If (iSheetCount < iSheetNo + iAdd) Then iSheetNo = 1 iAdd = 0 '// 左端を越えた場合は一番右に遷移 ElseIf (iSheetNo + iAdd = 0) Then iSheetNo = iSheetCount iAdd = 0 End If Loop End Sub |
便利な使い方
もし利用しているマウスがショートカットキー割り当て機能があれば、上記関数を割り当てることでマウスだけでシート移動が可能になります。
私自身はLogicoolのマウスを使っており、「シート左移動」にCtrl + Shift + H(Hidari@左)を割り当て、「シート右移動」にCtrl + Shift + M(Migi@右)を割り当てて、それぞれをマウスホイールの左右の動作設定にしています。
マウスホイールを左右に動かすだけでシート移動ができるので、とてもラクで重宝しています。