• ベストアンサー

Excelで、任意の座標が属するセルのAddress

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

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

座標のアドレス取得を思いつかなかったので、一旦、その座標にダミーのオブジェクトを置いて、その場所のセルアドレスを取得してみました。 もちろんダミーは取得後削除してます。 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

wan_wan
質問者

お礼

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

その他の回答 (4)

回答No.5

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

回答No.4

ユーザー関数を試みてみました。 =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

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

邪道ですが(^^; Sub Macro2()  ActiveSheet.Shapes.AddShape(msoShapeRectangle, 100, 100, 10, 10).Select  MsgBox Selection.TopLeftCell.Address  Selection.Delete End Sub

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

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

wan_wan
質問者

お礼

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

wan_wan
質問者

補足

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

関連するQ&A

専門家に質問してみよう