|
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _
ByVal Target As Range, Cancel As Boolean)
Dim XVR As Range, VR As Range
Dim MyCh As ChartObject
Dim Nm As String
If Target.Address = "$A$1" Then
'ダブルクリックしたセルのアドレスが A1 なら
With Sh.ChartObjects
'アクティブシート(Shに格納されている)のグラフオブジェクトについて
If .Count > 0 Then
'もし一つ以上配置されていれば
.Item(1).Visible = IIf(.Item(1).Visible, False, True)
'Indexが 1 (最初に配置されたもの)の表示がされていれば
'非表示にし、非表示なら表示する
End If
End With
アクティブシートのグラフオブジェクトについての記述はここまで
Cancel = True: Exit Sub
'ダブルクリックした際、そのセルが編集状態になるのを停止し
'マクロの実行を終わる
End If
If Intersect(Target, Range("A2", Range("A65536").End(xlUp))) Is _
Nothing Then Exit Sub
'ダブルクリックしたセルが A1 でなかった場合、A2〜A列最終入力行まで
'のセルでなかったらマクロ実行を終わる
Cancel = True
'ダブルクリックした際、そのセルが編集状態になるのを停止する
Set XVR = Range("C1", Range("IV1").End(xlToLeft))
'C1セルから項目が入力されている右端までを、Rangeオブジェクト変数に格納する
'そこが項目軸範囲となる
Set VR = XVR.Offset(Target.Row - 1)
'項目軸にする範囲から、ダブルクリックした行より一つ少ない数だけ
'下へ移動した範囲が、数値軸範囲になる。そこをRangeオブジェクト変数に格納
Nm = Target.Offset(, 1).Text
'ダブルクリックしたセルの右隣り(B列)の値をグラフタイトルとするため
'文字列型変数に格納する
Application.ScreenUpdating = False
'画面のブレを抑止する
If Sh.ChartObjects.Count > 0 Then
'アクティブシートに既にグラフが配置されていれば
Set MyCh = Sh.ChartObjects(1)
'それをオブジェクト型変数に格納する
If MyCh.Visible = False Then MyCh.Visible = True
'もし非表示になっていたら、表示する
MyCh.Chart.SeriesCollection(1).Delete
'以前にプロットしていた系列を削除する
Else
'もしグラフが配置されていなければ
With Sh.Range("C2:I22")
'アクティブシートの C2:I11 の範囲で
Set MyCh = Sh.ChartObjects.Add(.Left, .Top, .Width, .Height)
'グラフをその範囲に合わせた位置と大きさに挿入する
End With
End If
MyCh.Chart.ChartWizard VR, xlLine, 4, xlRows, , , 0, Nm
'グラフを作成するメソッド ChartWizard をヘルプで調べれば
'各引数の意味が分かります。値が空のところは省略可能な引数です
MyCh.Chart.SeriesCollection(1).XValues = XVR
'プロットした範囲は数値軸のみなので、項目軸範囲を追加する
Application.ScreenUpdating = True
'仮面のブレ抑止を解除
Set XVR = Nothing: Set VR = Nothing: Set MyCh = Nothing
'オブジェクト変数と格納したオブジェクトの関係を切断する
End Sub
・・ということです。
|
|