Excel VBA質問箱 IV

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

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


14299 / 76734 ←次へ | 前へ→

【67934】Re:埋め込みグラフにおいて選択したpointのindexの取得方法
質問  ゆたか  - 11/1/17(月) 19:52 -

引用なし
パスワード
   ▼ichinose さん:
おかげさまで一応完成させることが出来ました。
フォームにボタンを2つ作り(1.グラフ選択2.そのグラフに戻れる)、
最終的にこのようなプログラムになりました。

Option Explicit
Private WithEvents cht As Chart

Private Sub CommandButton1_Click()
Dim obj As Object
  
  Set obj = Selection
  Do Until TypeName(obj) = "ChartObject"
    Set obj = obj.Parent
    If TypeName(obj) = "Workbook" Then 'グラフに関係しないものが選択されている場合
      Application.ScreenUpdating = True
      MsgBox "グラフが正しく選択されていません"
      Application.ScreenUpdating = True
      Exit Sub
    End If
  Loop
  Set cht = obj.Chart
  
  If cht.HasTitle = True Then
    chtName.Caption = cht.ChartTitle.Text
  Else
    chtName.Caption = "(" & cht.Name & ")"
  End If
  
End Sub

Private Sub cht_BeforeDoubleClick(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long, Cancel As Boolean)
Dim a As Integer
Dim b As Integer
Dim aa As Integer
Dim bb As Integer
Dim x As Integer
Dim n As Long
Dim fml As String
Dim dCell As Range

  If ElementID = xlSeries Then
    If Arg2 > 0 Then
    With cht.SeriesCollection(Arg1)
      x = InStr(.Formula, "(") + 1
      'nameとcategory_labelsの後ろの","から、valuesの先頭を取得
      For n = 1 To 2
        a = InStr(x, .Formula, ",") + 1
        b = InStr(x, .Formula, "(")
        If a > b And b <> 0 Then
          x = InStr(x + 1, .Formula, ")") + 2
        Else
          x = a
        End If
      Next n
      'valuesの最後尾を取得
      aa = InStr(x, .Formula, ",")
      bb = InStr(x, .Formula, "(")
      If aa > bb And bb <> 0 Then
        aa = InStr(x, .Formula, ")")
        a = x + 1
      End If
      'valuesを取得(文字列)
      fml = Mid(.Formula, a, aa - a)
      n = 1
      For Each dCell In Range(fml)
        If n = Arg2 Then
          dCell.Parent.Activate
          dCell.Select
          Exit For
        End If
        n = n + 1
      Next dCell
    End With
    End If
    Cancel = True
  Else
    Cancel = True
  End If
End Sub

Private Sub CommandButton2_Click()
  cht.Parent.Select
  cht.Parent.Activate
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Set cht = Nothing
End Sub


ただ、気になるのが、

For Each dCell In Range(fml)
  If n = Arg2 Then
    dCell.Select
    Exit For
  End If
  n = n + 1
Next dCell

の部分です。

Valuesデータ(変数fml)が「Sheet1!$A$1:$A$10,Sheet1!$A$21:$A$30」のような複数の範囲の時に
range(fml).item(Arg2)
range(fml).cells(Arg2)
等とすると、「Arg2=15」だとAddressは「$A$15」が返ってきてしまうのです。(僕にとっては不思議なのですが)
色々試した結果、「これでいいのか?」迷いつつも上記のようなプログラムとしました。
問題点、もしくはもっとスマートな方法があれば後学のためにもご教示いただけないでしょうか?

6 hits

【67876】埋め込みグラフにおいて選択したpointのindexの取得方法 ゆたか 11/1/14(金) 15:42 質問
【67881】Re:埋め込みグラフにおいて選択したpointの... momo 11/1/14(金) 16:50 発言
【67885】Re:埋め込みグラフにおいて選択したpointの... ゆたか 11/1/14(金) 17:28 発言
【67887】Re:埋め込みグラフにおいて選択したpointの... momo 11/1/14(金) 17:36 発言
【67920】Re:埋め込みグラフにおいて選択したpointの... ゆたか 11/1/17(月) 10:36 お礼
【67891】Re:埋め込みグラフにおいて選択したpointの... ichinose 11/1/14(金) 18:17 発言
【67921】Re:埋め込みグラフにおいて選択したpointの... momo 11/1/17(月) 11:16 発言
【67922】Re:埋め込みグラフにおいて選択したpointの... ゆたか 11/1/17(月) 11:30 お礼
【67934】Re:埋め込みグラフにおいて選択したpointの... ゆたか 11/1/17(月) 19:52 質問

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