1

VBAを使用したExcelの方法、またはExcelの他の方法を誰かが知っているかどうか疑問に思っています:

Excel にプロットされた図の x 軸を対話的にクリックすると、その x 軸の値がセルに出力されます。

誰にもアイデアはありますか?私は困惑しています。

4

1 に答える 1

1

特に簡単な作業ではありません...

グラフ/グラフの軸が表示されたときのイベント ハンドラーを作成すると、開始できます。これを Workbook コード モジュールに入れます。ファイルを開くと、イベントChtに応じて設定されます。Workbook_Openその後、Private Sub Cht_Select...ユーザーがグラフを選択するたびに実行されます。選択したパーツが軸の場合、メッセージ ボックスが表示されます。軸に対するカーソル位置を決定する方法を考え出し、軸の値を計算するためにいくつかの計算を行う必要があります。

Option Explicit

Public WithEvents Cht As Chart
Private Sub Cht_Select(ByVal ElementID As Long, _
    ByVal Arg1 As Long, ByVal Arg2 As Long)

    If ElementID = xlAxis Then
    MsgBox "Call your macro here to identify cursor position in chart..."
    End If

End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Set Cht = Nothing
End Sub

Private Sub Workbook_Open()
    Set Cht = Sheet1.ChartObjects(1).Chart
End Sub

マウス カーソルの位置の取得に関する情報がいくつかあります。

http://support.microsoft.com/kb/152969

次に、軸の位置と長さを取得し、簡単な計算を行って、カーソルがある軸の値を計算する必要があります。

これは、配列で XY 座標を返すために、標準モジュールに入れることができるわずかに変更されたバージョンです。軸が選択されたときにカーソルの軸の値を計算 (または概算) するために、チャート軸オブジェクト、最小/最大、長さ、左と上の値でこれらを使用する方法を理解するのはあなた次第です。

' Access the GetCursorPos function in user32.dll
  Declare Function GetCursorPos Lib "user32" _
  (lpPoint As POINTAPI) As Long
  ' Access the GetCursorPos function in user32.dll
  Declare Function SetCursorPos Lib "user32" _
  (ByVal x As Long, ByVal y As Long) As Long

  ' GetCursorPos requires a variable declared as a custom data type
  ' that will hold two integers, one for x value and one for y value
  Type POINTAPI
     X_Pos As Long
     Y_Pos As Long
  End Type

  ' This function retrieve cursor position:
  Function Get_Cursor_Pos() As Variant

  ' Dimension the variable that will hold the x and y cursor positions
  Dim Hold As POINTAPI
    Dim xyArray(1) As Variant

  ' Place the cursor positions in variable Hold
  GetCursorPos Hold

  ' Display the cursor position coordinates
    xyArray(0) = Hold.X_Pos
    xyArray(1) = Hold.Y_Pos
    Get_Cursor_Pos = xyArray
  End Function

Sub GetCoordinates()
    Dim xyPosition As Variant

    xyPosition = Get_Cursor_Pos

    Debug.Print xyPosition(0)
    Debug.Print xyPosition(1)

    '### Now that you have the x and y position, you will need to perform some
    ' additional computations with the Axis' .top, .left, and its min/max values
    ' in order to get the approximate axis location where you mouse-clicked it.


End Sub
于 2013-03-20T01:59:36.367 に答える