Excel VBA質問箱 IV

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

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


379 / 13645 ツリー ←次へ | 前へ→

【80703】行番号列の列幅取得方法 [名前なし] 19/4/17(水) 12:34 質問[未読]
【80705】Re:行番号列の列幅取得方法 マナ 19/4/17(水) 18:27 発言[未読]
【80707】Re:行番号列の列幅取得方法 マナ 19/4/17(水) 22:12 発言[未読]
【80710】Re:行番号列の列幅取得方法 [名前なし] 19/4/19(金) 16:20 お礼[未読]
【80711】Re:行番号列の列幅取得方法 マナ 19/4/19(金) 19:18 発言[未読]
【80713】Re:行番号列の列幅取得方法 [名前なし] 19/4/20(土) 12:33 お礼[未読]

【80703】行番号列の列幅取得方法
質問  [名前なし]  - 19/4/17(水) 12:34 -

引用なし
パスワード
   シート内の円グラフクリック時、マクロを使ってクリックした系列を取得しようとしています。

GetChartElementで系列を取得しようとし、
GetCursorPosでマウス位置を取得しましたが、判定位置にズレがありました。

CommandBars("Formula Bar")の高さ分減らすことで縦軸は調整できたのですが、
横軸のズレが残ったままとなっています。

横軸のズレを治すために、行番号列(A列の左)の幅を取得したいのですが、
CommandBars("Column").Widthを42、45、84の3種で行っても正しい値が取れません。

どの様な方法で取得したらよいでしょうか?
標準モジュールを使用しています。

【80705】Re:行番号列の列幅取得方法
発言  マナ  - 19/4/17(水) 18:27 -

引用なし
パスワード
   ▼[名前なし] さん:

>シート内の円グラフクリック時、マクロを使ってクリックした系列を取得しようとしています。
>
>GetChartElementで系列を取得しようとし、
>GetCursorPosでマウス位置を取得しましたが、判定位置にズレがありました。
>

これとは違うのですか?

ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=80696;id=excel

別の方法でもよければ、こんな感じでできませんか。

Private Sub myChart_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
  Dim ElementID As Long
  Dim Arg1 As Long
  Dim Arg2 As Long

  myChart.GetChartElement x, y, ElementID, Arg1, Arg2

  If ElementID = xlSeries Then
    MsgBox myChart.SeriesCollection(Arg1).Name
  End If

End Sub

【80707】Re:行番号列の列幅取得方法
発言  マナ  - 19/4/17(水) 22:12 -

引用なし
パスワード
   ▼[名前なし] さん:

MouseUpイベントで、x,y座標を取得しています。

グラフのイベントについては、
ichinoseさんの回答を参考にしてください。
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=8886;id=excel#8886

【80710】Re:行番号列の列幅取得方法
お礼  [名前なし]  - 19/4/19(金) 16:20 -

引用なし
パスワード
   ▼マナ さん:
>▼[名前なし] さん:
>
>MouseUpイベントで、x,y座標を取得しています。
>
>グラフのイベントについては、
>ichinoseさんの回答を参考にしてください。
>ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=8886;id=excel#8886

ご教示ありがとうございます。

クラスモジュールでグラフのイベントを取得する方法は把握していましたが、
標準モジュールで完結する方法を求めていました。

もし分かれば、行番号列/列番号行の取得が今後何らかの形で利用できればと思っていました。

クラスモジュールを使用しての方法しかなさそうなので、そちらを利用させて頂きます。

ご回答ありがとうございました。

【80711】Re:行番号列の列幅取得方法
発言  マナ  - 19/4/19(金) 19:18 -

引用なし
パスワード
   ▼[名前なし] さん:

>クラスモジュールでグラフのイベントを取得する方法は把握していましたが、
>標準モジュールで完結する方法を求めていました。

特定のグラフに限定してよいなら
クラスモジュールでなくても、
Thisworkbookやシートモジュールでよいです。

クリックして取得するということはイベントだから
標準モジュールだけで完結は不可能では?

単に選択されている系列ということなら以下ではだめなのですか。
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=80696;id=excel

【80713】Re:行番号列の列幅取得方法
お礼  [名前なし]  - 19/4/20(土) 12:33 -

引用なし
パスワード
   ▼マナ さん:
>▼[名前なし] さん:
>
>>クラスモジュールでグラフのイベントを取得する方法は把握していましたが、
>>標準モジュールで完結する方法を求めていました。
>
>特定のグラフに限定してよいなら
>クラスモジュールでなくても、
>Thisworkbookやシートモジュールでよいです。
>
>クリックして取得するということはイベントだから
>標準モジュールだけで完結は不可能では?
>
>単に選択されている系列ということなら以下ではだめなのですか。
>ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=80696;id=excel
ご提案頂きありがとうございます。

現在はグラフにマクロを登録して、イベントを取得しています。
URLの通りに実行してみましたが、SelectionがRangeのままの為、動作しませんでした。

GetCursorPosで取得した座標を以下の式で変形して近似値が取れたので、
正しい解決法ではありませんが、これで解決とさせて頂きます。

Po.y = Po.y - ActiveWindow.PointsToScreenPixelsY(CommandBars("Formula Bar").Height)
Po.x = (Po.x - ChartObj.ShapeRange.Left) * 72 / 96

ご教示頂きまして誠にありがとうございました。

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