[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『貼り付けられた画像のセンタリング』(ひぃ)
商品リストのようなファイルで、現在すでに結合されたセルに画像が貼り付けられています。
この画像が不規則にずれているので結合されたセルの中央へ移動したいです。
ただし画像のサイズは変更しないものと、縦横比は保守しつつセルサイズに合わせるものの二つの方法が知りたいです。
画像は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.