2017-02-16 15 views
0

コードは、ヘッダー行と正しい列を検索します。同じ列のヘッダー行の下の1つのセルを開始し、同じ列の最後の行までの範囲で、いくつかのコードを実行したいと思います。範囲を作成するのにoffsetを使用しようとしましたが、毎回offsetが失敗します。 offsetはこの方法で使用できませんか?Excel VBA:この単純なオフセットでは何が欠けていますか?

Sub Del_Y_Rows() 
Dim Rng, fcell, LastRow, SrchRng, sRNG, eRNG As Range 
Dim Findstring As String 
Findstring = "Header" 

With Sheets("thisSheet") 
    Set SrchRng = .Range("a1:l15") 
    Set fcell = SrchRng.Find(What:=Findstring, _ 
      LookAt:=xlWhole, _ 
      LookIn:=xlValues, _ 
      SearchOrder:=xlByRows, _ 
      MatchCase:=False) 
    LastRow = .Cells(Rows.Count, fcell.Column - 2).End(xlUp).Row 
    Debug.Print "fcell " & fcell.Address 

    sRNG = .Range(fcell).Offset(1, 0) 'this fails 'sRng = start of the range 
    Debug.Print "srng " & sRNG 
    eRng = .cells(LastRow, fcell.Column) 'eRng = end of the range 
    Rng = .Range(sRNG, eRng) 
    Debug.Print "rng is " & Rng.Address 
End With 
End Sub 
+0

テスト。 BTWでは、 'eRNG'だけが' Range'です。残りの部分は 'Variant'として暗黙的に宣言されています – Comintern

答えて

0

fcellが範囲であるとRAnge()が必要とされていません。

sRNG = fcell.Offset(1, 0) 

もう一つは、あなたはFCELLが実際の範囲ではなく、何もであることを確認するためのチェックを使用したいと思うでしょう。

Sub Del_Y_Rows() 
Dim Rng As Range, fcell As Range, LastRow as Long , SrchRng As Range, sRNG As Range, eRNG As Range 
Dim Findstring As String 
Findstring = "Header" 

With Sheets("thisSheet") 
    Set SrchRng = .Range("a1:l15") 
    Set fcell = SrchRng.Find(What:=Findstring, _ 
      LookAt:=xlWhole, _ 
      LookIn:=xlValues, _ 
      SearchOrder:=xlByRows, _ 
      MatchCase:=False) 
    LastRow = .Cells(Rows.Count, fcell.Column - 2).End(xlUp).Row 
    If not fcell is nothing then 

     Debug.Print "fcell " & fcell.Address 

     set sRNG = fcell.Offset(1, 0) 'this fails 'sRng = start of the range 
     Debug.Print "srng " & sRNG 
     set eRng = .cells(LastRow, fcell.Column) 'eRng = end of the range 
     set Rng = .Range(sRNG, eRng) 
     Debug.Print "rng is " & Rng.Address 
    End If 
End With 
End Sub 
0

オブジェクトにはSetを使用する必要があります。

セットsRNG = .Range(FCELL).Offset(1、0)FCELLがNothing`は `かどう

関連する問題