[[20151105152955]] 『貼り付けられた画像のセンタリング』(ひぃ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『貼り付けられた画像のセンタリング』(ひぃ)

商品リストのようなファイルで、現在すでに結合されたセルに画像が貼り付けられています。
この画像が不規則にずれているので結合されたセルの中央へ移動したいです。

ただし画像のサイズは変更しないものと、縦横比は保守しつつセルサイズに合わせるものの二つの方法が知りたいです。

画像は500枚以上あります。

どのようにしたら良いかお教えいただけると幸いです。
よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 ある領域、たとえば、F10 を左上隅とする結合セル領域があったとして、その中点の座補(x,y) は以下になります。

 x = Range("F10").MergeArea.Left + Range("F10").MergeArea.Width / 2

 y = Range("F10").MergeArea.Top + Range("F10").MergeArea.Height / 2

 で、この中点にシェープの中点がくるわけですので

 x = そのシェープ.Left + そのシェープ.Width / 2
 そのシェープ.Left = x - そのシェープ.Width /2

 そのシェープ.Top も y を使って同様に算出できますね。

 ですから、大きさはそのままで、そのシェープの中点を対象領域の中点に合わせるには、単純に

 そのシェープ.Left = 上記で算出した Left値
 そのシェープ.Top = 上記で算出した Top値

 こうすればOKですね。

 で、次に、縦横比を固定して、そのセル内に、できるだけ大きく配置する場合、

 そのシェープ.LockAspectRatio = True で、そのシェープの縦横比を固定した上で、

 そのシェープ.Width = その領域.Width
 If そのシェープ.Height > その領域.Height Then そのシェープ.Height = その領域.Height

 こうした上で、そのシェープ.Left と そのシェープ.Top を上記の値にしてやる。

 これで、領域内縦一杯、あるいは横一杯で その領域内の中点にシェープの中点もあわせた配置が可能かと。

(β) 2015/11/05(木) 16:51


βさま早速回答ありがとうございます。

私はまだマクロ初心者でしてまともにコードをかけるレベルに達してません

(ひぃ) 2015/11/05(木) 18:18


 コード例です。シート上のすべてのシェープを処理します。
 TestA は、大きさはそのままで、領域の中心に配置。
 TestB は、大きさを縦横比率を維持して領域のサイズに合わせ、その領域内で最大化させたうえで、領域の中心に配置します。

 Sub TestA()
    Dim sp As Shape
    Dim r As Range

    For Each sp In ActiveSheet.Shapes
        Set r = sp.TopLeftCell.MergeArea
        With r
            sp.Left = .Left + .Width / 2 - sp.Width / 2
            sp.Top = .Top + .Height / 2 - sp.Height / 2
        End With
    Next

 End Sub

 Sub TestB()
    Dim sp As Shape
    Dim r As Range

    For Each sp In ActiveSheet.Shapes
        Set r = sp.TopLeftCell.MergeArea
        sp.LockAspectRatio = True
        With r
            sp.Width = .Width
            If sp.Height > .Height Then sp.Height = .Height
            sp.Left = .Left + .Width / 2 - sp.Width / 2
            sp.Top = .Top + .Height / 2 - sp.Height / 2
        End With
    Next
 End Sub

(β) 2015/11/05(木) 18:38


β様コードありがとうございました。

どちらのコードも思うような動きをしました

これから少しずつ勉強していきたいと思います
(ひぃ) 2015/11/06(金) 09:19


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.