|
▼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
|
|