
No.8ベストアンサー
- 回答日時:
#3です。
当方に対するコメントではありませんが、CheckBox(コントロールツールボックス)による動作On/Offなら、Worksheet_Activateのイベントなどに比べてスッキリしますので、完成形?として上げておきます。(目的のグラフのあるWorksheetモジュールに記載します)クラスモジュールを使ってみようかと思うスキルの方ならご自分で出来る事だと存じますが、ご参考まで。
Public WithEvents myGraph As Chart
Private Sub CheckBox1_Click()
If Me.CheckBox1.Value = True Then
Set myGraph = Me.ChartObjects(1).Chart
Else
Set myGraph = Nothing
End If
End Sub
Private Sub myGraph_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim ElemID As Long, Arg1 As Long, Arg2 As Long
Dim Var As Variant
Dim Msg As String
If Me.CheckBox1.Value = False Then Exit Sub
'GetChartElementメソッドを用いてクリックしたデータ系列を取得。
'(中略)下記URL参照
'http://moug.net/tech/exvba/0020010.html'第三引数以降に対象オブジェクトの情報が格納される
End Sub
No.7
- 回答日時:
>チェックが外されたときにSetChartを無効にすることはできるのでしょうか?
ワークシート上のチェックボックスでしょうか?
でしたら、No.4 の標準モジュールのほうのコードを次のものに書き換えてみてください。
Private cl As New Class1
Public Sub SetChart()
If ActiveSheet.CheckBoxes(1) = xlOn Then
Set cl.myChart = Worksheets(1).ChartObjects(1).Chart '←実際のインデックスに書換え
Else
Set cl.myChart = Nothing
End If
End Sub
No.6
- 回答日時:
No.4 です。
No.4 のコードにおけるイベントとメソッドの挙動について、情報提供します。私が手元の Excel 2007 で試してみたところ、MouseDown イベント(クリックのボタンを押したときに発生)では正常に動くのですが、なぜか MouseUp(クリックのボタンが上がったときに発生)にすると、エラーが発生しました。MouseUp のときは、Chart.GetChartElement メソッドにおいて、第 3 引数(ElementID)には値が入るのですが、第 4、第 5 引数(SeriesIndex、PointIndex)には入らないようでした。
バグなのか、それとも何か私が勘違いをしているのか分かりませんが、ともかくそのような現象がみられたので、報告します。
No.5
- 回答日時:
#3です。
考えてみると、Worksheet自体がクラスモジュールなので、別個にクラスモジュールを設けなくてもいけました。目的の埋め込みグラフがあるワークシートモジュールに記述して下さい。ご参考まで。
Public WithEvents myGraph As Chart
Private Sub myGraph_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim ElemID As Long, Arg1 As Long, Arg2 As Long
Dim Var As Variant
Dim Msg As String
'GetChartElementメソッドを用いてクリックしたデータ系列を取得。
'(中略)下記URL参照
'http://moug.net/tech/exvba/0020010.html
End Sub
Private Sub Worksheet_Activate()
If myGraph Is Nothing Then Set myGraph = Me.ChartObjects(1).Chart
End Sub
No.4
- 回答日時:
ああ、すみません。
No.1・2 ですが、ご質問の意味を誤解していたのかもしれません。座標が表示されるというのは、散布図のプロットのことですか?
そうだとすれば、No.1・2 のコードは、グラフ以外のものも含めてどんな図であっても、という話なので、無視してください。
メニューからクラスモジュールを挿入。クラスモジュールと標準モジュールに次の 2 つのコードを貼ってください。次に、SetChart を 1 回、実行。後はプロットをクリックしてください。イミディエイトウィンドウに座標を書き出します。
クラスモジュール
Public WithEvents myChart As Chart
Private Sub myChart_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim ElementID As Long, SeriesIndex As Long, PointIndex As Long
Dim ax As Variant, ay As Variant
myChart.GetChartElement x, y, ElementID, SeriesIndex, PointIndex
If ElementID = xlSeries Then
ax = myChart.SeriesCollection(SeriesIndex).XValues
ay = myChart.SeriesCollection(SeriesIndex).Values
Debug.Print "x:" & ax(PointIndex) & vbCrLf & "y:" & ay(PointIndex) & vbCrLf
End If
End Sub
標準モジュール
Private cl As New Class1
Public Sub SetChart()
Set cl.myChart = Worksheets(1).ChartObjects(1).Chart '←実際のインデックスに書換え
End Sub
ありがとうございます。
ご説明の通りやったら、出来ました。
チェックボックスを配置してチェックがついたときにSetChartが実行されるようにしたのですが、
チェックが外されたときにSetChartを無効にすることはできるのでしょうか?
No.3
- 回答日時:
グラフのマーカーをクリックして、該当するX,Yの値を得たいのですね。
1.グラフシートなら、こちらで可能です。
http://moug.net/tech/exvba/0020010.html
2.ワークシートの埋め込みグラフの場合は、こちらと組み合わせる必要があります。
http://bitassociates.jp/vba/tips/tips004.html
試しにやってみました。
Worksheet_Activateイベントでクラスのインスタンスを生成しているので、一旦他のシートに移ってから戻らないと動作しません。また、最小限しか記述してないので、お行儀が悪いコードですが、ご参考まで。
'☆ クラスモジュール class1(挿入、クラスモジュールでのお仕着せの名前のまま)
Public WithEvents myGraph As Chart
Private Sub myGraph_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim ElemID As Long, Arg1 As Long, Arg2 As Long
Dim Var As Variant
Dim Msg As String
'GetChartElementメソッドを用いてクリックしたデータ系列を取得。
(中略) 最初のリンク先をご参照下さい。
End Sub
'☆グラフを埋め込んであるシートモジュール(グラフが一個しかない前提)に記述
Dim myGraphObj As New Class1
Private Sub Worksheet_Activate()
Set myGraphObj.myGraph = Me.ChartObjects(1).Chart
End Sub
No.1
- 回答日時:
作ってみました。
クリックの位置となるとそのようなオプジェクトやプロパティは Excel になく、スクリーン座標が必要ですから、API 関数です。図の左上の角に対する相対的な位置座標の計算は、算数で習うとおり、位置ベクトルの引き算でできるわけですね。標準モジュールに下のコードを貼り付け。グラフを右クリック、マクロの登録から登録。クリックしたときに A2・B2、A3・B3、A4・B4、…に x、y 座標を記入していきます。
参考 URL の、特に注 1 というところも参照してください。DPI、PPI の話が載っています。
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Type POINTAPI
x As Long
y As Long
End Type
Sub PointInClick()
Const DtoP As Double = 72 / 96
Dim z As Long, xw As Long, yw As Long, xs As Long, ys As Long, xc As Long, yc As Long
Dim p As POINTAPI
z = ActiveWindow.Zoom / 100
xw = ActiveWindow.PointsToScreenPixelsX(0)
yw = ActiveWindow.PointsToScreenPixelsY(0)
With ActiveSheet.Shapes(1)
xs = .Left
ys = .Top
End With
GetCursorPos p
With Cells(Rows.Count, "a").End(xlUp)
.Offset(1, 0).Value = Round(((p.x - xw) * DtoP) / z - xs)
.Offset(1, 1).Value = Round(((p.y - yw) * DtoP) / z - ys)
End With
End Sub
参考URL:http://home.att.ne.jp/zeta/gen/excel/c04p06.htm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 中学校 中1数学 比例のグラフの座標の読み取り 4 2023/03/28 12:26
- 物理学 角運動量の式変形が分かりません。 4 2022/08/03 21:04
- 数学 2次関数y=ax^2のグラフは点A(4,2)を通っている。y軸上に点BをAB=OB(Oは原点)となる 1 2022/04/08 00:05
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- 数学 線形代数の2次元直交座標系、極座標系についての問題がわからないです。 2 2022/07/16 20:42
- 数学 高校数学で質問があります。 2 2023/02/13 15:49
- 数学 等しい写像のイメージ 等しい写像を座標平面上のグラフでイメージした時、 「定義域と終域が一致」して、 1 2022/06/13 02:03
- 数学 高校数学で質問があります。 2 2023/02/13 16:40
- 数学 線形代数の問題について教えて欲しいです。 3 2023/05/06 23:13
- 統計学 【統計】標本平均、標本標準偏差からt分布グラフ作成方法 9 2022/10/18 23:46
このQ&Aを見た人はこんなQ&Aも見ています
-
Excel グラフのプロットからデータを見つける
Excel(エクセル)
-
Excelの散布図でプロットした任意の2点を直線で結びたいのですが
Excel(エクセル)
-
VBA 散布図の点の元セルを取得したい
Excel(エクセル)
-
-
4
エクセルのグラフで値を求める方法
Excel(エクセル)
-
5
Excel VBAでグラフをクリックした時走るイベントありますか?
その他(プログラミング・Web制作)
-
6
グラフ要素のセルを参照したいのですが・・・
Visual Basic(VBA)
-
7
グラフの交点の求め方(Excel)
Visual Basic(VBA)
-
8
エクセルのグラフ読み取りについて
その他(Microsoft Office)
-
9
エクセルで散布図をつくったとき
その他(Microsoft Office)
-
10
VBA(excel)でグラフのデータ範囲の取得
その他(Microsoft Office)
-
11
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
12
Excelでx軸とy軸を設定して図を作成したい。
Excel(エクセル)
-
13
ExcelVBA:複数の特定のグラフを選択する方法
Visual Basic(VBA)
-
14
ブック名、シート名を他のモジュールからも参照可能にする方法
Access(アクセス)
-
15
グラフのサイズを揃えたいのでVBAを使っていたのですが、数値軸の最大値
その他(Microsoft Office)
-
16
「データ要素を線で結ぶ」がチェックできない!?
Excel(エクセル)
-
17
エクセルグラフで系列名を取得したい
Excel(エクセル)
-
18
エクセルの散布図グラフで二点を直線でつなぎたい。
Excel(エクセル)
-
19
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
20
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA 定義されたプロージ...
-
グラフのX,Y座標を取得したい
-
ユーザー定義関数に#NAME?が返...
-
Excel VBAでリンク切れをチェッ...
-
'Range'メソッドは失敗しました
-
acwzlibとは?
-
モジュールとクラスの違いって...
-
VBでグローバル変数を宣言するには
-
VBA モジュールで共通に使う変...
-
Excel VBAで、ユーザーフォーム...
-
標準モジュールを削除したい。(...
-
VBA This Workbookモジュール...
-
vba userFormのSubを標準モジュ...
-
印刷後メッセージボックスを表...
-
モジュールからフォームのボタ...
-
システムエラーの内容
-
VBAで「メモリが不足しています」
-
本当にPublicな変数(配列で)
-
Excelシート内セル記述の違いに...
-
モジュールの最大数はいくつな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで別モジュールへの変数の受...
-
ユーザー定義関数に#NAME?が返...
-
エクセルVBAでシートモジュール...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBAで、ユーザーフォーム...
-
Excel VBA 定義されたプロージ...
-
VBでグローバル変数を宣言するには
-
vba userFormのSubを標準モジュ...
-
モジュールの最大数はいくつな...
-
【vba】フォームに書いてあ...
-
Excel VBA 『Call』で呼び出す...
-
VBAで旧字体を異字体に一括で変...
-
モジュールとクラスの違いって...
-
モジュールからフォームのボタ...
-
大量の標準モジュールを解放す...
-
acwzlibとは?
-
SendKeysの使い方について
-
標準モジュールを削除したい。(...
-
VBA This Workbookモジュール...
-
VBA モジュールで共通に使う変...
おすすめ情報