を強調表示され、あなたが各チャートのコードをカスタマイズする必要があり、この例のコードは、することができ出発点:
Dim p As Series
Dim pc As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim ch As ChartObject: Set ch = Me.ChartObjects("Chart 1")
With ch
Dim s As Series: Set s = Nothing
On Error Resume Next: Set s = .Chart.SeriesCollection(Target.Value): On Error GoTo 0
If Not p Is Nothing And Not p Is s Then
p.Format.Fill.ForeColor.RGB = pc
End If
If Not s Is Nothing Then
Set p = s
pc = s.Format.Fill.ForeColor.RGB
With s
s.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
End With
End If
End With
End Sub
- 最初の2行は、店舗シリーズ オブジェクトは最後の時間を強調し、元の共同何だったことがグローバル変数ですlor、 これは、別のセルが が選択されているときに元の色に復元するために必要です。残念ながら、VBAのグローバル変数は、プロジェクトがリセットされたとき(たとえば、[停止]ボタンが押されたとき、またはエラーが発生したとき)にその価値が失われるため、このコードがバーに色付けして戻すことはできません。重要な場合、これらの情報は不可視のセルまたはチャートのデータに格納されますが、コードが複雑になります。
- 次の行は、特定のイベントに応答して呼び出されるイベントハンドラであることを示しています。この場合、特定のワークシート上の選択内容が変更された場合(挿入する必要があります。これを標準コードモジュールではなくワークシートモジュールに組み込みます)。
- 次に、ChartObjectの名前に基づいてチャートを検索し、それをChartObject型の変数に割り当てます。これにより、初期バインディングによってintellisenseのサポートに依存することができます(aを入力すると、 )。
- 次に、新しく選択したセルの内容に含まれる名前に基づいてチャート内のSeriesを検索します。新しいセルに有効な名前が付いているかどうかわからないので、エラー処理を無効にしてこの行を保護し、後でsに何もない値があるかどうかをチェックする必要があります。 - この部分は、グラフの種類に大きく依存し、データをどのように表しているかによって、Series :: XValuesに基づいてデータを選択する必要がある可能性があります。
- 以前に強調表示されたバーに保存された値があるかどうかを確認し、現在の選択と異なる場合は元の色に戻します。
- 最後に、Seriesを先に検索しても成功した場合、sはnullではなく、現在のバーの色を保存し、赤い塗りつぶしで強調表示します。
ありがとうございました。私はただ一つのグラフのためにそれを行う必要があります。あなたのコードが何をしているのか説明できますか?おかげさまで –
私はコードを貼り付けて何も起こらなかった。私は、表示ribonの下のマクロアイコンをクリックすると、マクロが表示されない、このマクロに名前があることを意味しますか?私が行ったのは、ALT F11で、新しいモジュールを挿入し、そのモジュールにコードを貼り付けます。 –
名前はWorksheet_SelectionChangeですが、ユーザーが明示的に呼び出すのではなくExcelユーザーが別のセルを選択するたびに呼び出されます。 Dim chでブレークポイントを設定し、Excelでセルをクリックしてみてください。 – z32a7ul