Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10584 / 13644 ツリー ←次へ | 前へ→

【20854】こんばんわ。 TEN 04/12/22(水) 22:44 質問[未読]
【20856】Re:こんばんわ。 ちゃっぴ 04/12/22(水) 23:11 回答[未読]
【20862】Re:こんばんわ。 ハマゾウ 04/12/23(木) 5:53 回答[未読]
【20885】Re:こんばんわ。 TEN 04/12/23(木) 15:30 質問[未読]
【20886】Re:こんばんわ。 ハマゾウ 04/12/23(木) 15:41 回答[未読]
【20888】Re:こんばんわ。 TEN 04/12/23(木) 16:10 質問[未読]
【20978】Re:こんばんわ。 ハマゾウ 04/12/29(水) 21:19 回答[未読]
【20979】Re:こんばんわ。 ソーラン 04/12/29(水) 22:13 お礼[未読]

【20854】こんばんわ。
質問  TEN  - 04/12/22(水) 22:44 -

引用なし
パスワード
   よく、見させていただいて勉強しております。

質問したいのですが、Excelのシート上にあるオブジェクトがいくつあるか
確認するマクロを作りたいと思いますが、どうすればいいでしょうか?

というのは、自分がカスタマイズを頼まれたプログラムなのですが
DELETするとき "オートシェイプ" & i や グラフ & j のような形で
ループして消しているため、シート上に該当するオブジェクトが無い場合
エラーが起きてしまいます。

指定したシートの中にオブジェクトがいくつあるかわかるマクロがあれば
それを組み込むことにより、判定して、その数分、ループをまわすことができると
思いました。

いい方法がありましたら教えてください。

【20856】Re:こんばんわ。
回答  ちゃっぴ  - 04/12/22(水) 23:11 -

引用なし
パスワード
   Shapes Collectionに対して、Count Method使えばいいだけでは?

というか、Objectを扱うなら、For Each 〜 Next Statementという
便利なものがあるので、それを使用すれば終了回数など取得する必要
ありませんが・・・

【20862】Re:こんばんわ。
回答  ハマゾウ  - 04/12/23(木) 5:53 -

引用なし
パスワード
   ▼TENさん、ちゃっぴ さん:
>Shapes Collectionに対して、Count Method使えばいいだけでは?
>
>というか、Objectを扱うなら、For Each 〜 Next Statementという
>便利なものがあるので、それを使用すれば終了回数など取得する必要
>ありませんが・・・

以下はFor Each 〜 Next Statementを使った例です。


Sub test()
  Dim Sh As Object
  Dim i As Long
  
  i = 0
  For Each Sh In Sheets("sheet1").Shapes
    Sh.Delete
    i = i + 1
  Next
  MsgBox i & "個のShapeを削除"
End Sub

【20885】Re:こんばんわ。
質問  TEN  - 04/12/23(木) 15:30 -

引用なし
パスワード
   ▼ハマゾウ さん:
>▼TENさん、ちゃっぴ さん:
>>Shapes Collectionに対して、Count Method使えばいいだけでは?
>>
>>というか、Objectを扱うなら、For Each 〜 Next Statementという
>>便利なものがあるので、それを使用すれば終了回数など取得する必要
>>ありませんが・・・
>
>以下はFor Each 〜 Next Statementを使った例です。
>
>
>Sub test()
>  Dim Sh As Object
>  Dim i As Long
>  
>  i = 0
>  For Each Sh In Sheets("sheet1").Shapes
>    Sh.Delete
>    i = i + 1
>  Next
>  MsgBox i & "個のShapeを削除"
>End Sub

上記のプログラムを試してみましたが、すべてのオブジェクトが
削除されてしまいました。
グラフだけ残して、オートシェイプだけ削除等の指定はできないのでしょうか?

しかし.Shapesで別にChartではないのにかかわらず、レーダーチャートも
消えてしまうんですね。

【20886】Re:こんばんわ。
回答  ハマゾウ  - 04/12/23(木) 15:41 -

引用なし
パスワード
   ▼TEN さん:
以下はチャート以外すべてを削除する例です。


Sub test()
  Dim Sh As Object
  Dim i As Long
 
  i = 0
  For Each Sh In Sheets("sheet1").Shapes
    If Sh.Name Like "Chart*" = False Then
      Sh.Delete
      i = i + 1
    End If
  Next
  MsgBox i & "個のShapeを削除"
End Sub

【20888】Re:こんばんわ。
質問  TEN  - 04/12/23(木) 16:10 -

引用なし
パスワード
   ▼ハマゾウ さん:
>▼TEN さん:
>以下はチャート以外すべてを削除する例です。
>
>
>Sub test()
>  Dim Sh As Object
>  Dim i As Long
> 
>  i = 0
>  For Each Sh In Sheets("sheet1").Shapes
>    If Sh.Name Like "Chart*" = False Then
>      Sh.Delete
>      i = i + 1
>    End If
>  Next
>  MsgBox i & "個のShapeを削除"
>End Sub

早い返事ありがとうございました^^ これで今日は早く仕事からあがれそうな
予感がします。 
上記の方法でやるとコンボボックスとかも消えてしまったので、逆に
オートシェイプ* = true にさせていただきました。

あと、上記の方法でレーダーチャートグラフのグラフだけ残してデータだけ消す
こと等はできるのでしょうか?
重ねて申し訳ないのですが、レーダーチャートのタイトルラベルってフォントは
選べないのでしょうか? プロパティ等を探したのですがよくわからなかったので(汗)

本当に申し訳ありませんが、ご存知でしたら教えていただけませんか?

【20978】Re:こんばんわ。
回答  ハマゾウ  - 04/12/29(水) 21:19 -

引用なし
パスワード
   ▼TEN さん:
>レーダーチャートグラフのグラフだけ残してデータだけ消す
>こと等はできるのでしょうか?

すみません分かりません
ご存知の方、ご教授願います

>重ねて申し訳ないのですが、レーダーチャートのタイトルラベルってフォントは
>選べないのでしょうか?

以下はタイトルのフォントを変更する例です

Sub test()
  Dim Sh As Object
  Dim i As Long

  i = 0
  For Each Sh In Sheets("sheet1").Shapes
    If Sh.Name Like "Chart*" = False Then
      Sh.Delete
      i = i + 1
    Else
      If Sh.DrawingObject.Chart.HasTitle = True Then
        Sh.DrawingObject.Chart.ChartTitle.Font.Name = "MS ゴシック"
      End If
    End If
  Next
  MsgBox i & "個のShapeを削除"
End Sub

【20979】Re:こんばんわ。
お礼  ソーラン  - 04/12/29(水) 22:13 -

引用なし
パスワード
   ありがとうございました。
できました

10584 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free