グラフの要素名と値を取得する方法

Tech-ED でも最初のデモでお見せしましたが、グラフの要素を取得する方法についてご紹介いたします。

以下の図のように特定のグラフの要素を選択するとその名前と値を取得できます。

取得した名前から、DB や Web サービスから情報を追加で取得して、分析をおこなうようなシナリオも考えられます。

image

image

※一番右の要素をクリックした際のメッセージボックス

image

※一番左の要素をクリックした際のメッセージボックス

Excel VSTO でグラフと連動した動的なアプリケーションを作成する際に有効です。

以下手順です。

手順:

1. 任意のグラフ付きのブックを用意します。

2. VSTO で読み込み、以下のコードを記述します。

Sub elementChart_MouseDownHandler(ByVal Button As Integer, ByVal Shift As Integer, _
ByVal x As Integer, ByVal y As Integer) Handles グラフ_1.MouseDown

        Dim SelectedElementName As String
Dim SelectedElementName2 As String
Dim elementID As Integer = 0
Dim arg1 As Integer = 0
Dim arg2 As Integer = 0
Dim seriesData As Microsoft.Office.Interop.Excel.Series

'ロケール情報を True に設定します。※古い使いかたですので、警告のエラーが表示されます。

Dim innerChart As Excel.Chart = CType( _
Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap( _
グラフ_1.InnerObject), Excel.Chart)

'グラフの要素を取得します。
innerChart.GetChartElement(x, y, elementID, arg1, arg2)

'グラフの系列を取得します。
seriesData = Globals.Sheet1.グラフ_1.SeriesCollection(arg1)

'グラフの要素を配列に格納します。
Dim name As System.Array = seriesData.XValues
Dim value As System.Array = seriesData.Values

'グラフの要素を取得します。
SelectedElementName = name(arg2).ToString '製品名
SelectedElementName2 = value(arg2).ToString '価格

        MessageBox.Show("製品は" & " " & SelectedElementName & "、" & "価格は" & " " & SelectedElementName2)

End Sub

3. デバッグして実行して選択した要素の名前と値が取得できれば、OK です。

詳細情報は以下に記載があります。

Chart.GetChartElement メソッド
https://msdn.microsoft.com/ja-jp/library/microsoft.office.tools.excel.chart.getchartelement(VS.80).aspx

また、コメントアウトしている部分にもありますが、

ExcelLocale1033Proxy 属性の警告については以下に記載があります。

'<elementname>' は古い形式です: '<errormessage>'
https://msdn.microsoft.com/ja-jp/library/2x1dbdzs.aspx

ExcelLocale1033Proxy クラス
https://msdn.microsoft.com/ja-jp/library/microsoft.office.tools.excel.excellocale1033proxy(VS.80).aspx

さまざまな地域設定を使用した Excel のデータの書式設定

https://msdn.microsoft.com/ja-jp/library/ms268748(VS.80).aspx

サンプルは以下からダウンロードください。

KakakuGraph.zip