Excel VBAで画像に枠線を付ける、全シートA1選択にするマクロ

この記事は約6分で読めます。

ExcelのVBAマクロをリボンに登録するシリーズ、第2弾です。

前回の記事では

  • 複数セルの選択範囲内で、文字の中央揃えを行う/解除する
  • 文字がセル内に収まらないときに、文字サイズを縮小して全体表示する/解除する

をマクロ化してメニュー登録する方法を紹介しました。

Excelのリボンに無いコマンドを、マクロ登録する方法
Excelで頻繁に使うメニューなのにリボンに存在しなくて面倒に思う事はありませんか? 必要な処理はマクロ登録して、リボンから1クリックで使えるようにしましょう。使用頻度の高い「文字配置を選択範囲内で中央揃え」「文字サイズを縮小して全体を表示する」のサンプルコード付きです。

今回は、システム開発の現場でよく使われる機能を紹介します。

  • 図(画像)に薄いグレーの枠を付ける
  • 全シートA1選択状態(ウィンドウ枠の固定をしていても最上部へスクロールする)

「全シートA1選択」って納品時によく使いますよねー。
特に官公庁に納品する時は、更に「一番左のシートをActiveにする」のも必須だったりします。

これらを一瞬で処理できるようにマクロ化しましょう。
納品直前の殺気立ってる時に細かい部分に気をまわす余裕ないですし、絶対に1シートだけ漏れたりするんですよねー。

サンプルコード

Visual Basic Editorを起動し、次のコードを貼ってください。

Sub 図形に灰色の枠をつける()
    If VarType(Selection) = vbObject Then
        With Selection.ShapeRange.Line
            .Visible = msoTrue
            .ForeColor.ObjectThemeColor = msoThemeColorText1    '黒
            .ForeColor.TintAndShade = 0                         '標準色(テーマの色の一番上の列)
            .ForeColor.Brightness = 0.5                         '白+基本色50%
        End With
    End If
End Sub

Sub 全シートA1フォーカス移動()
    Dim i As Integer
    Dim x As Integer: x = 0
    For i = 1 To Sheets.Count
        ' 一番左のアクティブシート取得
        If Sheets(i).Visible = True And x = 0 Then
            x = i
        End If
        ' i番目のシートを表示する
        Sheets(i).Activate
        ' A1を選択する
        Sheets(i).Range("A1").Select
        ' A1位置を左上にする(枠固定でもスクロールバーが動く)
        ActiveWindow.ScrollColumn = ActiveCell.Row
        ActiveWindow.ScrollRow = ActiveCell.Column
        ' シートの倍率を100%にする
        ActiveWindow.Zoom = 100
    Next i
    ' 表示されているシートのうち、一番左のシートを表示する(非表示シートは対象外)
    Sheets(x).Activate
End Sub

Visual Basic Editorの起動方法、マクロの登録方法などの細かい部分は、前回記事を参考にしてください。

Excelのリボンに無いコマンドを、マクロ登録する方法
Excelで頻繁に使うメニューなのにリボンに存在しなくて面倒に思う事はありませんか? 必要な処理はマクロ登録して、リボンから1クリックで使えるようにしましょう。使用頻度の高い「文字配置を選択範囲内で中央揃え」「文字サイズを縮小して全体を表示する」のサンプルコード付きです。

コードを登録するとこんな感じになります。

解説1:図(画像)に灰色の枠線を付ける

With ~ End With 間で色指定をしています。
今回は50%灰色にしています。

  • .ForeColor.ObjectThemeColor
  • .ForeColor.TintAndShade
  • .ForeColor.Brightness

色を変えたい場合は、ご自分の環境で「マクロの自動記録」を起動し、
「図の書式設定」⇒「線(単色)」⇒「色」(色パレットから選択)
して、記録されたマクロの「.ForeColor」部分をコピペすればOKです。

この機能は、テストのエビデンスをExcelに貼るとき、画像が白っぽい場合に使う事が多いです。
見栄えだけですが、見栄えを求められるのです。
そのためだけに毎回「図のプロパティ」を開くのは面倒ですからね。

解説2:全シートA1フォーカス移動

    For i = 1 To Sheets.Count
   (中略)
    Next i

For ~ Next で全シート分を処理しています。


        ' 一番左のアクティブシート取得
        If Sheets(i).Visible = True And x = 0 Then
            x = i
        End If

If文で、一番左のアクティブシートのインデックス(番号)を取得しています。

    ' 表示されているシートのうち、一番左のシートを表示する(非表示シートは対象外)
    Sheets(x).Activate

取得したインデックス番号のシートを表示します。
ここを Sheet1 や Sheets(1) 等と固定してしまうと、一番左が非表示シートだった場合にエラーになるので回避策です。


        ' i番目のシートを表示する
        Sheets(i).Activate
        ' A1を選択する
        Sheets(i).Range("A1").Select

本来の目的である、A1セルを選択状態にする処理です。


        ' A1位置を左上にする(枠固定でもスクロールバーが動く)
        ActiveWindow.ScrollColumn = ActiveCell.Row
        ActiveWindow.ScrollRow = ActiveCell.Column

ActiveWindow.ScrollColumn
ActiveWindow.ScrollRow
の2行は、本来は「アクティブセルを画面左上にする」という機能ですが、『ウィンドウ枠の固定』で下の方にスクロールしていた場合でもスクロールが戻ってくれる(スクロールバーがアクティブセルの位置に来る)ため活用しています。
直前の
Sheets(i).Range(“A1”).Select
だけでは『ウィンドウ枠の固定』のスクロールが戻らないのです。(A1セルは選択されているけど、スクロールは下の方になった状態のまま)


        ' シートの倍率を100%にする
        ActiveWindow.Zoom = 100

シートの表示倍率を100%にするのは、図(画像)を貼るときにサイズを統一するように言われた経緯からです。

外部jpgやPrint Screen(クリップボード内の画像)を貼る場合、表示倍率で画像サイズが変わるんですよ。
画像内の文字がぼやけて見えてしまう、など影響が出るので意外と大切だったりします。これも見栄えなんですけどね(苦笑)

まとめ

マクロに登録 ⇒ リボンに登録 ⇒ クイックアクセスバーに登録

の3段活用をすると便利です。
クイックアクセスバーに登録すれば「Alt + 1」「Alt + 2」のようにキーボード起動もできますし、
多機能マウスを使っている場合は、任意キー登録するとマウスから使用できるようになります。

ぜひ、時短・効率化を追求してみてください。

タイトルとURLをコピーしました