Excelで写真や図形を指定の場所へ移動する方法。幅も連動可

Excel_ShapeRange

Excelの写真や図形を指定の場所に移動させたいという時はないでしょうか?

例えば下のリンク記事で紹介したガントチャートは、今日がどこなのかを色分けする設定を紹介しました。(図のオレンジセルが本日です。)

補足図

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

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



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

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

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

例えば下図のようなものです。

今日を強調
ガントチャートに帯掛けして縦串で把握


オートシェイプの帯は自動で移動してくれないので、1クリックで今日の日付まで動いてくれたらいいのに!と思う訳です。

今回はその技を紹介していきます。


~Excel瞬間移動技:画像や写真を指定の場所へ~

広告


自分で位置を指定して移動

セルH4の中に場所を指定して、そこへ移動させるコードです。

VBA
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列の幅に合うようになっています。

N4へ移動


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

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の部分は消しました。

VBA
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です。

参照形式

今回の設定
  • I1は行番号/ 今回は8行目に日付があるのでI1=8とする。
  • I2は日付開始列。今回はJ列が日付開始列なので、I2=10。
  • I3は今日が開始列から何列後かを計算
    {今日の日付 – 開始日付}÷日の間隔をRounddownで切り捨て
  • I4はI2+I3で、今日の列番号

    このうち、I1とI4を使っています。
ちょっと計算

セルQ8は今日の色になっているので合っていますね!!


[ad02]

ShapeRangeは他にもいろいろアレンジが効きますので、試してみて下さい!

ShapeRangeプロパティの解説ページをもう一度。
https://docs.microsoft.com/ja-jp/office/vba/api/excel.shaperange.left



最後まで見ていただき、ありがとうございました。


広告


広告


広告