タイムマシーンがあったら、過去と未来どちらに行く?

エクセルで、セルの左上の座標を取得することは簡単ですが、任意の座標が属するセルのアドレスって取得することってできますか?
たとえば、X100、Y100の座標は、セルアドレスB5のセルの中に含まれるってな関数がVBAでほしいです。
どなたか詳しい方いらっしゃいましたら教えてください。宜しくお願いいたします。

A 回答 (5件)

座標のアドレス取得を思いつかなかったので、一旦、その座標にダミーのオブジェクトを置いて、その場所のセルアドレスを取得してみました。


もちろんダミーは取得後削除してます。

Sub TEST()
x = 100
y = 100
Set dmy = ActiveSheet.Shapes.AddShape(msoShapeRectangle, y, x, 10#, 10#)
MsgBox dmy.TopLeftCell.Address
dmy.Delete
Set dmy = Nothing
End Sub
    • good
    • 2
この回答へのお礼

お返事ありがとうございます。
なるほど、仮に書いてしまえばいいんですね!!
参考にして活用させて頂きます。

お礼日時:2007/08/24 17:51

#4の追記です。



> For i = BClm To BClm + 15
> For j = BRow To BRow + 30

この部分は、表示画面内の列数と行数が、せいぜい15列・30行という
前提でのものです。
また、表示画面を超えるような座標が指定された場合のエラー処理は
行なっていませんので、悪しからずご了承願います。 (^^ゞ
    • good
    • 0

ユーザー関数を試みてみました。


=PNT(100,100) または =PNT(A1,A2) の形式で使用します。
なお、座標数値はシートの絶対座標ではなく、表示画面の左上端セルの
左上角を 0,0 とした相対座標です。

Function PNT(myX, myY)
 Dim BRow, BClm, BTop, BLft, i, j
 BRow = ActiveWindow.VisibleRange.Cells(1, 1).Row
 BClm = ActiveWindow.VisibleRange.Cells(1, 1).Column
 BLft = ActiveWindow.VisibleRange.Cells(1, 1).Left
 BTop = ActiveWindow.VisibleRange.Cells(1, 1).Top
 For i = BClm To BClm + 15
  If Columns(i).Left > myX + BLft Then Exit For
 Next
 For j = BRow To BRow + 30
  If Rows(j).Top > myY + BTop Then Exit For
 Next
 PNT = Cells(j - 1, i - 1).Address
End Function
    • good
    • 0

邪道ですが(^^;



Sub Macro2()
 ActiveSheet.Shapes.AddShape(msoShapeRectangle, 100, 100, 10, 10).Select
 MsgBox Selection.TopLeftCell.Address
 Selection.Delete
End Sub
    • good
    • 0

CurrentRegion


を使ってみてください。
参考です。

Sub test()
Dim r As Range
Set r = Range("C5").CurrentRegion
If Intersect(ActiveCell, r) Is Nothing Then
MsgBox "含まれない"
Else
MsgBox "含まれる"
End If
End Sub

この回答への補足

早速のお返事ありがとうございます。
すると任意の座標だとすべてのセル範囲をEachでループ掛ける必要があるのでしょうか?宜しくお願いいたします。

補足日時:2007/08/24 16:13
    • good
    • 0
この回答へのお礼

すみません!!早合点してしまいました。
あるセルが、任意のセル範囲に含まれるかどうかではなくって、ある座標が、どのセルに含まれるか?が知りたいんですが?

お礼日時:2007/08/24 16:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報