Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


43349 / 76735 ←次へ | 前へ→

【38435】Re:ワークシート上のグラフの座標を知り...
発言  ichinose  - 06/6/2(金) 19:11 -

引用なし
パスワード
   ▼わいわい さん:
こんばんは。

>確認したところ、75%表示のときに1ドット=1また150%表示のときに1ドット=0.5ですから、グラフ軸左上とPlotAreaの左上は 16/3*ActiveWindow.Zoom/100 ドット(当然四捨五入)ずれていると言うことみたいですね。
なるほど・・・、実は私は当初Zoomの事まで考慮してなかったので
すごい!!と感心していたのですが・・・。


ちょっと実験してみましょう!!

新規ブックの適当なシートのシートモジュールに

'======================================================================
Dim WithEvents cht As Chart
'======================================================================
Sub set_obj()
  Set cht = Me.ChartObjects(1).Chart
  MsgBox cht.Name
End Sub
'======================================================================
Sub reset_obj()
  Set cht = Nothing
End Sub
'=========================================================================
Private Sub cht_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
  Dim dx As Double
  Dim dy As Double
  Dim hx As Double
  Dim hy As Double
  Dim txt As TextBox
  Dim shp As Shape
  Dim xmax As Double
  Dim ymax As Double
  With cht.PlotArea
    lp = .InsideLeft: Tp = .InsideTop
    Wp = .InsideWidth: Hp = .InsideHeight
  End With
  ymax = cht.Axes(xlValue).MaximumScale
  xmax = cht.Axes(xlCategory).MaximumScale
  dx = xmax / Wp
  dy = ymax / Hp
  hx = cht.ChartArea.Left
  hy = cht.ChartArea.Top
  MsgBox "Plotx" & (0.75 * x * 100 / ActiveWindow.Zoom - hx - lp) * dx & "----" & "plotY" & (Tp + Hp - 0.75 * y * 100 / ActiveWindow.Zoom + hy) * dy & vbCrLf & _
     "plotarea inleft" & cht.PlotArea.InsideLeft & "----" & "plotarea intop" & cht.PlotArea.InsideTop & vbCrLf & _
     "plotarea left" & cht.PlotArea.Left & "----plotarea top " & cht.PlotArea.Top & vbCrLf & _
     "0.75*x= " & 0.75 * x & "---- 0.75*y= " & 0.75 * y & vbCrLf & _
     "chartarea.left " & ActiveChart.ChartArea.Left & "--- chartarea top " & ActiveChart.ChartArea.Top
End Sub
'=======================================================================
Sub mk_sample()
  Dim mkcht As Chart
  With Me
    .Range("a1:b1").Value = Array("X", "Y")
    With .Range("a2:b31")
     .Formula = "=round(100*rand(),2)"
     .Value = .Value
     End With
    End With
  Set mkcht = ThisWorkbook.Charts.add
  With mkcht
    .ChartType = xlXYScatter
    .SetSourceData Source:=Me.Range("A1:B31"), PlotBy:=xlColumns
    .PlotArea.Left = 0
    .PlotArea.Top = 0
    .Location Where:=xlLocationAsObject, Name:=Me.Name
   End With
End Sub


前回のSelectイベントのコードをMouseDownイベント用に変更したものです。
zoomは、100%で実行してください。

1.mk_sampleを実行してサンプルデータとグラフを作成してください。

2.作成したグラフのPlotareaのLeftとTopプロパティは0に設定しました。
  グラフを良く見てください。
  この「0」って、グラフエリアからのポイントですよね?

3.set_objを実行してイベントの発生を可能にしてください。

4.まず、このチャートオブジェクトの左上の角をクリックしてください。
  (0.75*X 及び、0.75*yが0になるポイントです)。
  結構合わせるのが難しいですけど・・・、
  両方0になるポイントをクリックしてください。
  このとき、Msgboxが表示されますが、
  抜粋すると、
  Plotarea.Left Plotarea.Topは、0
  ChartArea.Left Chartarea.Topは、共に3と表示されました
  (私の環境で)

  つまり、PolotareaのLeft,Topは、Chartareaを起点にしたポイントであるのに
  対し、イベントから取得される0.75*xと0.75*yは、
  ChartObjectの左上を角を起点にしています。

  このポイント3の補正のための処理が必要だと思っているのです。

  よって、Mousedownイベントの補正が上記のコードのようになるのですが・・。
  プロットもクリックしてください。X,Yの値もおおよそ合っています。


 いかがでしょうか?

1 hits

【38273】ワークシート上のグラフの座標を知りたい わいわい 06/5/30(火) 20:37 質問
【38299】Re:ワークシート上のグラフの座標を知りたい Kein 06/5/31(水) 3:12 回答
【38355】Re:ワークシート上のグラフの座標を知り... わいわい 06/5/31(水) 19:10 質問
【38360】Re:ワークシート上のグラフの座標を知り... Kein 06/5/31(水) 22:01 回答
【38371】Re:ワークシート上のグラフの座標を知り... ichinose 06/6/1(木) 8:25 発言
【38379】Re:ワークシート上のグラフの座標を知り... わいわい 06/6/1(木) 12:41 質問
【38381】Re:ワークシート上のグラフの座標を知り... Kein 06/6/1(木) 13:04 発言
【38395】Re:ワークシート上のグラフの座標を知り... ichinose 06/6/1(木) 20:38 発言
【38396】Re:ワークシート上のグラフの座標を知り... ichinose 06/6/1(木) 21:12 発言
【38412】Re:ワークシート上のグラフの座標を知り... わいわい 06/6/2(金) 9:33 お礼
【38413】Re:ワークシート上のグラフの座標を知り... ichinose 06/6/2(金) 10:01 発言
【38420】Re:ワークシート上のグラフの座標を知り... わいわい 06/6/2(金) 11:12 発言
【38435】Re:ワークシート上のグラフの座標を知り... ichinose 06/6/2(金) 19:11 発言
【38437】Re:ワークシート上のグラフの座標を知り... わいわい 06/6/2(金) 20:54 お礼
【38440】Re:ワークシート上のグラフの座標を知り... ichinose 06/6/2(金) 22:14 発言

43349 / 76735 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free