• ベストアンサー

【Excelマクロ】もっと頭の良い書き方って無いかな?

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

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

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

sineminna
質問者

お礼

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

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 #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 ------------------------------------------

sineminna
質問者

お礼

完璧です。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

左辺の連続複数セルを指定して空白か聞くのは難しいですね とりあえず ●<繰り返しループ法>で 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

sineminna
質問者

お礼

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

  • kuroooooo
  • ベストアンサー率47% (8/17)
回答No.1

if文のところもFor Nextにすればスッキリすると思います。 後、判定も for j = 5 to 0 step -1で 5行目から判定すれば効率がよいかもです。