【VBA】Excelマクロを利用して作業効率を上げたい①

はじめに

こんばんは。

皆さんは作業効率を上げるためにどのような事を大切にしているでしょうか?
僕は、社会人1年目に教えていただいた「キーボード操作のみで作業する」ことにこだわるという事をを教えていただきました。

他にも、ツールをどんどん活用して、なければ作る、自分用のマクロをどんどん作っていくと良いと学びました。

さて、今回はExcelマクロなどと呼ばれる、VBScriptを組んでいきます。

VBScript

VBScriptとは、主にWindows環境でのシステム管理や自動化、タスクのスクリプト化に利用されます。
Windows上で直接実行できるため、管理者向けのツールやバッチ処理で利用されることが多いです。

VBScriptはかつてWindows環境で広く使われたスクリプト言語ですが、時代の変化とともにその利用範囲は限定的となっています。

今回は、2024年9月〜2025年3月の間に個人的に多用したマクロをまとめて見ました。

実装先は、Personal.xlsbというファイルがおすすめです。
作成方法も記しておきます。

①まずは無題のブックを開く

開発タブ→Visual Basicを押下

③VBAProject(PERSONAL.XLSB)→モジュール→Module1を押下

VBA設定
VBA設定
マクロウィンドウ

④表示されたウィンドウにマクロを貼り付ける

⑤ThisWorkBookへの設定
 ショートカットキーマクロはこちらへ設定してください。

VBA設定
Personal.xlsbがない場合

初めて作成する場合などは、Personal.xlsbがない場合があります。
その場合、以下の手順でPersonal.xlsbを作成してください。

  1. Excelを起動し、空白のブックを開く。
  2. 開発タブのマクロの記録をクリック。
    開発タブが表示されていない場合は、「ファイル」→「オプション」→「リボンのユーザー設定」で「開発」を有効にしてください。
  3. マクロの記録ダイアログで、保存先を個人用マクロブックに変更し、適当なマクロ名を入力して「OK」をクリック。
  4. 適当にセルを選択するなど、簡単な操作を行う(実際のマクロ内容は何でも構いません)。
  5. もう一度マクロの記録をクリックして記録終了を選択し、記録を停止する。

この操作により、Excelが自動的にPersonal.xlsbを作成し、そこにマクロが保存されます。

機能実装

実装1〜文字色・背景色変更〜

RGB関数を使わずLong型で実行するようにしています。

変数名は日本語でも問題ないので、日本語を使用しています。
※文字化けしたら諸々置換しておいてください笑

Const 赤色 As Long = 255           
Const 青色 As Long = 15773696      
Const 黒色 As Long = 0             
Const 黄色 As Long = 65535         
Const 緑色 As Long = 5296274
Const 橙色 As Long = 49407
Const 灰色 As Long = 14277081      
Const 白色 As Long = 16777215

Sub ChangeFontColorCycle()
    Dim cell As Range
    For Each cell In Selection
        ' 赤の場合は青に変更 
        If cell.Font.Color = 赤色 Then
            cell.Font.Color = 青色
        ' 青の場合は黒に変更 
        ElseIf cell.Font.Color = 黒色 Then
            cell.Font.Color = 赤色
        Else
            cell.Font.Color = 黒色
        End If
    Next cell
End Sub


Sub CycleBackgroundColor()
    Dim cell As Range
    For Each cell In Selection
        ' 無色の場合は黄色に変更 
        If cell.Interior.Color = 白色 Then
            cell.Interior.Color = 黄色
        ' 黄色の場合は緑に変更 
        ElseIf cell.Interior.Color = 黄色 Then
            cell.Interior.Color = 緑色
        ' それ以外は設定しない 
        Else
            cell.Interior.Color = 白色
        End If
    Next cell
End Sub

実装2〜「A1」へ〜

すべてのシートをA1へ設定するマクロです。
表示倍率も統一できます。(設定する場合は半角数値を入力してください)

2025年4月16日追記:枠線の非表示化の機能も追加しました!
2025年4月25日追記:スクロール位置もリセットされるよう修正しました!

Sub Move2A1()
    Dim ws As Object  ' ワークシートやその他シートを扱うため、Object型
    Dim zoomRatio As Variant
    Dim gridlinesOption As VbMsgBoxResult

    '【1】グリッド線の設定方法をユーザーに確認
    gridlinesOption = MsgBox( _
        "グリッド線(シートの枠線)の設定をどうしますか?" & vbCrLf & _
        "【はい】:枠線を表示する" & vbCrLf & _
        "【いいえ】:枠線を非表示にする" & vbCrLf & _
        "【キャンセル】:枠線は変更しない", _
        vbYesNoCancel + vbQuestion, "グリッド線設定の確認")

    '【2】拡縮比率をポップアップで入力
    zoomRatio = InputBox("すべてのシートに設定する拡縮比率を入力してください(10~400%):", "拡縮比率設定")
    
    ' 入力が数値かどうか、かつ範囲チェック
    If IsNumeric(zoomRatio) Then
        If zoomRatio < 10 Or zoomRatio > 400 Then
            MsgBox "拡縮比率は10~400%の範囲で入力してください。", vbExclamation
            Exit Sub
        End If
    End If

    '【3】すべてのシートをループして処理
    For Each ws In ActiveWorkbook.Sheets
        If TypeOf ws Is Worksheet Then
            ' シートをアクティブに
            ws.Activate
    
            ' Ctrl + Home 相当の動作
            ws.Cells(1, 1).Select
            ActiveWindow.ScrollRow = 1
            ActiveWindow.ScrollColumn = 1
    
            ' 拡縮比率の設定
            If IsNumeric(zoomRatio) Then
                ActiveWindow.Zoom = zoomRatio
            End If
    
            ' グリッド線の表示設定
            Select Case gridlinesOption
                Case vbYes
                    ActiveWindow.DisplayGridlines = True
                Case vbNo
                    ActiveWindow.DisplayGridlines = False
            End Select
        End If
    Next ws
    
    ' 最後に1番目のシートに戻す(同様にスクロールもリセット)
    With ActiveWorkbook.Sheets(1)
        If TypeOf .Parent.Sheets(1) Is Worksheet Then
            .Activate
            .Cells(1, 1).Select
            ActiveWindow.ScrollRow = 1
            ActiveWindow.ScrollColumn = 1
        End If
    End With


    '【5】 完了メッセージ
    If IsNumeric(zoomRatio) Then
        MsgBox "すべてのシートでセル A1 を選択し、拡縮比率 " & zoomRatio & "% を設定しました!", vbInformation
    Else
        MsgBox "すべてのシートでセル A1 を選択しました!", vbInformation
    End If
End Sub

ショートカットキー

これらのマクロを使用するためのショートカットキーを作成しました。

  1. Ctrl + ⇧ + r
    全てのシートを指定した倍率でA1を選択
    倍率を設定しない場合は、表示倍率を変えずにA1を選択
  2. Ctrl + ⇧ + 1
    フォントカラーを→...へ変更
    でもでもない場合はへ変更
    キーを押すたびに色が変更される
  3. Ctrl + ⇧ + 2
    文字の背景を→...へ変更
    でもでもない場合はへ変更
    キーを押すたびに色が変更される
Private Sub Workbook_Open()
    ' Ctrl + Shift + R に MoveToA1 マクロを割り当て 
    Application.OnKey "^+r", "Move2A1"
    Application.OnKey "^+1", "ChangeFontColorCycle"
    Application.OnKey "^+2", "CycleBackgroundColor"
End Sub

おわりに

いかがでしたでしょうか?

これらのScriptは、personal.xlsbとして作成しておくとどのファイルでも使うことができます。

キー操作のみで文字色・背景色を変更できたり、納品時にExcelを整えたりする際などに使用できるマクロを書いています。

引き続きVBAシリーズとして、便利なマクロがあれば載せていきます。