Excel VBA 図形を扱う

Excel VBA のトップに戻る
Excel VBA 目次

シート内のすべての矢印(線)を選択する

指定セルに架かる図形を選択する

索引


 参考サイト:Happy! Happy! Island
オートシェイプ(図形)や画像を操作する
http://www.happy2-island.com/excelsmile/smile03/capter01201.shtml

シート内のすべての矢印(線)を選択する

 既存のシートに登録されている、図形の矢印を、全て別のシートにコピーする必要があったので、下記のようにしました。

 既存のシートでは、図形をコピーして作成しているため、一つのシート内に、同じ名前(例えば Line 1)の図形が、複数存在しました。このため、「名前」ではなく、「インデックス」を使って、捕まえています。

 このコードは、下記のQ & A サイトを参考にさせていただきました。
http://okwave.jp/qa/q864591.html


   Dim インデックス As Integer

   '既存ブック・既存シートの矢印を全てコピー
   Workbooks(既存ブック名).Worksheets(既存シート名).Activate

   For インデックス = 1 To ActiveSheet.Shapes.Count
'      MsgBox ActiveSheet.Shapes(インデックス).Name & " " & インデックス
       If InStr(ActiveSheet.Shapes(インデックス).Name, "Line") > 0 Then
         ActiveSheet.Shapes(インデックス).Select (False)
       End If
   Next

   Selection.Copy
   Range("A1").Select
   
   Workbooks(新規ブック名).Worksheets(新規シート名).Activate
   Range("R11").Select '貼り付け先の起点のセル
   ActiveSheet.Paste
   
   Range("A1").Select


 解説
 Select メソッドChart オブジェクト、Charts コレクション オブジェクト、Shape オブジェクト、ShapeRange コレクション オブジェクト、Sheets コレクション オブジェクト、Worksheet オブジェクト、Worksheets コレクション オブジェクトに指定した場合
 引数 Replace に False を指定すると、直前の選択状態を解除しないで、新しいオブジェクトを選択状態にできます。
 上の例では、これを使って、該当する図形を、全て選択状態にしているのです。

この種類の目次に戻る↑ 索引へ↓ トップページに戻る


指定セルに架かる図形を選択する

 インストラクターのネタ帳 のサイトに、解説を含めて紹介していただいていました。

 選択したセル範囲に含まれる図形を削除するマクロ
http://www.relief.jp/itnote/archives/018407.php

 次のコードの例は、指定したセルの、テキスト・ボックスの文字列を取得するものです。
   Dim シェイプ As Shape
   Dim シェイプのレンジ As Range

'セルを指定して、Shapeオブジェクトを選択
' http://www.relief.jp/itnote/archives/018407.php

'アクティブシートのすべての図形にループ処理
For Each シェイプ In 処理Book.Worksheets(1).Shapes

   '図形の配置されているセル範囲をオブジェクト変数にセット
   Set シェイプのレンジ = Range(シェイプ.TopLeftCell, シェイプ.BottomRightCell)

   '図形の配置されているセル範囲と
   '選択されているセル範囲が重なっていれば、文字列を取得
   If Not Intersect(シェイプのレンジ, レンジ範囲.Cells(レンジ.Row + 1, レンジ.Column)) Is Nothing Then
      On Error Resume Next
      コメント = Trim(シェイプ.TextFrame.Characters.Text)
   End If

Next

 解説:
 Intersect メソッド は、複数のセル範囲の共有セル範囲を表す Range オブジェクトを返します。
 あるセルがセル範囲に含まれるかどうか
http://officetanaka.net/excel/vba/tips/tips118.htm


 次のコードの例は、指定したセルの図形を、他のシートに貼り付けて、サイズを修正するものです。
'アクティブシートのすべての図形にループ処理
For Each シェイプ In 処理Book.Worksheets(1).Shapes

   '図形の配置されているセル範囲をオブジェクト変数にセット
   Set シェイプのレンジ = Range(シェイプ.TopLeftCell, シェイプ.BottomRightCell)

   '図形の配置されているセル範囲と
   '選択されているセル範囲が重なっていれば、図形をコピー
   If Not Intersect(シェイプのレンジ, レンジ範囲.Cells(レンジ.Row + 1, レンジ.Column)) Is Nothing Then
      シェイプ.Copy
   End If

Next

'図形を集計シートに貼り付ける
集計シート.Range("H1").Cells(集計シート最終行, 1).PasteSpecial xlPasteAll

集計シート.Activate

''excel2010では以下のコードがないと縦と横が同じ比率で変更されます
'図形.ShapeRange.LockAspectRatio = msoFalse
'集計シート.Shapes(集計シート.Shapes.Count).ShapeRange.LockAspectRatio = msoFalse
'サイズ指定
'対象図形は、最後に貼り付けたので、図形の数で指定
With 集計シート
   .Shapes(集計シート.Shapes.Count).Height = 16#
   .Shapes(集計シート.Shapes.Count).Width = 30#
End With

この種類の目次に戻る↑ 索引へ↓ トップページに戻る



ホームページのトップに戻る