| 
    
     |  | 初心者ですが、お教えいただけないでしょうか。 マクロの勉強しがてら、公開されているマクロを切り貼りして、
 目的を達しようとしていましたが、ついに行き詰まってしまいました。
 
 特定のセルをクリックしてマクロを走らせると、アクティブセルが
 特定範囲に入っているか判断したうえで、指定のセル範囲にオートシェイプの
 ×印(斜線を二つ描)が描かれるマクロを作りたいと考えております。
 
 特定セルは、行番号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 ループの処理が、先に書かれている行(縦)方向のセルにしか作動しません。
 それを
 For d = 0 To 12
 t = 3 + 5 * d
 For i = 0 To 3
 s = 5 + 13 *
 というふうに書きかえると、今度は列(横)方向のセルにしか作動(×描画)しなくなりました。
 
 同じ形態で、丸印描かせるマクロ(AddLineではなくAddShape)は、行方向、列方向にも正常に動いています。
 
 なにがおかしいのか、どうすればCells(s,t)に変数が代入できるかお教えいただけないでしょうか。
 どうぞよろしくお願いいたします。
 
 *)
 
 Sub バツ()
 Dim i As Integer, d As Integer, s As Integer, t As Integer
 Dim xa As Double, ya As Double, Endxa As Double, EndYa As Double, xb As Double, yb As Double, Endxb As Double, EndYb As Double
 Dim p As Variant, g As Variant
 
 For i = 0 To 3
 s = 5 + 13 * i
 For d = 0 To 12
 t = 3 + 5 * d
 
 Set p = Cells(s, t)
 Set g = Intersect(ActiveCell, p)
 
 If Not g Is Nothing Then
 With Cells(s + 4, t)
 xa = .Left
 ya = .Top
 End With
 
 With Cells(s + 8, t)
 xb = .Left
 yb = .Top
 End With
 
 With Cells(s + 7, t + 4)
 Endxa = .Left + .Width
 EndYa = .Top + .Height
 End With
 
 With Cells(s + 3, t + 4)
 Endxb = .Left + .Width
 EndYb = .Top + .Height
 End With
 
 Dim ShpN(1 To 2) As Variant
 Set Shp1 = ActiveSheet.Shapes.AddLine(xa, ya, Endxa, EndYa)
 Set Shp2 = ActiveSheet.Shapes.AddLine(xb, yb, Endxb, EndYb)
 ShpN(1) = Shp1.Name
 ShpN(2) = Shp2.Name
 ActiveSheet.Shapes.Range(ShpN(1)).Fill.Visible = msoFalse
 ActiveSheet.Shapes.Range(ShpN(2)).Fill.Visible = msoFalse
 ActiveSheet.Shapes.Range(ShpN(1)).ZOrder msoBringToFront
 ActiveSheet.Shapes.Range(ShpN(2)).ZOrder msoBringToFront
 ActiveSheet.Shapes.Range(ShpN(1)).Line.Weight = 0.55
 ActiveSheet.Shapes.Range(ShpN(2)).Line.Weight = 0.55
 ActiveSheet.Shapes.Range(ShpN).Group.Select
 
 Set g = Nothing
 Else
 Exit For
 
 End If
 
 Next d
 Next i
 
 End Sub
 
 |  |