大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、オートシェイプの位置や背景色の取得と設定について、ご紹介します。オートシェイプの位置は背景色を、取得したい設定するには、LeftやTop、Fill、Lineを使います。よく使うオートシェイプの操作について、VBAコードをまとめました。オートシェイプの扱いに慣れていきましょう。

はじめに

この記事では、オートシェイプの位置や背景色の、取得と設定について、ご紹介します。

オートシェイプをVBAで操作する場合は、既にあるオートシェイプから背景色や位置を取得して、設定したりします。

基本的な取得と設定のやり方がわかっていると、VBAでオートシェイプの操作を自動化できます。

マニアックなところは、マクロの記録でVBAコードを調べて、細かい操作もできるようにしていきましょう。

では、オートシェイプの位置や背景色の、取得と設定について、解説していきます。

この記事で紹介すること

  • オートシェイプの位置や背景色を設定する方法
  • オートシェイプの位置や背景色を取得する方法

目次から見たい項目へ移動すると便利ですよ。

目次

VBAコードまとめ

オートシェイプの位置や背景色の設定と、取得するVBAコードをまとめました。

VBAコードだけ確認した場合に、ご活用ください

With ActiveSheet.Shapes("正方形/長方形 1")
    .Left = Range("C5").Left '左の位置を設定
    .Top = Range("C5").Top '上の位置を設定
    .Width = 10 '横幅を設定
    .Height = 10 '高さを設定
    .AutoSize = True '自動調整にする
    .ScaleWidth 1.1, msoFalse, 0 '横方向に拡大/縮小(左を基準)
    .ScaleWidth 1.1, msoFalse, 1 '横方向に拡大/縮小(中央を基準)
    .ScaleWidth 1.1, msoFalse, 2 '横方向に拡大/縮小(右を基準)
    .ScaleHeight 1.1, msoFalse, 0 '縦方向に拡大/縮小(左を基準)
    .ScaleHeight 1.1, msoFalse, 1 '縦方向に拡大/縮小(中央を基準)
    .ScaleHeight 1.1, msoFalse, 2 '縦方向に拡大/縮小(右を基準)
    .AutoShapeType = 1 'タイプを設定
    .Fill.ForeColor.RGB = RGB(255, 0, 0) '背景色を設定
    .Fill.Transparency = 0 '透過率を設定
    .Line.ForeColor.RGB = RGB(255, 255, 0) '枠線の色を設定
End With

With ActiveSheet.Shapes("正方形/長方形 1")
    a = .Left '左の位置を取得
    a = .Top '上の位置を取得
    a = .Width '横幅を取得
    a = .Height '高さを取得
    a = .AutoShapeType 'タイプを取得
    a = .Fill.ForeColor.RGB '背景色を取得
    a = .Fill.Transparency '透過率を取得
    a = .Line.ForeColor.RGB '枠線の色を取得
    a = .TopLeftCell.Address '左上の位置を取得
    a = .BottomRightCell.Address '右下の位置を取得
End With

では、それぞれ、VBAコードを実行していきます。

VBAでオートシェイプを設定する

VBAで、オートシェイプの位置や背景色を設定する、VBAコードを解説していきます。

VBAコードが多いので、パパっと、いきます。

左の位置を設定(Left)

オートシェイプの左の位置を「セルD5の左の位置」に設定します。

Sub TEST1()
    
    '左の位置を設定
    ActiveSheet.Shapes("正方形/長方形 1").Left = Range("D5").Left
    
End Sub

実行する前のオートシェイプです。

オートシェイプを用意

実行する前のオートシェイプ

実行します。

「左の位置」を設定

オートシェイプの左の位置をセルD5の左の位置に設定した結果

セルD5の左の位置に、移動できました。

「D」列に合わせたという感じです。

上の位置を設定(Top)

オートシェイプの上の位置を「セルD5の上の位置」に設定します。

Sub TEST2()
    
    '上の位置を設定
    ActiveSheet.Shapes("正方形/長方形 1").Top = Range("D5").Top
    
End Sub

実行する前のオートシェイプです。

オートシェイプを用意

実行する前のオートシェイプ

実行します。

「上の位置」を設定

オートシェイプの上の位置をセルD5の上の位置に設定した結果

セルD5の上の位置に、移動できました。

「5」行目に合わせたという感じです。

幅を設定(Width)

次は、オートシェイプの幅を設定します。

Sub TEST3()
    
    '幅を設定
    ActiveSheet.Shapes("正方形/長方形 1").Width = 200
    
End Sub

実行する前のオートシェイプです。

オートシェイプを用意

実行する前のオートシェイプ

では、実行します。

「幅」を設定

オートシェイプの幅を設定

オートシェイプの幅が、「200」pxに変更されました。

高さを設定(Height)

次は、オートシェイプの高さを設定します。

Sub TEST4()
    
    '高さを設定
    ActiveSheet.Shapes("正方形/長方形 1").Height = 200
    
End Sub

実行する前のオートシェイプです。

オートシェイプを用意

実行する前のオートシェイプ

では、実行します。

「高さ」を設定

オートシェイプの高さを設定

オートシェイプの高さが、「200」pxに変更されました。

大きさを自動調整する(AutoSize)

次は、オートシェイプに自動調整を設定します。

「テキストに合わせて図形のサイズを調整する」というやつです。

Sub TEST5()
    
    'サイズを自動調整
    ActiveSheet.Shapes("正方形/長方形 1").TextFrame.AutoSize = 1
    
End Sub

実行する前のオートシェイプです。

オートシェイプを用意

実行する前のオートシェイプ

では、実行します。

サイズを「自動調整」にする

オートシェイプの大きさを自動調整に設定する

オートシェイプのサイズが、自動調整されました。

幅を拡大/縮小する(.ScaleWidth)

次は、オートシェイプの幅を拡大/縮小します。

  • 拡大:1より大きい数値
  • 縮小:1より小さい数値

という感じです。

3つ目の引数を変更すると、拡大する基準を設定できます。

  • 0:左を基準
  • 1:中央を基準
  • 2:右を基準

拡大の場合で、やってみます。

左を基準に拡大

VBAコードは、こんな感じです。

Sub TEST6()
    
    '幅を拡大/縮小する(左を基準)
    ActiveSheet.Shapes("正方形/長方形 1").ScaleWidth 1.5, msoFalse, 0
    
End Sub

実行する前のオートシェイプです。

実行する前のオートシェイプ

では、実行します。

左を基準に幅を拡大した結果

左を基準で、幅を拡大できました。

中央を基準に拡大

VBAコードは、こんな感じです。

Sub TEST7()
    
    '幅を拡大/縮小する(中央を基準)
    ActiveSheet.Shapes("正方形/長方形 1").ScaleWidth 1.5, msoFalse, 1 '中央を基準
    
End Sub

実行する前のオートシェイプです。

実行する前のオートシェイプ

では、実行します。

中央を基準に幅を拡大した結果

中央を基準で、幅を拡大できました。

右を基準に拡大

VBAコードは、こんな感じです。

Sub TEST8()

    '幅を拡大/縮小する(右を基準)
    ActiveSheet.Shapes("正方形/長方形 1").ScaleWidth 1.5, msoFalse, 2 '右を基準
    
End Sub

実行する前のオートシェイプです。

実行する前のオートシェイプ

では、実行します。

右を基準に幅を拡大した結果

右を基準で、幅を拡大できました。

高さを拡大/縮小する(.ScaleHeight)

次は、オートシェイプの高さを拡大/縮小します。

  • 拡大:1より大きい数値
  • 縮小:1より小さい数値

という感じです。

3つ目の引数を変更すると、拡大する基準を設定できます。

  • 0:上を基準
  • 1:中央を基準
  • 2:下を基準

拡大の場合で、やってみます。

上を基準に拡大

VBAコードは、こんな感じです。

Sub TEST9()
    
    '高さを拡大/縮小する(上を基準)
    ActiveSheet.Shapes("正方形/長方形 1").ScaleHeight 1.5, msoFalse, 0 '上を基準
    
End Sub

では、実行します。

上を基準に高さを拡大した結果

上を基準で、高さを拡大できました。

中央を基準に拡大

VBAコードは、こんな感じです。

Sub TEST10()
    
    '高さを拡大/縮小する(中央を基準)
    ActiveSheet.Shapes("正方形/長方形 1").ScaleHeight 1.5, msoFalse, 1 '中央を基準
    
End Sub

では、実行します。

中央を基準に高さを拡大した結果

中央を基準で、高さを拡大できました。

下を基準に拡大

VBAコードは、こんな感じです。

Sub TEST11()
    
    '高さを拡大/縮小する(下を基準)
    ActiveSheet.Shapes("正方形/長方形 1").ScaleHeight 1.5, msoFalse, 2 '下を基準
    
End Sub

では、実行します。

下を基準に高さを拡大した結果

下を基準で、高さを拡大できました。

オートシェイプのタイプを設定(AutoShapeType)

オートシェイプのタイプを設定してみます。

Sub TEST12()
    
    'タイプを設定
    ActiveSheet.Shapes("正方形/長方形 1").AutoShapeType = 3
    
End Sub

適当に、「3」と入力してみます。

実行する前の、オートシェイプです。

オートシェイプを用意

実行する前のオートシェイプ

では、実行します。

「タイプ」を設定

オートシェイプのタイプを設定した結果

結果は、「台形」になりました。

他の、オートシェイプの番号は、「マクロ記録」で調べるといいです。

背景色を設定(Fill.ForeColor.RGB)

背景色を設定してみます。

Sub TEST13()
    
    '背景色を設定
    ActiveSheet.Shapes("正方形/長方形 1").Fill.ForeColor.RGB = RGB(255, 255, 0)
    
End Sub

実行する前のオートシェイプです。

オートシェイプを用意

実行する前のオートシェイプ

では、実行します。

「背景色」を設定

オートシェイプの背景色を設定

背景色が、「黄色」になりました。

透過率を設定(Fill.Transparency)

透過率を設定してみます。

Sub TEST14()
    
    '透過率を設定
    ActiveSheet.Shapes("正方形/長方形 1").Fill.Transparency = 0
    
End Sub

「0」が、透過なしで、「1」が完全に透過して、背景色なしになります。

実行する前のオートシェイプです。

オートシェイプを用意

実行する前のオートシェイプ

では、実行します。

「透過率」を設定

オートシェイプの透過率を設定

半分だけ透過しました。

枠線の色を設定(Line.ForeColor.RGB)

枠線の色を設定してみます。

Sub TEST15()

    '枠線の色を設定
    ActiveSheet.Shapes("正方形/長方形 1").Line.ForeColor.RGB = RGB(255, 255, 0)
    
End Sub

実行する前のオートシェイプです。

オートシェイプを用意

実行する前のオートシェイプ

では、実行します。

「枠線の色」を設定

オートシェイプの枠線の色を設定

枠線の色が、「黄色」になりました。

という感じで、オートシェイプを設定することができます。

代表的なところを、まとめました。

この辺がわかれば、オートシェイプで、大体の設定はできます。

VBAでオートシェイプの値を取得

次は、オートシェイプの値を、取得する方法を、解説します。

基本的には、先ほどの設定を、変数に入れるなりすると、取得することができます。

それ以外にも、オートシェイプのセルの位置など、取得だけのパターンもありますので、解説していきます。

左の位置を取得(Left)

オートシェイプの「左の位置」を取得して、別のオートシェイプに設定してみます。

「正方形/長方形 1」から取得して、「正方形/長方形 2」に設定します。

Sub TEST16()
    
    '左の位置を取得
    a = ActiveSheet.Shapes("正方形/長方形 1").Left
    
    '左の位置を設定
    ActiveSheet.Shapes("正方形/長方形 2").Left = a
    
End Sub

2つのオートシェイプを用意しました。

2つのオートシェイプを用意

2つのオートシェイプを用意

では、実行してみます。

「左の位置」を取得して設定

左の位置を取得して、別のオートシェイプに設定した結果

左の位置が、揃いました。

左の位置を取得できていきます。

上の位置を取得(Top)

オートシェイプの「上の位置」を取得して、別のオートシェイプに設定してみます。

「正方形/長方形 1」から取得して、「正方形/長方形 2」に設定します。

Sub TEST17()
    
    '上の位置を取得
    a = ActiveSheet.Shapes("正方形/長方形 1").Top
    
    '上の位置を設定
    ActiveSheet.Shapes("正方形/長方形 2").Top = a
    
End Sub

2つのオートシェイプを用意しました。

2つのオートシェイプを用意

2つのオートシェイプを用意

では、実行してみます。

「上の位置」を取得して設定

上の位置を取得して、別のオートシェイプに設定した結果

上の位置が、揃いました。

上の位置を取得できていきます。

幅を取得(Width)

オートシェイプの「幅」を取得して、別のオートシェイプに設定してみます。

「正方形/長方形 1」から取得して、「正方形/長方形 2」に設定します。

Sub TEST18()
    
    '幅を取得
    a = ActiveSheet.Shapes("正方形/長方形 1").Width
    
    '幅を設定
    ActiveSheet.Shapes("正方形/長方形 2").Width = a
    
End Sub

2つのオートシェイプを用意しました。

2つのオートシェイプを用意

2つのオートシェイプを用意

では、実行してみます。

「幅」を取得して設定

幅を取得して、別のオートシェイプに設定した結果

同じ「幅」になりました。

オートシェイプの「幅」を取得できていきます。

高さを取得(Height)

オートシェイプの「高さ」を取得して、別のオートシェイプに設定してみます。

「正方形/長方形 1」から取得して、「正方形/長方形 2」に設定します。

Sub TEST19()
    
    '高さを取得
    a = ActiveSheet.Shapes("正方形/長方形 1").Height
    
    '高さを設定
    ActiveSheet.Shapes("正方形/長方形 2").Height = a
    
End Sub

2つのオートシェイプを用意しました。

2つのオートシェイプを用意

2つのオートシェイプを用意

では、実行してみます。

「高さ」を取得して設定

高さを取得して、別のオートシェイプに設定した結果

同じ「高さ」になりました。

オートシェイプの「高さ」を取得できていきます。

オートシェイプのタイプを取得(AutoShapeType)

オートシェイプの「タイプ」を取得して、別のオートシェイプに設定してみます。

「正方形/長方形 1」から取得して、「正方形/長方形 2」に設定します。

Sub TEST20()
    
    'タイプを取得
    a = ActiveSheet.Shapes("正方形/長方形 1").AutoShapeType
    
    'タイプを設定
    ActiveSheet.Shapes("正方形/長方形 2").AutoShapeType = a
    
End Sub

2つのオートシェイプを用意しました。

2つのオートシェイプを用意

2つのオートシェイプを用意

では、実行してみます。

「タイプ」を取得して設定

タイプを取得して、別のオートシェイプに設定した結果

同じ「タイプ」になりました。

オートシェイプの「タイプ」を取得できていきます。

背景色を取得(Fill.ForeColor.RGB)

オートシェイプの「背景色」を取得して、別のオートシェイプに設定してみます。

「正方形/長方形 1」から取得して、「正方形/長方形 2」に設定します。

Sub TEST21()
    
    '背景色を取得
    a = ActiveSheet.Shapes("正方形/長方形 1").Fill.ForeColor.RGB
    
    '背景色を設定
    ActiveSheet.Shapes("正方形/長方形 2").Fill.ForeColor.RGB = a
    
End Sub

2つのオートシェイプを用意しました。

2つのオートシェイプを用意

2つのオートシェイプを用意

では、実行してみます。

「背景色」を取得して設定

背景色を取得して、別のオートシェイプに設定した結果

同じ「背景色」になりました。

オートシェイプの「背景色」を取得できていきます。

透過率を取得(Fill.Transparency)

オートシェイプの「透過率」を取得して、別のオートシェイプに設定してみます。

「正方形/長方形 1」から取得して、「正方形/長方形 2」に設定します。

Sub TEST22()
    
    '透過率を取得
    a = ActiveSheet.Shapes("正方形/長方形 1").Fill.Transparency
    
    '透過率を設定
    ActiveSheet.Shapes("正方形/長方形 2").Fill.Transparency = a
    
End Sub

2つのオートシェイプを用意しました。

2つのオートシェイプを用意

2つのオートシェイプを用意

では、実行してみます。

「透過率」を取得して設定

透過率を取得して、別のオートシェイプに設定した結果

同じ「透過率」になりました。

オートシェイプの「透過率」を取得できていきます。

枠線の色を取得(Line.ForeColor.RGB)

オートシェイプの「枠線の色」を取得して、別のオートシェイプに設定してみます。

「正方形/長方形 1」から取得して、「正方形/長方形 2」に設定します。

Sub TEST23()
    
    '枠線の色を取得
    a = ActiveSheet.Shapes("正方形/長方形 1").Line.ForeColor.RGB
    
    '枠線の色を設定
    ActiveSheet.Shapes("正方形/長方形 2").Line.ForeColor.RGB = a
    
End Sub

2つのオートシェイプを用意しました。

2つのオートシェイプを用意

2つのオートシェイプを用意

では、実行してみます。

「枠線の色」を取得して設定

枠線の色を取得して、別のオートシェイプに設定した結果

同じ「枠線の色」になりました。

オートシェイプの「枠線の色」を取得できていきます。

左上のセルを取得(TopLeftCell)

オートシェイプの「左上のセル」を取得してみます。

これは、設定にはないものです。

オートシェイプの位置を取得するのに使える、便利なVBAコードです。

Sub TEST24()
    
    '左上のセルのアドレスを取得
    a = ActiveSheet.Shapes("正方形/長方形 1").TopLeftCell.Address
    
    Debug.Print a
    
End Sub

オートシェイプを用意しました。

オートシェイプを用意

オートシェイプを用意

では、実行してみます。

「左上のセル」のアドレスを取得

オートシェイプの左上のセルのアドレスを取得

結果は、「$B$2」となりました。

左上なので、ここですね。

「左上のセル」はこれ↓

オートシェイプの左上

オートシェイプの左上のセルで、アドレスは、「B2」なので、合っていますね。

右下のセルを取得(BottomRightCell)

次は、オートシェイプの「右下のセル」を取得してみます。

Sub TEST25()
    
    '右下のセルのアドレスを取得
    a = ActiveSheet.Shapes("正方形/長方形 1").BottomRightCell.Address
    
    Debug.Print a
    
End Sub

オートシェイプを用意しました。

オートシェイプを用意

オートシェイプを用意

では、実行してみます。

「右下のセル」のアドレスを取得

オートシェイプの右下のセルのアドレスを取得

結果は、「$C$5」となりました。

右下なので、ここですね。

「右下のセル」はこれ↓

オートシェイプの右下

オートシェイプの右下のセルで、アドレスは、「C5」なので、合っていますね。

こんな感じで、オートシェイプの値を取得することができます。

値を取得して、別のオートシェイプに貼り付けする、という使い方が多いですね。

オートシェイプの設定と取得に、慣れていきましょう。

おわりに

この記事では、オートシェイプの位置や背景色の、取得と設定について、ご紹介しました。

オートシェイプをVBAで操作する場合は、既にあるオートシェイプから背景色や位置を取得して、設定したりします。

基本的な取得と設定のやり方がわかっていると、十分に、VBAでオートシェイプの操作を自動化できるようになります。

マニアックなところは、マクロの記録でVBAコードを調べて、細かい操作もできるようにしていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す