部品づくり 図形がどのセルの上にあるか
imihitoさんに教えていただいた application.caller TopLeftCell BottonRightCell これらはとても便利そう。
注意すべきは,自分で作り自分だけが使うときは問題ないけど少しだけ図形がずれる,ということがあると想定外の不具合はありそうです。
Altキー押しながらセルの上にきっちり図形を置くと,TopLeftCellは想定通り動きますが,BottomRightCellは右下のセルを返します。
自分の想定ではTopLeftCellのほうを使えばいい,となりますが,ほんのちょこっとずらされてしまうだけでだめになるはず。
なので,図形の真ん中の座標で判定させてみるテストをしてみました。
Sub test() Dim Sht As Worksheet: Set Sht = ActiveSheet Dim Shp As Shape: Set Shp = Sht.Shapes(Application.Caller) Dim CenterX As Long, CenterY As Long CenterX = Shp.Left + Shp.Width / 2 CenterY = Shp.Top + Shp.Height / 2 Dim Rng As Range: Set Rng = Sht.Range(Shp.TopLeftCell.Address & ":" & Shp.BottomRightCell.Address) Dim r As Range For Each r In Rng If CenterX >= r.Left And CenterX < r.Left + r.Width And CenterY >= r.Top And CenterY < r.Top + r.Height Then MsgBox r.Address Exit For End If Next
負荷を減らすべく,評価対象のセルの数を少なくできてたらいいな。
もしこれらで取得するセルを利用する場合は,セルを間違ったら大変なことになるはずなので,基本的には図形名等にセルアドレスを忍ばせて,それを利用することで想定外は無くすべきだと考えますが,次善の策としてはかなり有用だなぁと思います。
それにしてもCallerプロパティはいいですね。これは今後コード書くときに重宝する気がしています。