アプリ版:「スタンプのみでお礼する」機能のリリースについて

5行空白列があったらそこで処理を終わりたいんですが、もっといい書き方はないでしょうか?
下記が私の考えた頭の悪いやり方です。

Sub macro()

Dim i As Integer

For i = 1 To 1000

If Cells(i, 1) = "" Then
 If Cells(i + 1, 1) = "" Then
  If Cells(i + 2, 1) = "" Then
   If Cells(i + 3, 1) = "" Then
    If Cells(i + 4, 1) = "" Then
     If Cells(i + 5, 1) = "" Then
      MsgBox (i - 1 & "行目で終わりです")
      Exit For
     End If
    End If
   End If
  End If
 End If
End If

Next

End Sub

A 回答 (4件)

5行空白列があったらそこで処理を終わりたいんですね?


お書きになったのでは6行空白がないと終わらないような・・・・。

こんな書き方もあります。

Sub test01()
For i = 1 To 1000
If Application.WorksheetFunction.CountA(Range(Cells(i, 1), Cells(i + 4, 1))) = 0 Then
MsgBox (i - 1 & "行目で終わりです")
Exit For
End If
Next
End Sub
    • good
    • 0
この回答へのお礼

非常に参考になりました。
ありがとうございました。

お礼日時:2007/12/13 13:51

こんにちは。



#2 さん、ご指摘のように、
>5行空白列があったら
コードは、空白は6行という数になっていますね。私は、コードに従いました。

15行目が空白で、それから、20行目までが空白なら、6行空白という計算になります。

i =15,  i+5 =20
Cells(i, 1) = ""      Cells(i + 5, 1) = ""


------------------------------------------

Sub Test02()
  Dim i As Long
  Dim Rw1 As Long, Rw2 As Long
  i = 1
  If Cells(i, 1) <> "" Then Rw1 = Cells(i, 1).Row
  Do
    Rw2 = Cells(i, 1).End(xlDown).Row
    '>6 は、6行以上
    If Rw2 - Rw1 > 6 Or Rw2 > 1000 Then Exit Do
    Rw1 = Rw2: i = Rw2
  Loop
  If Rw1 <> 0 Then
    MsgBox Rw1 & "行目で終わりです。", 64
  Else
    MsgBox "最終行が見つかりませんでした。", 48
  End If
End Sub
------------------------------------------
    • good
    • 0
この回答へのお礼

完璧です。

お礼日時:2007/12/13 18:34

左辺の連続複数セルを指定して空白か聞くのは難しいですね


とりあえず
●<繰り返しループ法>で
Sub test01()
Dim rg As Range
i = 1
For Each rg In Range(Cells(i, "A"), Cells(i + 4, "A"))
If rg = "" Then
Else
MsgBox "処理"
End
End If
Next
MsgBox "終了"
End
End Sub
ーー
●<エクセル関数法>
エクセル関数を利用するのも良いかもしれない。
Sub test02()
i = 1
x = WorksheetFunction.CountBlank(Range(Cells(i, "A"), Cells(i + 4, "A")))
If x = 5 Then
MsgBox "終了"
End
Else
MsgBox "処理"
End
End If
End Sub
    • good
    • 0
この回答へのお礼

(^0_0^)ナルホド
いろいろな書き方があるんですね。

お礼日時:2007/12/13 13:52

if文のところもFor Nextにすればスッキリすると思います。


後、判定も
for j = 5 to 0 step -1で
5行目から判定すれば効率がよいかもです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!