2017-11-24 8 views
1

列の下にある2番目のセルの範囲を列ヘッダーの下に設定したいと考えています。私は列全体を選択するのではなく、2番目のセル(ヘッダを含まない)から始まる使用範囲だけを選択します。VBA:列ヘッダーを見つけた後に列の範囲を設定する

ヘッダーを見つけるためのコードを書くことができましたが、セルアドレス(文字列)を範囲に変換して残りの列の使用範囲を選択する際に問題があります。ここまでのことは、これまでのところです:

Sub colRange() 

Dim ws As Worksheet 
Dim hostCellRange As Range 

Set ws = Worksheets("Sheet1") 

With ws 
    With .Range("A1", .Cells(1, .Columns.Count).End(xlToLeft)) 
     Set cfind = .Find(What:="host", LookIn:=xlValues, lookat:=xlWhole) 
     If Not cfind Is Nothing Then 
      hostCell = cfind.Address 
      Set hostCellRange = ws.Range(hostCell) 
     End If 
    End With 
End With 


End Sub 

ありがとうございました!

+0

あなたの範囲に空白のセルがありますか? –

答えて

2

行うための正しい方法は、実施例1

enter image description here

Option Explicit 

Sub colRange() 
    Dim ws As Worksheet 
    Dim hostCellRange As Range, cfind As Range 
    Dim lRow As Long, lCol As Long 

    Set ws = Worksheets("Sheet1") 

    With ws 
     With .Range("A1", .Cells(1, .Columns.Count).End(xlToLeft)) 
      Set cfind = .Find(What:="host", LookIn:=xlValues, lookat:=xlWhole) 
      If Not cfind Is Nothing Then 
       '~~> Find the column number 
       lCol = cfind.Column 
       '~~> Find the last row in that column 
       lRow = ws.Range(Split(Cells(, lCol).Address, "$")(1) & ws.Rows.Count).End(xlUp).Row 
       '~~> Create the range 
       Set hostCellRange = .Range(cfind.Offset(1, 0), cfind.Offset(lRow - 1, 0)) 
       Debug.Print hostCellRange.Address 
      End If 
     End With 
    End With 
End Sub 

あろう2

enter image description here

Interesting Read on how to find the last row correctly

+1

Hey Siddharth、コードを説明する時間をとってくれてありがとう!私はこれを使用します!私は助けに感謝します! – wra

+0

あなたは歓迎です:) –

1

Offsetcfindから設定すると、Addressは不要です。

If Not cfind Is Nothing Then 
    Set hostCellRange = .Range(cfind.Offset(1, 0), cfind.End(xlDown)) 
End If 

cfind.End(xlDown)は、中央に空のセルしない範囲で動作します。

+0

ありがとうございます!それは素晴らしい仕事でした! – wra

関連する問題