「これはヤバかったな」という遅刻エピソード

下記の記述で2行おきのセル範囲から0以下のセルを除外したセル範囲を取得しようとすると
Set Rng = Application.Union(r, Rng)
の行でエラーが発生します。

'Set Rng = Range(Cells(12, 7), Cells(12, 7))
の行のコメントアウトをはずすと動きますが、
cells(12,7)の値が0以下だと本来の目的
である0以下のセル範囲を除外するという目的が果たせません。

Union(r,Rng)のRngがnothingになっているとエラーの原因になるのでしょうか?

Private Sub test()
Dim r As Range
Dim Rng As Range

'Set Rng = Range(Cells(12, 7), Cells(12, 7))
For i = 12 To 27 Step 3
If Cells(i, 7) > 0 Then
Set r = Range(Cells(i, 7), Cells(i, 7))
Set Rng = Application.Union(r, Rng)
End If
Next i
Rng.Select
End Sub

以上教えてください。
お願いします。

A 回答 (2件)

Nothing かどうかで処理を分けるとか、、、



Sub Test1()
Dim r As Range, i As Long
 For i = 12 To 27 Step 3
  If Cells(i, 7).Value > 0 Then
    If r Is Nothing Then
     Set r = Cells(i, 7)
    Else
     Set r = Application.Union(Cells(i, 7), r)
    End If
  End If
 Next i
 r.Select
End Sub
    • good
    • 1

こんにちは。



こんな方法もあります。

Sub Test2()
  Dim i As Long
  Dim r As Range
  On Error GoTo ErrHandler
  For i = 12 To 27 Step 3
   If Cells(i, 7).Value > 0 Then
     Set r = Application.Union(Cells(i, 7), r)
   End If
  Next i
  r.Select
  Exit Sub
ErrHandler:
  Set r = Cells(i, 7)
  Resume Next
End Sub
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A