棒1本のグラフ内座標と大きさを調べる
売上系列の2番目の棒をPointとして取得し、Left・Top・Width・Heightを読み取ります。
実行前に確認
- 既存のシートやグラフを変更しない練習例です。「VBAグラフ5022」が既にある場合は中止します。再実行は新しい練習ブックで行うか、作成済みの練習シートを自分で別名にしてから行ってください。
- この例は公式API仕様を参照して作成しています。Excel実機での動作確認は行っていません。エラー時に作成途中の練習シートが残る場合があります。
- PointのLeft・Topはグラフ領域を基準とした座標です。ChartObjectのシート上の位置と混同しないでください。
- 描画前や非表示のグラフ、グラフ種類によっては座標を取得できないことがあります。この例は表示中の2D縦棒グラフで試してください。
1サンプルコード
Option Explicit
Sub Example5022()
Dim ws As Worksheet, co As ChartObject
Dim p As Point
On Error GoTo Failed
'新しい練習シートだけを作成・変更します。
Set ws = NewSheet5022()
If ws Is Nothing Then Exit Sub
Set co = ws.ChartObjects.Add(ws.Range("E2").Left, ws.Range("E2").Top, 420, 250)
co.ShapeRange.Item(1).Name = "練習グラフ"
co.Chart.ChartType = xlColumnClustered
co.Chart.SetSourceData Source:=ws.Range("A1:C5"), PlotBy:=xlColumns
'ここから今回の操作です。
co.Activate
co.Chart.Refresh
DoEvents
Set p = co.Chart.SeriesCollection(1).Points(2)
MsgBox "5月の売上の棒" & vbCrLf & _
"左: " & Format(p.Left, "0.0") & " pt" & vbCrLf & _
"上: " & Format(p.Top, "0.0") & " pt" & vbCrLf & _
"幅: " & Format(p.Width, "0.0") & " pt" & vbCrLf & _
"高さ: " & Format(p.Height, "0.0") & " pt"
Exit Sub
Failed:
MsgBox "処理を中止しました: " & Err.Description, vbExclamation
End Sub
Private Function NewSheet5022() As Worksheet
Const SHEET_NAME As String = "VBAグラフ5022"
Dim item As Object, ws As Worksheet
Dim data As Variant, r As Long, c As Long
'同名シートがあれば、上書きせずに終了します。
For Each item In ThisWorkbook.Sheets
If StrComp(item.Name, SHEET_NAME, vbTextCompare) = 0 Then
MsgBox SHEET_NAME & " は既にあります。別の練習ブックで試してください。"
Exit Function
End If
Next item
Set ws = ThisWorkbook.Worksheets.Add( _
After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
ws.Name = SHEET_NAME
data = Array(Array("月", "売上", "計画"), _
Array("4月", 120, 100), Array("5月", 160, 140), _
Array("6月", 110, 150), Array("7月", 180, 170))
For r = 0 To UBound(data)
For c = 0 To UBound(data(r))
ws.Cells(r + 1, c + 1).Value = data(r)(c)
Next c
Next r
ws.Range("A1:C5").Columns.AutoFit
Set NewSheet5022 = ws
End Function図で見る座標の基準を区別する
イメージ図同じLeft・Topでも、読むオブジェクトによって原点が違います。
シートのA1左上
ChartObject.Left・Topの原点。
グラフ領域の左上
Point.Left・Topの原点。
データ点の四角形
Point.Width・Heightは棒1本の描画寸法。
すべてポイント単位です。グラフの拡大縮小や軸設定を変えるとデータ点の寸法も変わります。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
- 1
Windows版デスクトップExcelで空の練習ブックを作り、Excelマクロ有効ブック(.xlsm)として保存します。Web版ExcelではVBAを実行できません。
- 2
Alt+F11でVBEを開き、[挿入]→[標準モジュール]を選びます。Option Explicitから末尾のEnd Functionまで、この例のコード全体を空の標準モジュールへ貼り付けます。
- 3
Example5022のSub内にカーソルを置いてF5キーを押します。コードを入れたブックに「VBAグラフ5022」シート、A1:C5のサンプル表、埋め込みグラフ「練習グラフ」を自動作成します。別のガイドの実行は不要です。
- 4
5月の売上の棒について、グラフ内の位置と大きさがポイント単位で表示されます。数値はグラフサイズやExcelの描画結果によって変わります。