• ベストアンサー

エクセルオブジェクトの有無の確認方法

VBAでマクロを作成してます。 指定した名前のオブジェクト(たとえばグラフ)が存在しない場合の処理を加えたいのですが、可能でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Hardking
  • ベストアンサー率45% (73/160)
回答No.3

可能です。 シート上の指定した名前グラフの存在チェック VBAでのコーディング例です。 'ローカル変数宣言 Dim obj As Object Dim findFlg , idx ,chartCnt As Integer '検索フラグ初期化 findFlg = 0 'シート上のチャート件数を取得する chartCnt = ThisWorkbook.ActiveSheet.ChartObjects.Count For idx = 1 To chartCnt 'シート上のチャート中より、指定した名前のチャートを探す。 Set obj = ThisWorkbook.ActiveSheet.ChartObjects(idx) IF obj.Name = "MyChart" Then '検索フラグ設定 findFlg = 1 End IF Set obj = nothing Next idx findFlg = 1の場合、対象のチャートが存在すると判断できる。

Poko-08
質問者

お礼

できました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#22222
noname#22222
回答No.2

Excel は操作したことがない門外漢です。 急遽、ヘルプを調べて以下のようなコードを書いて見ました。 Option Explicit Private Sub CommandButton1_Click()   If IsChartExist("Chart 2", "sheet1") Then     '     ' True     '     MsgBox "AAA"   Else     '     ' False     '     MsgBox "BBB"   End If End Sub Public Function IsChartExist(ByVal chtName As String, _                      ByVal shtName As String) As Boolean   Dim cht As Object      For Each cht In Worksheets(shtName).ChartObjects     If cht.Name = chtName Then       IsChartExist = True       Exit For     End If   Next End Function *約束事により、Not Found の時は False が戻り値にセットされます。 *もっと、汎用的な関数が欲しいところですが判りません。

Poko-08
質問者

お礼

できました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

名前で指定できるオブジェクトの場合、 存在しない名前を指定してアクセスしようとするとエラーになるので、 on error ステートメントでエラー処理ルーチンにとばして処理をする。 か オブジェクトのコレクションの名前をfor each などで、全部調べてみて、「無い」ということを確認して処理をする。

Poko-08
質問者

補足

できました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • EXCEL VBAでオブジェクトを削除するには?

    EXCEL2000を使用しています。 HPからコピーした表を利用して、VBAで加工したいと思っています。 HPからコピーした場合、不要なオブジェクトがある為、まずこれを消したいのです。 EXCELでの一般的な方法としては、オブジェクトの選択をしてから、範囲指定をし、削除すれば処理できます。VBAではオブジェクトの名前を指定しなければならないと思うのですが、HP上の、オブジェクトの名前は頻繁に変わる為、名前を指定するという方法では、使いづらいのです。 何か良い方法はないでしょうか?

  • EXCEL VBA:埋め込みグラフオブジェクトの命名方法について

    質問させて頂きます。 EXCEL2000のVBAで、グラフを色々加工しているのですが、 埋め込みグラフオブジェクトの名前をグラフ作成時に命名する事は 可能でしょうか? dim myRange as Range Set myRange = Range("A1:D2") Charts.Add ActiveChart.ChartType = xlPie ActiveChart.SetSourceData Source:=myRange, PlotBy:=xlRows ActiveChart.Location where:=xlLocationAsObject, Name:="sheet1" ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowLabelAndPercent, LegendKey:=False, HasLeaderLines:=True とここで、(グラフそのもののサイズではなく) 埋め込みグラフオブジェクトのサイズを変更するとき、 ActiveSheet.Shapes(1).ScaleWidth 1.6, msoFalse, msoScaleFromTopLeft ActiveSheet.Shapes(1).ScaleHeight 1.9, msoFalse, msoScaleFromTopLeft のようにすれば、最初に作成したオブジェクトのサイズ変更は可能ではあるのですが、 条件により色々な種類の複数のグラフを順不同で作成しているため、 ActiveSheet.Shapes(1) では、希望のオブジェクトを選択できるとは限りません。 つきましては、Charts.Add 時に(グラフの名前ではなく) オブジェクトの名前を指定できれば希望のオブジェクトを 簡単に選択できると考えているのですが、これは可能でしょうか? 何卒ご教授のほど、よろしくお願いいたします。

  • Excelのグラフ名を指定する方法

    Excelでグラフを作成する場合、グラフに"グラフ 1"又は"Chart 1"と言った名前が付きます。 VBAでObjectを取得するときにこの番号を使うのですが、 この数字の部分は連番になっているようで、グラフ作成順に自動についてしまうのですが、この数字の部分を変えることはできないでしょうか? というのは、一度グラフを作成後にそれを削除した場合、次にグラフを作成すると削除した次の番号からとなってしまい、ちょっと処理上面倒なことがあるのでできればまた1番からの番号にしたいのです。

  • オブジェクトの選択(単一/複数選択、グループ)

    グラフを複数製作/修正するような作業を日常的に行っています また、そのグラフにテキストボックスが複数グループ化されていたりグラフが複数グループ化されていたりということもよくあります グラフの名前を与えるとそのグラフに一定の処理をするようなマクロを作ったときに 選択したオブジェクトに含まれるグラフオブジェクトの名前を上記マクロに渡してくれるような 仲立ちをするマクロがあればと思っております 1.単一選択/複数選択に対応 2.グラフオブジェクト以外が含まれていても無視するだけでエラー終了しない 3.グループ化されたオブジェクトがあればその中のグラフオブジェクトまで探す という動きを実現したく思っています エクセルのバージョンは2007(2003も利用することができる環境です) 現状ではシート上の全てのグラフに一括処理をするか 単一選択したグラフに処理をするかの二種類のマクロまで作ることができます

  • Excelのグラフをshapeオブジェクトと指定すること

    こんばんは,助けてください。 Excelで大量にグラフを作成しています。 この時,グラフはグラフシートではなく,ワークシート上にオブジェクトとして貼り付けています。 このようにすると,Shapes(index)のようにして,indexのところにグラフの名前を入れて,Shapeオブジェクトを取得すると,グラフの位置や拡大縮小ができるようになりますよね。 これは,便利と思って,大量のグラフを整形して整列させようと思っています。グラフを作った順番がめちゃくちゃだったり,その他いろいろな事情で,インデックス番号を指定するのではなくて,名前を指定してやりたいと思います。 そこで, Activechart.Name = "問1-(1)" の様に指定してみたのですが, Activesheets.shapes("問1-(1)").・・・ のように指定して,縮小や移動をしようとしても,うまくいきませんでした。 このような場合に,グラフに名前を付けるにはどうしたらよいのでしょうか。教えてください。 また,ついでで申し訳ないのですが,グラフを移動させる位置を,相対的に指定するのではなくて,絶対的な位置に指定する方法はないものでしょうか?こちらも,もしよかったら教えてください。 ちなみに,Excelは2003です。よろしくお願いします。

  • エクセルマクロのrangeオブジェクト

    グラフを作成する下記のマクロでRangeオブジェクトにて範囲指定しておりますが,これをR1C1形式で表現するにはどうすればよいでしょうか? ActiveChart.SetSourceData Source:=Sheets(tmpSheetName).Range("A2:AM2,A81:AM81"), PlotBy:=xlRows どうかよろしくお願いします.

  • エクセルのマクロでグラフオブジェクトを指定位置に移動?

    お世話になります。 エクセル2000のマクロで困っています。 Range("indirect(AR69)").Select Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("前年比").Range("indirect(AR69)"), PlotBy _ :=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="前年比 このマクロ(自動記述)でシート「前年比」にグラフオブジェクトを作りました。 このグラフを指定したセル位置に移動するのはどうすればいいでしょうか。 具体的にはセルAB5の左上の角にグラフの左上をピッタリ重ねたいのです。 あと、グラフオブジェクトに名前をつけて、このグラフを選択する時に名前で選択できるでしょうか。 "グラフ 6964"みたいに通し番号が付けられていて非常にやりにくいのですが。 よろしくお願いします。

  • EXCEL VBA でグラフの名前を変更する方法

    EXCELでグラフを作成した場合にそのグラフの名前が 自動的に"グラフ 1"等とつけられますが EXCEL VBA で既に存在するグラフを扱う際に 分かりやすいようにそのグラフの名前を変更したいのですが方法がわかりません。 プロパティなどを見ても変更できそな項目がありません。 これは変更できないのでしょうか? またプログラムを組んで変更する必要があるのでしょうか?どのようなプログラムになりますか?

  • javaで引数が違うobjectを利用する方法

    同じ名前のオブジェクトを10個作成し、 そのobjectの中で二つ指定し 引数を使って計算したいんですけど どうやって同じ名前のオブジェクトをそれぞれ呼び出せばいいでしょうか 例として object(1,0. 2.0) object(3.0, 4.0) みたいな感じで10個作成しています

    • ベストアンサー
    • Java
  • Excel 不要なオブジェクトの削除

    エクセル2003で作った「グラフ1個」と数値を入力し マクロを動作させたファイルです ファイルサイズが大きくなり(1336KB) メニュバーの編集→ジャンプ→セルの選択→オブジェクトにチェックして「OK」でオブジェクトが選択されるので 削除したら72KBに成ったのは確認したのですが オブジェクトの削除で 必要なグラフも削除されて困っています 必要なオブジェクト(今回はグラフ)を選択から外して削除出来る方法は無いでしょうか・・・アドバイスをお願い致します