April 10, 2014

Excel VBAのTopLeftCellプロパティが分からない

Excel VBAには、オブジェクトの左上にあるセルを求めてくれるTopLeftCellというプロパティがあるのですが、いまいち使い方が分からないのでメモ。

Selectionに対して機能しない

選んだ図形のそれぞれのTopLeftCellを得ようとして、以下のようなコードを書くと、「実行時エラー '438' オブジェクトはこのプロパティまたはメソッドをサポートしていません。」というエラーが発生します。

Sub testTopLeftCell()
    For Each target In Selection.ShapeRange
        MsgBox target.TopLeftCell.Address
    Next
End Sub

以下の記事にもあるように昔から知られている問題のようですが、あまりこの機能を使う人がいないのか、それとも、もっと簡単な解決法があるからなのか、ネット上を検索してもまともな解答が見つかりません。
VB Macro problem using TopLeftCell
http://www.mrexcel.com/forum/excel-questions/432495-vbulletin-macro-problem-using-topleftcell.html#

対処療法しかないのか?

まともな対応方法が分からず、今のところ以下のようなコードでお茶を濁しています。
どうやるのが正解なのでしょう…。

Sub testTopLeftCell2()
    For Each target In Selection.ShapeRange
        MsgBox ActiveSheet.Shapes(target.Name).TopLeftCell.Address
    Next
End Sub

2014/4/12追記 .Nameは一意でないので.IDを使う方がよさそう…か?
Sub testTopLeftCell3()
    For Each target In Selection.ShapeRange
        MsgBox ActiveSheet.Shapes(target.id).TopLeftCell.Address
    Next
End Sub

No comments :

Post a Comment