■3-6 図形処理で一寸見たいコマンド使用例
Excelのシート上の図形処理としては、図形を消去したいケースや選択したセル範囲を画像ファイルにし
て保存したケースなどがあります。ここではExcelを表計算のツールとして使用以外に、より幅広く活用し
たい方のために図形処理のテクニックを紹介します。




(1)シ−ト上の図形を消去
インターネット上のデータを使用する場合、WebページをコピーしてExcelシートへ貼り付けてデータ解析
などをおこなうことがよくあります。
その場合必要以外のデータ(広告)または図形が多数ありマクロ実行の邪魔になることがあります。
本項目では効率よい図形削除を紹介します。
なお、図形をマニュアルで削除する方法として、図形の表示されている行または列を削除する方法も
ありますが、これは図形は消えたように見えてもゴミとして残ることがあります。そんな場合は本項目
で紹介するマクロを実行すれば全図形をきれいに消去できます。


[1]全図形を1つずつ消去例
本例はシート上の全図形を For Each ステートメントで1個ずつ削除する
マクロ例です。
Sub 図形1_1()
Dim zusuu As Integer
Dim zu As Object
    ThisWorkbook.Sheets("図形").Select
        For Each zu In ActiveSheet.Shapes
            zu.Delete
            zusuu = zusuu + 1
        Next
DoEvents
MsgBox "図形を「" & zusuu & "」個削除しました。"
End Sub


[2]全図形を一括消去例
全図形の消去は本例の「Shapes.SelectAllメソッド」でも出来ますが、シートに図形が多いと過去のPCでは
メモリー不足になり消去出来なかったことがありました。前述の「図形1_1」マクロの方が確実に消去できる。

Sub 図形1_2()
Dim zusuu As Integer
    ThisWorkbook.Sheets("図形").Select
    zusuu = ActiveSheet.Shapes.Count
        ActiveSheet.Shapes.SelectAll
        Selection.Delete
DoEvents
MsgBox "図形を「" & zusuu & "」個削除しました。"
End Sub


[3]全ピクチャ−の消去例
ピクチャ−(Pictures)の消去で、コントロ−ルツ−ルバ−で書いたコマンドボタンは消去されますが、
フォ−ムで書いたコマンドボタン及びオートシェイブの図形は消去されません。一部の図形を残して
削除したい場合などで、この特徴を上手く使い分けると便利なマクロを作成できます。
(実行例は画面55、画面56参照)

画面55ピクチャ−の消去マクロ実行前シート


画面56ピクチャ−の消去マクロ実行後シート


Sub 図形1_3()
Dim zusuu As Integer
Dim zu As Object
    ThisWorkbook.Sheets("図形").Select
    zusuu = ActiveSheet.Pictures.Count
        For Each zu In ActiveSheet.Pictures
            zu.Delete
        Next
MsgBox "図形を「" & zusuu & "」個削除しました。"
End Sub


[4]ボタンを残して全図形削除例
シート上にマクロ実行のためのコマンドボタンがる場合、そのボタンを残しそれ以外の図形を全部消去
したい場合のマクロ例です。

Sub 図形1_4()
Dim zu As Object
ThisWorkbook.Sheets("図形").Select
    For Each zu In ActiveSheet.Shapes
       shname = zu.Name
       If InStr(1, shname, "Button", 1) = 0 Then
          zu.Delete
       End If
    Next
End Sub


[5]オブジェクト名と表示位置取得例
前例でコマンドボタンを残したいので"Button"を指定していますが、その他の図形名は本マクロ実行で
取得できます。なお、参考にセル位置も合わせて取得し表示しました(画面57参照)。

画面57オブジェクト名と表示位置取得実行例


Sub 画面形1_5()
Dim obg(2, 50) As String, msg As String
ThisWorkbook.Sheets("図形").Select
i = 0
For Each ex In ActiveSheet.Shapes
    obg(0, i) = ex.Name
    obg(1, i) = ex.TopLeftCell.Row
    obg(2, i) = ex.TopLeftCell.Column
        msg = "オブジェクト名 " & obg(0, i) & _
            ": Cells(" & obg(1, i) & "," & obg(2, i) & ")"
    celad = MsgBox(msg, 1, "セル位置")
        If celad = 2 Then
             Exit Sub
        End If
    i = i + 1
Next
End Sub


【参考361】 ハイパーリンクの削除例 
WebページをExcelシートへ貼り付けた場合、図形の次に多いのがリンクでセルにはハイパーリンクとして
「青色文字で下線付き」で記載されます。ここは図形削除の項目ですが、ハイパーリンクの削除につい
ても簡単なマクロであり合わせて紹介します。

Sub ハイパーリンク削除()
    Dim myobj As Hyperlink
    For Each myobj In ActiveSheet.Hyperlinks
        With myobj
            myobj.Delete
        End With
    Next
End Sub




(2)シート上の図形をコピーしないマクロ例
前述では不要の図形を削除して必要な文字データを残す方法を紹介しましたが、Webページの広告付
きですが貴重なデータを頂くのに広告をいきなり削除するのは失礼と思う方は、図形は消去しないが
初めからコピーしないで、必要な文字データのみコピーする方法があります。
なお本例は、シートにマクロスタート用のボタンを付けた場合に、ボタン以外のデータをコピーしたい場合
にも応用できます。

Sub 図形2()
    For Each sheet_name In Worksheets
        If sheet_name.Name = "コピー例" Then
            Sheets("コピー例").Select
            Application.DisplayAlerts = False
                ActiveWindow.SelectedSheets.Delete
            Application.DisplayAlerts = True
            Exit For
         End If
    Next
    Sheets.Add.Name = "コピー例"
 コピ−
    Application.CopyObjectsWithCells = False
        ThisWorkbook.Sheets("図形").Select
        Range(Cells(1, 1), Cells(20, 20)).Copy
 貼り付け
    ThisWorkbook.Sheets("コピー例").Select
    Cells(1, 1).Select
        ActiveSheet.Paste
    Application.CopyObjectsWithCells = True
    Cells(1, 1).Select
End Sub




(3)シート上の画像をgifまたはjpgファイルで保存マクロ例
シート上のチャートやセルに表示されているデータをを別のところで表示したい場合、それらが「gifまた
は「jpg」の画像ファイルになっていると、表示が容易にできることがあります。ここでは画像ファイルにして
保存する方法を紹介します。


[1]グラフを画像ファイルで保存例
本例はチャートを画像ファイルに変換して保存する例です。(実行例は画面58参照)

画面58 画像保存1_1


Sub 図形3_1()
Dim i As Integer, obg(20) As String, phn As String
phn = ActiveWorkbook.Path
 
i = 1
For Each ex In ActiveSheet.ChartObjects
    obg(i) = ex.Name
   gifname = "Chart" & i & ".gif"
   ActiveSheet.ChartObjects(i).Chart.Export phn & "\" & gifname
    i = i + 1
Next
MsgBox "グラフを「" & i - 1 & "」個gifファイルで保存しました。"
End Sub


【参考362】 保存するフォルダを指定 
上記例のフォルダは、「phn = ActiveWorkbook.Path」で開いているブックと同じフォルダに保存していますが、
ダイアログからフォルダを指定する場合は以下のマクロになります(本例ではマクロの入っているブックを
優先的に指定して、「いいえ」の場合新しいフォルダを指定になっています)
画面58a フォルダを指定のダイアログ


Sub フォルダ指定()
phn = ThisWorkbook.Path
dai = ThisWorkbook.Name
    msg = "保存場所は" & dai & "と同じファルダで宜しいですか?"
    yn = MsgBox(msg, 4, "保存場所確認")
    If yn = 7 Then
フォルダ指定
        Set myPath = CreateObject("Shell.Application") _
            .BrowseForFolder(0, "フォルダを選択してください", &H1)
        If myPath Is Nothing Then
            Exit Sub
        End If
            phn = myPath.Self.Path
        Set myPath = Nothing
    End If
End Sub


[2]指定したセルを画像ファイルで保存例

本例はセルの一部を画像ファイルにして保存する例です。
(実行例は画面59、画面60参照)

図3-59 指定したセルを画像保存実行例


画面60 完成したJPGファイル例


Sub 図形3_2()
Dim msg As String, hei As Single, wid As Single
Dim scel As Range, grf As Chart, pnam2 As String
 
    msg = "JPGで保存するセル範囲を指定して下さい。" & Chr(10) _
    & "(セル範囲をシ−トから指定して下さい)"
On Error Resume Next
    Set scel = Application.InputBox(msg, "セル指定", Type:=8)
    If TypeName(scel) = "Nothing" Then
        MsgBox "セル範囲をシ−トから指定して下さい"
        Exit Sub
    End If
On Error GoTo 0
 
  scel.Select
  Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
  ActiveSheet.Paste
  ActiveSheet.Pictures.Select
  pnam2 = Selection.Name
 
  ActiveSheet.Shapes(pnam2).Select
    hei = Selection.ShapeRange.Height
    wid = Selection.ShapeRange.Width
 
  Set grf = ActiveSheet.ChartObjects.Add(0, 0, wid + 8, hei + 8).Chart
        For Each zu In ActiveSheet.ChartObjects
             cname = zu.Name
        Next
        ActiveSheet.ChartObjects(cname).Activate
        ActiveChart.Paste
gif保存
   grf.Export ActiveWorkbook.Path & "\" & "Myjpg.jpg"
 
   grf.Parent.Delete
   ActiveSheet.Shapes(cname).Delete
Range("A1").Select
   MsgBox ActiveWorkbook.Path & "へ「Myjpg.jpg」名で保存しました"
End Sub


【参考363】 CopyPictureメソッドでセル範囲を画像としてコピーできます
 
CopyPictureメソッド対象をピクチャ(画像)としてにコピーできる便利な機能です。
対象としては、選択したセルの例は「図形3_2」マクロで紹介しましたが、オートシェイブや
テキストボックスまたは、選択したセル範囲に埋め込まれている図形も一緒にクリップ
ボードにコピーできます。
 
これはマニュアル操作の、【Excel 2010】[ホーム]タブ→[貼りつけ]→[図]→
[図としてコピー]、【Excel2003】[Shift]キーを押しながら[編集]→[図のコピー]の機能と
同じです。マクロの自動記録はCopyPictureメソッドで記録されます。
 「図形3_2」マクロ例では、シートに1度貼り付け画像のサイズをチェックしその
サイズにあったピクチャー枠作ってそこに貼り付けてから画像ファイルで保存しました。
 
マニュアル操作で画像ファイルにして保存したい場合は、クリップボードにコピーされている
ので、「ペイント」などの画像処理のアプリケーションを開いて貼り付ければ簡単に
画像ファイルで保存できます。
 



【戻る】    【Top画面】   【HPへ】