ITスキル・ノウハウ

【超時短のExcel VBA】自作の便利マクロ紹介

2024年10月30日

Excelマクロ

こんにちは、ラーメン好きなフリーランスエンジニアの”ぽんねぐ”です。

日頃Excelを使って作業している方は、出来るだけ時短テクニックを使いたいですよね?

この記事では外部のアドオンをインストール出来ない状況下の人のために、自作で作成した便利マクロをコピペで使えるように紹介します。

本題に入る前に、この記事を書いている私について簡単に紹介させて下さい。

プロフィール

・システムエンジニア歴:6年(会社員:5年、フリーランス:1年)

・退職後すぐに案件獲得に成功し、1年間継続中

・独立後の年収は正社員時代の2倍を達成

ぽんねぐ
ぽんねぐ

ちなみにですが、以下記事を併せて読むと実際に自分のPCに設定出来ます。

それではさくっと紹介していきます。

自作の便利マクロの紹介

赤枠の自動生成

画像を良く取得して説明資料を作成する人は、伝えたいポイントを分かりやすくするために赤枠で囲うことがあると思います。その際、いちいち四角い図形を作成して、塗りつぶしを無しにして、枠線を赤くして、太くするのって面倒じゃありません?

そんな時に使える「赤枠の自動生成」マクロを作りました

以下のような赤枠がワンクリックで作成出来ます。

ソースコードの紹介

Sub 赤枠の生成()
    
    ActiveSheet.Shapes.AddShape(msoShapeRectangle, Selection.Left, Selection.Top, 200, 100).Select
    Selection.ShapeRange.Fill.Visible = msoFalse
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
    End With
    
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .Weight = 3
    End With
    
End Sub

解説

1.まず初めに四角の図形を挿入する

ActiveSheet.Shapes.AddShape(msoShapeRectangle, Selection.Left, Selection.Top, 200, 100).Select

2.次に図形の塗りつぶしを無しにする

Selection.ShapeRange.Fill.Visible = msoFalse

3.次に図形の枠線を赤色に変更

With Selection.ShapeRange.Line
 .Visible = msoTrue
 .ForeColor.RGB = RGB(255, 0, 0)
 .Transparency = 0
End With

4.最後に枠線の幅を太くする

With Selection.ShapeRange.Line
 .Visible = msoTrue
 .Weight = 3
End With

図形を等間隔で拡大・縮小

図形のサイズを拡大もしくは縮小したい際、図形をクリックして○を引っ張ったり、図形の書式設定で高さと幅を変更しておりますでしょうか?

そんな時に、等間隔で図形を拡大・縮小してくれるマクロを作りました。しかも複数図形を選択して一緒に拡大・縮小が可能です。

以下が例です。少し分かりづらいですが、高さと幅がマクロ実行で大きくなります。

図形拡大の実行前

↓↓↓↓↓

図形拡大の実行後

複数図形を一括選択し、同じ大きさでサイズ拡大/サイズ縮小も出来ます。

図形を複数選択

↓↓↓↓↓

図形拡大後

大きさの違い分かりやすくするために、図形拡大マクロを複数回実行してます。

拡大の反対に縮小は以下のようになります。

図形縮小の実行前

↓↓↓↓↓

図形縮小の実行後

ソースコードの紹介

Sub 図形の拡大()

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With
    
    Dim Shp As Shape
    
    For Each Shp In Selection.ShapeRange
        With Shp
            .Height = .Height * 1.1
            .Width = .Width * 1.1
        End With
    Next Shp
    
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
    
End Sub
Sub 図形の縮小()

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With
    
    Dim Shp As Shape
    For Each Shp In Selection.ShapeRange
        With Shp
            .Height = .Height * 0.9
            .Width = .Width * 0.9
        End With
    Next Shp
    
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
    
End Sub

解説

1.まず初めに画面描画やイベントを停止する

With Application
 .ScreenUpdating = False
 .EnableEvents = False
End With

2.次に選択した図形を1つずつ高さと幅のサイズを任意の倍率で乗算する

Dim Shp As Shape
For Each Shp In Selection.ShapeRange
With Shp
.Height = .Height * [任意の数値]
.Width = .Width * [任意の数値]
End With
Next Shp

ポイント

拡大する場合は1倍より大きい数値で設定し、縮小する場合は1倍より小さい数値で設定すること

3.最後に画面描画とイベントを再開する

With Application
.ScreenUpdating = True
.EnableEvents = True
End With

選択した図形のサイズを統一

とりあえず画像をたくさん撮った後にサイズを一つずつ変更していくことってありませんか?

そんな時にベースとなる画像を選択してマクロを実行すれば選択した他の図形のサイズがベース画像と同じになるマクロを作りました。

以下のように図形サイズがバラバラのものを最初に選択した図形のサイズに統一出来ます。

図形サイズ統一の実行前

↓↓↓↓↓

図形サイズ統一の実行後

ソースコードの紹介

Sub 図形のサイズ統一()
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    Dim Shp As Shape
    Dim basicShp As Shape
    For Each Shp In Selection.ShapeRange
        If basicShp Is Nothing Then
            '何もしない
        Else
            With Shp
                .Height = basicShp.Height
                .Width = basicShp.Width
            End With
        End If
        Set basicShp = Shp
    Next Shp
    
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With

End Sub

解説

1.まず初めに画面描画やイベントを停止する

With Application
 .ScreenUpdating = False
 .EnableEvents = False
End With

2.次に選択した図形の1つ目をbasicShpとして設定し、ループを回すたびにbasicShpの高さ・幅を対象図形に適用する

Dim Shp As Shape
Dim basicShp As Shape
For Each Shp In Selection.ShapeRange
  If basicShp Is Nothing Then
   '何もしない
  Else
   With Shp
    .Height = basicShp.Height
    .Width = basicShp.Width
   End With
  End If
  Set basicShp = Shp
Next Shp

3.最後に画面描画とイベントを再開する

With Application
 .ScreenUpdating = True
 .EnableEvents = True
End With

全シートを表示比率100%且つAセル選択状態で保存

システムエンジニアを行っていると企業文化によっては、成果物の提出時に全シート必ず非表示倍率を100%にしてAセル選択状態にする必要があります。私が過去に働いた現場ではそうでした。

まぁ企業文化ではなくとも受け取り側の心理として、Excelのシートごとに見た目がバラバラになっていたら何となく「この人は雑な人かな?」と思いますよね?そんなところで印象を落とすのももったいないです。

しかし、シートが多いと一つずつ変更するのは手間だし、資料作成時にそんなところを意識して作成も出来ないし。。。

そんな時に一括で全シート表示倍率100%にしてAセル選択状態で保存が出来るマクロを作りました。

以下のように表示倍率も選択中のセルもばらばらのExcelファイルを一括で統一出来ます。

1シート目
2シート目
3シート目
4シート目

マクロを実行すると...

以下が表示され、全てのシートが表示倍率100%且つAセル選択状態で保存される。

シート統一マクロの実行後

ソースコードの紹介

Sub 全シートの表示倍率100パーセント且つAセルで保存()
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With
    
    Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        ws.Activate
        With ActiveWindow
            .ScrollRow = 1
            .ScrollColumn = 1
        End With
        
        ws.Cells(1, 1).Activate
        
        ActiveWindow.Zoom = 100
    Next
    
    Worksheets(1).Activate
    ActiveWorkbook.Save
    
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
    
    MsgBox ("全シートを表示倍率100%且つAセル選択状態に変更し、保存しました。")
End Sub

解説

1.まず初めに画面描画やイベントを停止する

With Application
 .ScreenUpdating = False
 .EnableEvents = False
End With

2.次にシートを順番に選択し、スクロールバーを左上に設定

Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
 ws.Activate
 With ActiveWindow
  .ScrollRow = 1
  .ScrollColumn = 1
End With

3.次にAセルを選択した状態にする

ws.Cells(1, 1).Activate

4.次に表示倍率を100%に設定する

ActiveWindow.Zoom = 100
Next

5.すべてのシートを処理後、一番左のシートを表示し、保存する

Worksheets(1).Activate
ActiveWorkbook.Save

6.最後に画面描画とイベントを再開する

With Application
 .ScreenUpdating = True
 .EnableEvents = True
End With

以上です。

まとめ

この記事では、私が自作した便利なExcelマクロを紹介しました。

ソースコードをコピーして使って頂けたら時短で資料作成が出来ます。

本記事で紹介したマクロを実際に登録したい場合は、以下記事で画像付きで解説しております。

何か不明点などございましたらコメント欄に記載頂けたらと思います!

以上、最後までお読みいただきありがとうございました。

-ITスキル・ノウハウ