hinden-san (ひんでん さん)

アクセスカウンタ

zoom RSS [Excel VBA] 16. 画像や図形の全削除 (いろいろなレベルで)。

<<   作成日時 : 2011/05/25 12:00   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 1 / トラックバック 2 / コメント 0

ひとくちに全削除といっても、
フキダシとかそういうのも含めてバッサリやっちゃっていいのか、
画像だけにしときたいのか。

そんなわけで、やり方 3段階。プラス、ワン。
⇒ 4通りの全削除を ご紹介します。

オブジェクト削除前後でカウント結果の違いが一目で分かるようなメッセージボックス
も、表示させるようにしました。





テスト用エクセルシート。

下記 エクセルシートに対して、実行してみます。

[Excel VBA] 画像や図形の削除処理の動作確認ためのテスト用シート。
[Excel VBA] 画像や図形の選択セル範囲内処理の動作確認ためのテスト用シート。
(現物を 下記に置いてあります。↓)
http://www2u.biglobe.ne.jp/~hinden/etc/excel/test_drawing.xls

テスト用エクセルシートの解説。
  • 下記 3種のオブジェクトを網羅してあります。

    1. Picture ← 画像
    2. DrawingObject ← テキストボックスやフキダシ。
    3. Shape ← Drop Down


  • 見た目とは画像の数が違っているワケ。

    黄色い四角のそれぞれの4隅に、ぴったりと 4つの画像が見えますが実は、
    その4つの下にも ひとつずつ画像が潜んでいます。
    (オブジェクト名「枠上、左上」「枠上、左下」「枠上、右上」「枠上、右下」 が 潜んでいます。)

    こちら、黄色い四角の左上角をとりまく画像4つを非表示にしてみたところ。
    [Excel VBA] テスト用シートの画像の一部を非表示に。4枚の画像の奥に もう1枚 潜んでいます。こういうのが全4箇所。
    ご覧の通り、4枚の画像の奥に もう1枚 角ッコ上 に 潜んでいます。
    このように、枠上に掛かった画像が、黄色い四角のそれぞれの4隅に1つずつ、潜んでいます。






各 全削除処理を行うマクロ。及び、それを実際に動作させた例。






  1. 全削除。Shapes レベル。

    '画像のみならず図形は、とにかくなんでも消したい。
    Sub IMAGE_DELETE_allShapes()
    Dim MyOb As Object
    Dim i1, i2, i3 As Integer
    i1 = ActiveSheet.Shapes.Count
    i2 = ActiveSheet.DrawingObjects.Count
    i3 = ActiveSheet.Pictures.Count

    For Each MyOb In ActiveSheet.Shapes
    MyOb.Delete
    Next

    MsgBox ( _
    "シート内のオートシェイプ の数:" & i1 & "⇒" & ActiveSheet.Shapes.Count & vbCrLf & _
    "シート内のDrawingObjectの数:" & i2 & "⇒" & ActiveSheet.DrawingObjects.Count & vbCrLf & _
    "シート内のPicture の数:" & i3 & "⇒" & ActiveSheet.Pictures.Count)
    End Sub

    結果 (全削除。Shapes レベル。)
    [Excel VBA] 画像や図形の全削除。Shape 指定時。

    [Excel VBA] [結果] 画像や図形の全削除。Shape 指定時。





  2. 全削除。DrawingObjects レベル。

    '残したいもの。Drop Down。入力規制のリストボックス や メモなど。
    '消したいもの。オートシェープ (フキダシとかテキストボックス) 。
    '消したいもの。画像。
    Sub IMAGE_DELETE_allShapes()
    Dim MyOb As Object
    Dim i1, i2, i3 As Integer
    i1 = ActiveSheet.Shapes.Count
    i2 = ActiveSheet.DrawingObjects.Count
    i3 = ActiveSheet.Pictures.Count

    For Each MyOb In ActiveSheet.DrawingObjects
    MyOb.Delete
    Next

    MsgBox ( _
    "シート内のオートシェイプ の数:" & i1 & "⇒" & ActiveSheet.Shapes.Count & vbCrLf & _
    "シート内のDrawingObjectの数:" & i2 & "⇒" & ActiveSheet.DrawingObjects.Count & vbCrLf & _
    "シート内のPicture の数:" & i3 & "⇒" & ActiveSheet.Pictures.Count)
    End Sub

    結果 (全削除。DrawingObjects レベル。)
    [Excel VBA] 画像や図形の全削除。DrawingObject 指定時。

    [Excel VBA] [結果] 画像や図形の全削除。DrawingObject 指定時。





  3. 全削除。Pictures レベル。

    '残したいもの。Drop Down。入力規制のリストボックス や メモなど。
    '残したいもの。オートシェープ (フキダシとかテキストボックス) 。
    '消したいもの。画像。
    Sub IMAGE_DELETE_allShapes()
    Dim MyOb As Object
    Dim i1, i2, i3 As Integer
    i1 = ActiveSheet.Shapes.Count
    i2 = ActiveSheet.DrawingObjects.Count
    i3 = ActiveSheet.Pictures.Count

    For Each MyOb In ActiveSheet.Pictures
    MyOb.Delete
    Next

    MsgBox ( _
    "シート内のオートシェイプ の数:" & i1 & "⇒" & ActiveSheet.Shapes.Count & vbCrLf & _
    "シート内のDrawingObjectの数:" & i2 & "⇒" & ActiveSheet.DrawingObjects.Count & vbCrLf & _
    "シート内のPicture の数:" & i3 & "⇒" & ActiveSheet.Pictures.Count)
    End Sub

    結果 (全削除。Pictures レベル。)
    [Excel VBA] 画像や図形の全削除。Pic 指定時。

    [Excel VBA] [結果] 画像や図形の全削除。Pic 指定時。





  4. 全削除。Picture を除く全図形。

    '全削除。画像以外。
    Sub IMAGE_DELETE_allShapes()
    Dim MyOb As Object
    Dim i1, i2, i3 As Integer
    i1 = ActiveSheet.Shapes.Count
    i2 = ActiveSheet.DrawingObjects.Count
    i3 = ActiveSheet.Pictures.Count

    'とりあえず図形はすべて対象にしておいて…。
    For Each MyOb In ActiveSheet.Shapes
    '画像じゃなかったもののみ削除する。
    '(この if がないと、画像を含む 全 Shape が対象。)
    If MyOb.Type <> msoPicture Then
    '削除。
    MyOb.Delete
    End If
    Next

    MsgBox ( _
    "シート内のオートシェイプ の数:" & i1 & "⇒" & ActiveSheet.Shapes.Count & vbCrLf & _
    "シート内のDrawingObjectの数:" & i2 & "⇒" & ActiveSheet.DrawingObjects.Count & vbCrLf & _
    "シート内のPicture の数:" & i3 & "⇒" & ActiveSheet.Pictures.Count)
    End Sub

    結果 (全削除。Picture を除く全図形。)
    [Excel VBA] 画像や図形の全削除。Pic 以外 指定時。

    [Excel VBA] [結果] 画像や図形の全削除。Pic 以外 指定時。





  5. 最後に。
    削除対象 0件時の、動作確認。


    0件時の動作確認は案外、大切です。
    盲点のように テスト漏れ していることが、まま あります。
    一発、やっとけば済むことですので、「試すまでもないじゃん」と馬鹿にしたりせず、ちゃんと流しておきましょう。
    「1. Shapes レベルの全削除マクロ」実行後あたりに、更地になったシート相手に もう一回、
    「1. Shapes レベルの全削除マクロ」を実行しておきましょう。

    結果 (削除対象 0件時。)
    [Excel VBA] 画像や図形の削除。0件時。






追記。

ちなみに。
こちらに、当シリーズで話題にしたものも含め、
いろいろなマクロがいろいろと収録されています。
 ↓ 
[現物]
http://www2u.biglobe.ne.jp/~hinden/etc/excel/etc.xls

解説・使用例など。
 ↓ 
「Excel VBA] 99. 「VBA実例集エクセル」 (更新・追加、随時ばんばん入っています)。





「図形とハイパーリンクの迷宮」物語。目次。





[テーマ「コンピュータ」のブログ記事一覧]



Takahashi, Hideki / 高橋秀樹----------------------
Profile : Takahashi, Hideki : 高橋秀樹
[events]
Ma_ho_Ma_ho_Family Top Page
----------------------
ミクシィ「ひんでん高橋秀樹」。
http://mixi.jp/show_profile.pl?id=23976709
----------------------
ツイッタ「Gemini_hinden」。
http://twitter.com/Gemini_hinden
----------------------
ここは、旧・ブログです。新・ブログは、こちら。
[hinden (まほまほファミリー)] (seesaa ブログ)
blogram投票ボタン

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 1
なるほど(納得、参考になった、ヘー)

トラックバック(2件)

タイトル (本文) ブログ名/日時
[Excel VBA] 00. 「図形とハイパーリンクの迷宮」物語。目次。
シリーズ記事の目次です。 注。 (現在は、連載がすべて終了しているわけではないです。 クリックしても飛ばない記事は、また掲載がこれからのものです。(ある種、予告編 と思ってください。) 連載終了までは、連載順序の変更、書き足し、などなど随時、ばんばん修正が入ります。) ...続きを見る
hinden (まほまほファミリー) (...
2011/05/25 17:28
エクセルマクロを楽々マスター
パソコンのスキルをアップさせるなら 自動でプラグラムを書いてくれるエクセルマクロ。大量データのパソコン作業が一瞬で終わります。 ...続きを見る
エクセルマクロ成功法
2012/12/05 17:07

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
[Excel VBA] 16. 画像や図形の全削除 (いろいろなレベルで)。 hinden-san (ひんでん さん)/BIGLOBEウェブリブログ
文字サイズ:       閉じる