公私共に頻繁にExcelで赤枠を使うことがある。
いつも前のシートなり他のエクセルの赤枠をコピーして使っている。
あるいは、挿入の図形から□のオブジェクトを選択し置いて塗りつぶしを無しにして色を赤、幅3pxに設定をすることを行っていた。
これが意外と手間でいつも気にしていなかったが、ふと、マクロ化してみようと思い立った。
そこで赤枠を作ってくれるマクロを作り作業の効率化する。
※作成後のソースコードはこちら
マクロの記録を使い、処理のベースを作る
手順概要:マクロの記録で記録中に赤枠を作る。
開発タブのマクロの記録をクリックします。
マクロの記録の画面でそのままOKを選択
通常の操作で赤枠を作成する(私の場合は挿入で□のオブジェクト選択、塗りつぶしなし、枠色を赤、枠の太さ3px)
赤枠作成後、記録終了を選択する。
開発タブのマクロを選択、マクロの画面で編集をクリックする。
すると、Microsoft Visual Basicの画面が表示される。Macro1という名前のメソッドと処理(ソース)が書かれているのが分かる。
一旦Excelに戻り作成されたマクロを実行してみる。
すると、先程作成した赤枠と同様の位置に同様の赤枠が作成される。
これでベースの作成は完了。
しかし、このままでは使いたい位置に赤枠が作成されず
固定の位置に作成されてしまうため、動的に位置を変えられるようにしたい。
一部だけ処理を変更する
手順概要:ソースの一部を変更し動的に描画位置を変えられるようにする。
Microsoft Visual Basicの画面で先程確認したソースをみる。
この行でセルの描画位置を指定しているように見える。(他の行にセルを指定していそうな箇所は見当たらなかった)
ActiveSheet.Shapes.AddShapeについてネットで調べてみる。
すると第2引数、第3引数がぞれぞれLeft,Topのポイントの位置を指定していることが分かった。
docs.microsoftの内容を参考にしました。
つまり、このポイントを動的に設定することにより
好きな位置に赤枠を置けるようになることが分かる。
ポイントの取得は以前から知っていたので
selection.leftとselection.topを利用して取得する。
初めての人は、”excel セル ポイント取得”
とかで調べれば取得の方法の記事が見つかるはず。
そのまま引数に値として使用する。
変更したソースは以下の通り。
動作確認
Excelの画面から任意のセルを選択してマクロを実行してみる。
すると・・・
選択したセルの位置をベースに赤枠のオブジェクトが描画されていることが確認できた。
後は、使いやすいようにツールバーに作成したマクロを追加すればいつでも使えるようになる。
最終的なソースコードはこちら
Sub 赤枠()
ActiveSheet.Shapes.AddShape(msoShapeRectangle, Selection.Left, Selection.Top, 278, 192).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