エクセルVBA オートシェイプを操作したいです
エクセルでセルの入力内容によって楕円をオートシェイプで出現させたいと思います。
http://oshiete1.goo.ne.jp/qa809742.htmlで見つかったものを参考にし、
Private Sub worksheet_Activate()
Dim Shp As Shape
Set P11 = Range("P11")
If P11 Is Nothing Then Exit Sub
If P11.Value = 1 Then
For Each Shp In ActiveSheet.Shapes
If Not Application.Intersect(Shp.TopLeftCell, _
Range("N14:N15")) Is Nothing Then
Shp.Delete
End If
Next Shp
With ActiveSheet.Range("N14:N15")
ActiveSheet.Shapes.AddShape(Type:=msoShapeOval, _
Left:=.Left,TOP:=.TOP,Width:=.Width,Height:=.Height).Select
Selection.ShapeRange.Fill.Visible = msoFalse
End With
Range("N14").Select
Else
For Each Shp In ActiveSheet.Shapes
If Not Application.Intersect(Shp.TopLeftCell, _
Range("N14:N15")) Is Nothing Then
Shp.Delete
End If
Next Shp
End If
If P11.Value = 2 Then
For Each Shp In ActiveSheet.Shapes
If Not Application.Intersect(Shp.TopLeftCell, _
Range("N16")) Is Nothing Then
Shp.Delete
End If
Next Shp
With ActiveSheet.Range("N16")
ActiveSheet.Shapes.AddShape(Type:=msoShapeOval, _
Left:=.Left, TOP:=.TOP, Width:=.Width, Height:=.Height).Select
Selection.ShapeRange.Fill.Visible = msoFalse
End With
Range("N16").Select
Else
For Each Shp In ActiveSheet.Shapes
If Not Application.Intersect(Shp.TopLeftCell, _
Range("N16")) Is Nothing Then
Shp.Delete
End If
Next Shp
End If
End Sub
とつなげて見ました。
動くには動くのですが、データ元のセルがP11からT30と100セルあり、さらにP11に入力されるデータが1,2,3,4の4種類、AQ11に5,6,7,8,9の5種類などと、ばらばらです。
P11に1が入力されるとN14:N15(結合されています)に円が入り、2が入力されるとN16に円が入る。
Q11に5が入力されるとR13に円が入り、6が入力されるとR14:R15に円が入る・・・・のようにしたいのです。
一生懸命、セルNo.を打ち込んでいたら、
「コンパイルエラー:プロシージャが大きすぎます」とエラーが出てしまいました。
ループさせればよいのだろうと試してみたのですが、元のセルの指定方法や、オートシェイプの出現させるせるの指定方法がわかりません。
どのようにすれば、データー元の範囲を指定して、それに対応したセルにオートシェイプを出現させる事が出来るようになるでしょうか。
お知恵を貸していただけないでしょうか。よろしくお願い致します。
お礼
なんと! Select(False)でこんなことができるんですね! 目からうろこです。 ありがとうございました!