Excel VBA質問箱 IV

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

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


3976 / 13646 ツリー ←次へ | 前へ→

【59121】For〜Next yu 08/11/29(土) 18:59 質問[未読]
【59122】Re:For〜Next ichinose 08/11/29(土) 19:37 発言[未読]
【59123】Re:For〜Next ichinose 08/11/29(土) 19:45 発言[未読]
【59124】Re:For〜Next yu 08/11/29(土) 20:10 お礼[未読]

【59121】For〜Next
質問  yu  - 08/11/29(土) 18:59 -

引用なし
パスワード
   こんばんは

下記のコードをFor〜Nextで、出来そうな気がしますが
参考書を見てもわかりませんでした。
宜しくお願いします。

Private Sub CommandButton1_Click()
      If Not Intersect(ActiveCell, Range("A4:F17")) Is Nothing Then
         Range("A1").Value = ""
    ElseIf Not Intersect(ActiveCell, Range("A40:F53")) Is Nothing Then
         Range("A37").Value = ""
    ElseIf Not Intersect(ActiveCell, Range("A76:F89")) Is Nothing Then
         Range("A73").Value = ""
    ElseIf Not Intersect(ActiveCell, Range("A112:F125")) Is Nothing Then
         Range("A109").Value = ""
   End If
End Sub

【59122】Re:For〜Next
発言  ichinose  - 08/11/29(土) 19:37 -

引用なし
パスワード
   こんばんは。

>
>下記のコードをFor〜Nextで、出来そうな気がしますが
>参考書を見てもわかりませんでした。

拝見すると、

A4:F17

A40:F53

A76:F89

A112:F125

A4,A40,A76,A112は、行が36毎に増えています。

又、

Range("A1").Value = ""

Range("A37").Value = ""

Range("A73").Value = ""

Range("A109").Value = ""

これも A1,A37,A73,A103と行が36毎に増えています。

しかも、

A4:F17  17-4=13

A40:F53  53-40=13

A76:F89  89-76=13

A112:F125 125-112=13

行の差が13と一定です。故に、セル範囲の大きさは、同じことがわかります。


行が項差36の等差数列だという規則性があることに着眼します。


すると、

Private Sub CommandButton1_Click()
  Dim g0 As Long
  For g0 = 0 To 3
    If Not Intersect(ActiveCell, _
       Range(Cells(g0 * 36 + 4, "A"), _
       Cells(g0 * 36 + 17, "F"))) Is Nothing Then
     Range("A" & g0 * 36 + 1).Value = ""
     Exit For
    End If
  Next
End Sub

 
こんなコードになります。

規則性を見抜くことがすっごく大事ですよ!!

【59123】Re:For〜Next
発言  ichinose  - 08/11/29(土) 19:45 -

引用なし
パスワード
   別解

Private Sub CommandButton1_Click()
  Dim g0 As Long
  For g0 = 4 To 112 Step 36
    If Not Intersect(ActiveCell, _
       Range(Cells(g0, "A"), _
       Cells(g0 + 13, "F"))) Is Nothing Then
     Range("A" & (g0 - 3)).Value = ""
     Exit For
    End If
  Next
End Sub

こっちの方がよかったかなあ?

【59124】Re:For〜Next
お礼  yu  - 08/11/29(土) 20:10 -

引用なし
パスワード
   ichinoseさん とても丁重な説明で
初心者の私にでも理解できました。
これを参考に他のコードも
見直したいと思います。
本当に有り難うございました。

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