| 
    
     |  | ▼murasaki さん: 
 
 > 特定のセルをクリックしてマクロを走らせると、アクティブセルが
 >特定範囲に入っているか判断したうえで、指定のセル範囲にオートシェイプの
 >×印(斜線を二つ描)が描かれるマクロを作りたいと考えております。
 >
 > 特定セルは、行番号s = 5, 18, 31, 44(=5 + 13 * i)で、
 >列番号t = 3, 8, 13, 18, 23, 28, 33, 38, 43, 48, 53, 58, 63(=3 + 5 * d)
 >の組み合わせで、計52個あります。
 >特定セル(計52個)から指定セルまでは等間隔です。
 >
 
 >For ループの処理が、先に書かれている行(縦)方向のセルにしか作動しません。
 
 ざっと見た感じでは、
 
 >  Else
 >     Exit For
 の位置がおかしいように思います。
 Else
 Exit For
 でなく、
 
 If アクティブセルが指定のセルにあったら、
 バツを描画して
 For〜Nextループを抜ける(Exit)
 End If
 
 ということではないかと?
 それであれば、
 
 >  Set g = Intersect(ActiveCell, p)
 >  If Not g Is Nothing Then
 描画処理
 Exit Sub
 >  End If
 
 で、描画したら、さっさと終了してしまっても良さそうな気がします。
 
 あと、Loopカウンタは Step を使って 以下のように
 書けます。
 
 Sub バツ2()
 Dim s As Long, t As Long
 Dim X As Range, g As Range
 Dim ShpN(1 To 2) As Variant
 
 For s = 5 To 44 Step 13
 For t = 3 To 63 Step 5
 
 Set g = Intersect(ActiveCell, Cells(s, t))
 
 If Not g Is Nothing Then
 Set X = ActiveCell.Offset(4).Resize(4, 5)
 
 With ActiveSheet.Shapes.AddLine( _
 X.Left, X.Top, X.Left + X.Width, X.Top + X.Height)
 .Fill.Visible = msoFalse
 .ZOrder msoBringToFront
 .Line.Weight = 0.55
 ShpN(1) = .Name
 End With
 
 With ActiveSheet.Shapes.AddLine( _
 X.Left + X.Width, X.Top, X.Left, X.Top + X.Height)
 .Fill.Visible = msoFalse
 .ZOrder msoBringToFront
 .Line.Weight = 0.55
 ShpN(2) = .Name
 End With
 ActiveSheet.Shapes.Range(ShpN).Group
 Exit Sub
 
 End If
 Next t
 Next s
 
 End Sub
 
 
 |  |