私は3つの列テーブルを持っています。 2つの列は、散布図の生成に使用されるxy値を提供します。 3番目の列にはハイパーリンクが含まれています。各行にはx値、y値、ハイパーリンクが含まれています(各リンクは一意です)。 Excelの散布図のデータポイントをクリックすると、対応するハイパーリンクのセルアドレスを取得するにはどうすればよいですか?Excel散布図のデータポイントをクリックしてセルアドレスを取得するにはどうすればよいですか?
0
A
答えて
1
これを行う1つの方法は、ハイパーリンクの列を名前付き範囲に含めることです。彼らがいったんそれを見れば、それはチャートからそれらを参照するのに十分なほどまっすぐです。
あなたが求めているものは完全にはわかりませんが、データポイントをクリックするとY値/セルの横にあるセルの値のメッセージボックスがポップアップ表示されます。
これを行う1つの方法は、ハイパーリンクの列を名前付き範囲に含めることです。彼らがいったんそれを見れば、それはチャートからそれらを参照するのに十分なほどまっすぐです。
あなたは別のチャートワークシート上のグラフを持っているなら、あなたは(チャートワークシートモジュールに組み込まれた)次のコードを使用することができます。
Private Sub Chart_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim lngElementID As Long
Dim lngArg1 As Long
Dim lngArg2 As Long
'Only catch Left-Clicks
If Button = xlPrimaryButton Then
With ActiveChart
'Get the coordinates of what has been clicked
call .GetChartElement(x, y, lngElementID, lngArg1, lngArg2)
If lngElementID = xlSeries Then
If lngArg2 > 0 Then
'Range containing the messages to be displayed
Set varRange = Worksheets("Sheet1").[ChartURLs]
Call MsgBox(CStr(varRange(lngArg2, 1)))
End If
End If
End With
End If
End Sub
チャートは、単に通常のワークシートに埋め込まれている場合があり、 WithEventsを使用してChartイベントを捕捉する必要があるため、さらに多くのことを行います。新しいクラスモジュールに次のコードを追加します。
Option Explicit
Public WithEvents chartEvents As Chart
Private m_rngPopupMsgs As Range
Private Sub chartEvents_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim lngElementID As Long
Dim lngArg1 As Long
Dim lngArg2 As Long
Dim varRange As Variant
'Only catch Left-Clicks
If Button = xlPrimaryButton Then
With ActiveChart
'Get the coordinates of what has been clicked
.GetChartElement x, y, lngElementID, lngArg1, lngArg2
If lngElementID = xlSeries Then
If lngArg2 > 0 Then
If Not (m_rngPopupMsgs Is Nothing) Then
Set varRange = m_rngPopupMsgs
Call MsgBox(CStr(varRange(lngArg2, 1)))
End If
End If
End If
End With
End If
End Sub
Public Property Get PopupMsgs() As Range
Set PopupMsgs = m_rngPopupMsgs
End Property
Public Property Set PopupMsgs(rngPopupMsgs As Range)
Set m_rngPopupMsgs = rngPopupMsgs
End Property
Private Sub Class_Terminate()
Set m_rngPopupMsgs = Nothing
End Sub
次に、新しいコードモジュールを追加し、次のコードを追加します。
グラフを含むワークシートのワークシートモジュールでOption Explicit
Private m_objChtEvents As New clsChartEvents
Public Sub SelectChart(ByRef wks As Worksheet, ByRef rngPopupMsgs As Range)
Dim objChart As Chart
If wks.ChartObjects.Count > 0 Then
Set m_objChtEvents = New clsChartEvents
Set objChart = wks.ChartObjects(1).Chart
Set m_objChtEvents.chartEvents = objChart
Set m_objChtEvents.PopupMsgs = rngPopupMsgs
End If
End Sub
ザ・「ChartURLs」を置き換える、次のように、あなたはWorksheet_Activateイベント(またはお好みの他のイベント)からSelectChart()プロシージャの呼び出しを追加する必要がありますあなたの範囲の名前を持つ:
Option Explicit
Private Sub Worksheet_Activate()
Call SelectChart(Me, Range("ChartURLs"))
End Sub
うまくいけば、これはあなたが探しているものの一種である、そうでない場合は、それは少なくとも良いスタートでなければなりません。