#もう1ヶ月ですか。早いですね...(月刊チルダ)と化してきた感が...XD
さて、しばらく前のシート上のグラフに関してのお題です。
『グラフを透過させ、プロットエリアx軸y軸の目盛線をセル枠線にピッタリと合わせたい。
また、そのグラフをクリックして、下にあるセルを編集できるようにしたい。』
...というのがありました。
サンプルコード提示はしませんでしたが、アドバイスとして
A)シート上にBuildFreeformメソッドを使って線を描画しグラフもどきに見立てる。
B)グラフ上に幾つかの透明のシェイプを被せ、セルへのハイパーリンクを設定する。
C)グラフ上に[コントロールツールボックス]のラベルを被せてMouseUpイベントを利用する。
D)グラフにマクロを登録し、クリック時のマウス座標から選択セルを導く。
など幾つかの案を提案しました。
実用的かどうかはさておき、(C)のセンで試したコードのメモ的アップ。
シート上のMSForms.Labelの透明化はちょっとクセがありそう。
コードでLabel自体を追加するとどうもうまくいかず、手動で作成してあげないとダメなん?...
(実行後)

シートモジュールには以下のコードを。
さて、しばらく前のシート上のグラフに関してのお題です。
『グラフを透過させ、プロットエリアx軸y軸の目盛線をセル枠線にピッタリと合わせたい。
また、そのグラフをクリックして、下にあるセルを編集できるようにしたい。』
...というのがありました。
サンプルコード提示はしませんでしたが、アドバイスとして
A)シート上にBuildFreeformメソッドを使って線を描画しグラフもどきに見立てる。
B)グラフ上に幾つかの透明のシェイプを被せ、セルへのハイパーリンクを設定する。
C)グラフ上に[コントロールツールボックス]のラベルを被せてMouseUpイベントを利用する。
D)グラフにマクロを登録し、クリック時のマウス座標から選択セルを導く。
など幾つかの案を提案しました。
実用的かどうかはさておき、(C)のセンで試したコードのメモ的アップ。
シート上のMSForms.Labelの透明化はちょっとクセがありそう。
コードでLabel自体を追加するとどうもうまくいかず、手動で作成してあげないとダメなん?...
'標準Module Option Explicit Sub try() '事前にActiveSheetにMSForms.Labelを1コ作成しておく _ 必要があります。配置は適当でok Dim r1 As Range 'Chart範囲 Dim r2 As Range 'SourceData範囲 Dim L As Double Dim T As Double With ActiveSheet 'Chart範囲の設定とダミーデータセット Set r1 = .Range("B2").Resize(20, 20) r1.RowHeight = 15 r1.ColumnWidth = 3 Set r2 = r1.Offset(20).Resize(1) r2.Formula = "=INT(RAND()*100)" 'チャート作成しセル枠線に合わせ、透明化 With .ChartObjects.Add(r1.Left - 10, _ r1.Top - 10, _ r1.Width + 20, _ r1.Height + 20) .ShapeRange.ZOrder msoSendToBack With .Chart .ChartType = xlLine .HasLegend = False .SetSourceData r2 With .Axes(xlValue) .MinimumScale = 0 .MaximumScale = 100 .Delete End With .Axes(xlCategory).Delete With .ChartArea .Border.LineStyle = 0 .Interior.ColorIndex = xlNone L = .Left T = .Top End With With .PlotArea .Left = 10 - L .Top = 10 - T .Width = r1.Width .Height = r1.Height .Interior.ColorIndex = xlNone End With End With End With 'Labelを透明化し、PlotAreaに被せる With .Label1 .Left = r1.Left .Top = r1.Top .Width = r1.Width .Height = r1.Height .Caption = "" .BackStyle = 0 'fmBackStyleTransparent End With End With Set r1 = Nothing Set r2 = Nothing End Sub
(実行後)

シートモジュールには以下のコードを。
'Sheet Module Option Explicit Private Sub Label1_MouseUp(ByVal Button As Integer, _ ByVal Shift As Integer, _ ByVal X As Single, _ ByVal Y As Single) Dim ix As Long Dim iy As Long With Me.Label1 'fmButtonLeft If Button = 1 Then 'マウス座標を元に起点セルからのOffset位置を算出 ix = Int(X * 20 / .Width) iy = Int(Y * 20 / .Height) Me.Range("B2").Offset(iy, ix).Select End If 'Visible = False/TrueでLabelのTransparentを有効化 .Visible = False .Visible = True End With End Sub