2

この質問は、VBA を使用してグラフからデータ ポイントを削除することを参照しています。

広範囲にわたる検索の後、非常に便利なコードに出くわしました。特に、Jon Peltier (埋め込みチャート内のポイントに関する情報を取得) から:

残念ながら、このコードは系列名とデータ ポイントの値のみを返します (非常に便利ですが、さらに一歩進める必要があります)。このコードをもう少し堅牢にするために、理想的には、選択されたデータ ポイントのセル位置を返します (強調表示、削除などを行うことができます)。少し前に別のフォーラムでまったく同じ質問がありましたが、解決策はありませんでした (ozgrid のリンクを参照してください。以下のリンクを参照してください)。

基本的に、シリーズ名とデータ ポイントからセル アドレスを抽出する必要があります。これにより、セルの内容をクリアするコード セクションを記述して、チャートからデータ ポイントを削除できます。何か案は?つまり、更新するコードの部分:

'Sheet4.Cells(b, ????).ClearContents

ご意見ありがとうございます。

この質問は、次の場所でも尋ねられました。

http://www.ozgrid.com/forum/showthread.php?t=181251&goto=newpost **

(ジョン・ペルティアおよびその他の参考文献へのリンク付き)

完全なコードは次のとおりです。

Private Sub EvtChart_MouseUp(ByVal Button As Long, ByVal Shift As Long, _ 
ByVal x As Long, ByVal y As Long) 
 'extracted and modified from [URL]http://www.computorcompanion.com/LPMArticle.asp?ID=221[/URL]

Dim ElementID As Long 
Dim a As Long 
Dim b As Long 
Dim msg As String 
Dim myX As Date 
Dim myY As Double 
Dim Answer As Integer 
Dim Counter As Integer 
Dim QAFDest As Range 
Dim NoRows As Integer 
With ActiveChart 
     ' Pass x & y, return ElementID and Args
    .GetChartElement x, y, ElementID, a, b 
    If ElementID = xlSeries Then 
        If b > 0 Then 
             ' Extract x value from array of x values
            myX = WorksheetFunction.Index _ 
            (.SeriesCollection(a).XValues, b) 
             ' Extract y value from array of y values
            myY = WorksheetFunction.Index _ 
            (.SeriesCollection(a).Values, b) 

             ' Display message box with point information
            msg = "You are about to remove the following point from data Series " & vbCrLf _ 
            & """" & .SeriesCollection(a).Name & """" & vbCrLf _ 
            & "Point " & b & vbCrLf _ 
            & "Value = " & myY & vbCrLf _ 
            & "Continue?" 
            If MsgBox(msg, vbOKCancel) = vbOK Then 
                 'Sheet4.Cells(b, ????).ClearContents
            End If 
        End If 
    End If 
End With 
End Sub 
4

2 に答える 2

1

(注: グラフの設定方法がわからないため、返される範囲は異なる場合があります)。

チャートで選択した範囲を返すには、次の操作を実行できます。

Set seriesParts = Split(.SeriesCollection(a).Formula)
Set ySeriesAddress = seriesParts(2)
set ySeriesRange = Range(ySeriesAddress)

ここから、使用しているグラフのタイプに応じて、メソッドの値arg1arg2値を使用GetChartElementして、削除するデータを含むセルを選択できます。

たとえば、以下のような単純なチャートとデータがある場合

サンプルチャートデータ

選択されたポイントがポイント C (インデックス 3) であった場合、次のコードを使用します。

Set seriesParts = Split(.SeriesCollection(a).Formula)
Set ySeriesAddress = seriesParts(2)
' The code below would return the range "B2:B9
set ySeriesRange = Range(ySeriesAddress)
ySeriesRange(b).ClearContents

これにより、チャートデータから値「3」がクリアされます

于 2013-07-29T22:14:33.070 に答える