Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


16771 / 76732 ←次へ | 前へ→

【65425】Re:For〜文の入れ子につきまして
発言  kanabun  - 10/5/20(木) 1:56 -

引用なし
パスワード
   ▼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

1 hits

【65423】For〜文の入れ子につきまして murasaki 10/5/19(水) 23:28 質問
【65425】Re:For〜文の入れ子につきまして kanabun 10/5/20(木) 1:56 発言
【65427】Re:For〜文の入れ子につきまして murasaki 10/5/20(木) 10:38 お礼

16771 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free