Excelの写真や図形を指定の場所に移動させたいという時はないでしょうか?
例えば下のリンク記事で紹介したガントチャートは、今日がどこなのかを色分けする設定を紹介しました。(図のオレンジセルが本日です。)

Excelガントチャート(線表)でスケジュール管理!作成時に役に立つ関数、セルの書式設定

Excelガントチャートのアレンジ:行のグループ化で折りたたむ(VBAマクロも紹介)

ガントチャートは項目が増えると、今日の日付を帯掛けして縦串で見たくなります(よね?)。
例えば下図のようなものです。

オートシェイプの帯は自動で移動してくれないので、1クリックで今日の日付まで動いてくれたらいいのに!と思う訳です。
今回はその技を紹介していきます。
~Excel瞬間移動技:画像や写真を指定の場所へ~
自分で位置を指定して移動
セルH4の中に場所を指定して、そこへ移動させるコードです。
Sub shiftbar()
'変数を設置
Dim sb As String
'変数sbはセルH4の値と定義する
sb = Range("H4").Value
'現シートの『todaybar』という図形を選択
ActiveSheet.Shapes("todaybar").Select
'選択した図形のトップ、左、幅を指定 With Selection .ShapeRange.Top = Range(sb).Top .ShapeRange.Left = Range(sb).Left .Width = Range(sb).Width End With
End Sub
準備として、移動させたい図形の名前を『todaybar』にしておきます。
①図を選択し、②左上の名前バーに『todaybar』を打ち込み、③Enterを押します。

あと、適当なオートシェイプを作って、マクロ「shiftbar」を登録しておきます。
オートシェイプを右クリック – マクロの登録 です。
いまは場所指定のH4セルが『N4』になっているので、N4の左上に図形の左上が来て、N列の幅に合うようになっています。

O列の幅を広くして、『O8』を指定した場合。ちゃんと動いて幅も合いましたね。

残念ながら、ShapeRangeプロパティはTopとLeftしか位置指定ができません(BottomやRightはない)ので、幅や高さを自分で指定したいときは、
・ShapeRange.Width = 100
・ShapeRange.Height = 300
と指示する必要があります。
こちらがShapeRangeプロパティの解説ページです。
https://docs.microsoft.com/ja-jp/office/vba/api/excel.shaperange.left
もちろん画像も動かせます。たとえば画像の名前を『testfig』にして、コードも変更。
幅は変えたくないので、Widthの部分は消しました。
Sub shiftbar()
'変数を設置
Dim sb As String
'変数sbはセルH4の値と定義する
sb = Range("H4").Value
'現シートの『testfig』という画像を選択
ActiveSheet.Shapes("testfig").Select
'選択した図形のトップ、左、幅を指定 With Selection .ShapeRange.Top = Range(sb).Top .ShapeRange.Left = Range(sb).Left End With
End Sub
自動で位置を取得して移動
ガントチャートの「今日」に連動させるには、セルH4に『今日のセルの番号』が表示されるように関数を入れます。
VBAのコードは上と同じでOK
H4に今日のセル番号を表示させるには、ADDRESS関数を使います。
=ADDRESS(行番号,列番号,参照形式)で使用され、今回は【=ADDRESS(I1,I4,4)】と代入しています。
参照形式というのはセルに$つける、つけないの事です。
絶対は$ありで相対は$なしですが、今回はどれでもOKです。

ShapeRangeは他にもいろいろアレンジが効きますので、試してみて下さい!
ShapeRangeプロパティの解説ページをもう一度。
https://docs.microsoft.com/ja-jp/office/vba/api/excel.shaperange.left
最後まで見ていただき、ありがとうございました。
広告
広告
広告