
グラフを複数製作/修正するような作業を日常的に行っています
また、そのグラフにテキストボックスが複数グループ化されていたりグラフが複数グループ化されていたりということもよくあります
グラフの名前を与えるとそのグラフに一定の処理をするようなマクロを作ったときに
選択したオブジェクトに含まれるグラフオブジェクトの名前を上記マクロに渡してくれるような
仲立ちをするマクロがあればと思っております
1.単一選択/複数選択に対応
2.グラフオブジェクト以外が含まれていても無視するだけでエラー終了しない
3.グループ化されたオブジェクトがあればその中のグラフオブジェクトまで探す
という動きを実現したく思っています
エクセルのバージョンは2007(2003も利用することができる環境です)
現状ではシート上の全てのグラフに一括処理をするか
単一選択したグラフに処理をするかの二種類のマクロまで作ることができます
No.2ベストアンサー
- 回答日時:
昔、グループ化されたコントロールを制御しようと作ったのをアレンジしてみました。
再帰処理しているのでグループをさらにグループ化したものにも対応しています。(必要ないか..)Dim myObjects As Collection
Dim myObjectsCounter As Long
Private Sub getItem()
Dim obj As Shape, subObj As Shape
Dim sh As Worksheet
Set myObjects = New Collection
Set sh = ActiveSheet
myObjectsCounter = 0
For Each obj In sh.Shapes
Select Case obj.Type
Case Is = msoGroup
Call getGroupItems(obj)
Case Else
myObjectsCounter = myObjectsCounter + 1
myObjects.Add Item:=obj, Key:=CStr(myObjectsCounter)
End Select
Next
'Collectionの情報にアクセスする例
Call listToImidiate(sh)
End Sub
Private Sub getGroupItems(shpGroup As Variant)
Dim subObj As Shape
For Each subObj In shpGroup.GroupItems
Select Case subObj.Type
Case Is = msoGroup
Call getGroupItems(subObj)
Case Else
myObjectsCounter = myObjectsCounter + 1
myObjects.Add Item:=subObj, Key:=CStr(myObjectsCounter)
End Select
Next
End Sub
Private Sub listToImidiate(sh As Worksheet)
Dim shp As Shape
Dim myChart As ChartObject
For Each shp In myObjects
If shp.Type = msoChart Then
Set myChart = sh.ChartObjects(shp.Name)
'チャートのタイプを取得する例 この様に取得したチャートにアクセスできます。
Debug.Print myChart.Chart.ChartType
End If
Next
End Sub
'ShapeやChartのタイプの定数は下記リンク先等をご覧下さい。
'シェイプタイプの定数
'http://www.asahi-net.or.jp/~zn3y-ngi/YNxv212_Sha …
'チャートタイプの定数
'http://www.nurs.or.jp/~ppoy/access/excel/xlA021. …
No.3
- 回答日時:
#2です。
すっきりさせてみました。ご参考まで。Dim myChartCollection As Collection
Dim myChartCounter As Long
Sub test()
Dim myChart As ChartObject
Set myChartCollection = New Collection
Call getGroupedChart(ActiveSheet, myChartCollection)
For Each myChart In myChartCollection
Debug.Print myChart.Chart.ChartType
Next
End Sub
Private Sub getGroupedChart(sh As Worksheet, myChartCollection As Collection)
Dim obj As Shape, subObj As Shape
Dim myChartObject As ChartObject
myChartCounter = 0
For Each obj In sh.Shapes
Select Case obj.Type
Case Is = msoGroup
Call getGroupItems(sh, obj)
Case msoChart
myChartCounter = myChartCounter + 1
Set myChartObject = sh.ChartObjects(obj.Name)
myChartCollection.Add Item:=myChartObject, Key:=CStr(myChartCounter)
End Select
Next
End Sub
Private Sub getGroupItems(sh As Worksheet, shpGroup As Variant)
Dim subObj As Shape
Dim myChartObject As ChartObject
For Each subObj In shpGroup.GroupItems
Select Case subObj.Type
Case Is = msoGroup
Call getGroupItems(sh, subObj)
Case msoChart
myChartCounter = myChartCounter + 1
Set myChartObject = sh.ChartObjects(subObj.Name)
myChartCollection.Add Item:=myChartObject, Key:=CStr(myChartCounter)
End Select
Next
End Sub
No.1
- 回答日時:
Option Explicit
Private col As Collection
Sub test()
Dim c
Set col = New Collection
Call chkTypename(Selection)
If col.Count > 0 Then
For Each c In col
Debug.Print c
Next
End If
Set col = Nothing
End Sub
Function chkTypename(x)
Dim xi
Select Case TypeName(x)
Case "ChartArea"
col.Add x.Parent.Parent.Name
Case "ChartObject"
col.Add x.Name
Case "DrawingObjects"
For Each xi In x
Call chkTypename(xi)
Next
Case "GroupObject"
For Each xi In x.ShapeRange.GroupItems
Call chkTypename(xi)
Next
Case "Shape"
If x.Type = msoChart Then
col.Add x.Name
End If
Case Else
'Debug.Print TypeName(x)
End Select
End Function
こんな感じで。
基本的には、TypeName関数を使って調べると良いかと。
複数選択時のSelectionは"DrawingObjects"になりますから
そこから再度、単体別にチェックすれば良いです。
GroupObjectについては.ShapeRange.GroupItemsをチェックすれば良いですが
各GroupItemはTypeName"Shape"しか返さないので
Shape.Type が msoChart かどうかを追加で調べてます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの大きなシートでグラフを見つける 4 2022/07/28 10:07
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- Excel(エクセル) <スプレッドシート>採用進捗 グラフ作成について 3 2022/10/23 15:52
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Excel(エクセル) エクセルVBA 複数行にまたがっている選択を判定するには 2 2023/05/21 21:54
- Excel(エクセル) テキストの背後にあるオブジェクトとは 3 2023/01/03 20:22
- Excel(エクセル) Excel 散布図グラフ 外れ値 セル番地参照方法 4 2022/04/19 18:56
- Excel(エクセル) エクセル ヒストグラム作成 1 2023/01/02 09:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルにおける、グラフの指...
-
エクセルでグラフタイトルが折...
-
Excel グラフの背景色を固定し...
-
エクセル(Excel)の目盛りの一...
-
エクセルで作業ごとの時間をグ...
-
アクセスのグラフで月度締めの...
-
Power Pointでグラフの追加がで...
-
1つのシートに複数のグラフがあ...
-
エクセルのグラフの一部拡大
-
[Office365]エクセルで作成した...
-
イスラーム王朝について質問で...
-
~エクセル~円グラフのみを抽...
-
エクセルでこんなグラフを作り...
-
エクセルグラフで凡例を誤って...
-
エクセル2000で教えて下さい。
-
Excelでレーダーの図の作成につ...
-
オブジェクトの選択(単一/複数...
-
エクセルのグラフのフォーマッ...
-
イラレのグラフがグループ解除...
-
エクセルの図をパワーポイントに
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでグラフタイトルが折...
-
エクセルにおける、グラフの指...
-
たくさん作った同じ設定のグラ...
-
イラレのグラフがグループ解除...
-
パワーポイントに貼り付けたエ...
-
~エクセル~円グラフのみを抽...
-
エクセルグラフの一括設定。
-
エクセル(Excel)の目盛りの一...
-
エクセルで作業ごとの時間をグ...
-
EXCEL・複数ある円グラフの円の...
-
エクセルのグラフの一部拡大
-
excel2010 グラフエリアの外の...
-
エクセルグラフの数値軸(Y)の...
-
イスラーム王朝について質問で...
-
EXCELでの棒グラフの太さについて
-
EXCELで海の潮見表(タイドグラ...
-
エクセル:ぴったり重なった後...
-
エクセルでこんなグラフを作り...
-
Wordでレポートを作っています...
-
Excel:とびとびの日付のデータ...
おすすめ情報