2016-04-04 35 views
1

VBA noob的位,所以請不要過多地關注我的代碼。我有一個數據行總是變化的文檔,我寫了一個小函數來清除之前的條目,然後完成宏的其餘部分。我的目標是清除列H中的所有條目。我不想清除整個列,只是第6行和下面。這工作得很好:Excel VBA - 查找數據的相對範圍

Range("H6", Range("H1048576").End(xlUp).Offset(1, 0)).Select 
Selection.ClearContents 

我再要進入我的公式,我放在H6對於同一行中A列中還完時,我貼在公式值有數據的每一行。我這樣做如下:

If Range("A7").Value <> "" Then 
     Range("H6").Select 
     Selection.AutoFill Destination:=Range("H6:H" & Range("A" & Rows.Count).End(xlUp).Row) 
     Range("H6", Range("H1048576").End(xlUp)).Select 
     Selection.Copy 
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
    End If 

以上所有工作正常。但是,我的問題是,如果我插入一個列前面這個打破由於絕對的引用。在工地附近搜索這裏給我,我可以找到第5行我標題的值如下:

Dim MyRng As Range 
Set MyRng = Range("5:5").Find("Column Title", LookIn:=xlValues, LookAt:=xlWhole) 

但隨後我就如何與MyRng值做我的代碼的其餘損失。我在猜測我的後退方式,轉到表單底部,跳到最後一個值,發現數據範圍是問題。

所以一旦找到第5行標題的列,我該如何設置我的範圍是數據下的所有單元格?

感謝您的幫助!

+0

你不想找到/設置範圍。只需找到列號,然後使用'cells'而不是'range'。 – findwindow

回答

1

事情是這樣的:

Dim MyRng As Range 
Dim lastRow As Long 

With ActiveSheet 

    lastRow = .Cells(.Rows.count, "A").End(xlUp).Row 
    Set MyRng = .Range("5:5").Find("Column Title", LookIn:=xlValues, LookAt:=xlWhole) 
    c = MyRng.Column 
    Debug.Print c 

    If .Range("A7").Value <> "" Then 
     .Range("H6").Select 
     Selection.AutoFill Destination:=.Range(.Cells(6, c), .Cells(lastRow, c)) 

     .Range("H6", .Range("H1048576").End(xlUp)).Select 
     Selection.Copy 
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
    End If 

End With 
+0

謝謝,這看起來像我可以嘗試使用的一個開始,但仍然有一些H列我想與MyRng相關。我想我可以做自動填充,但複製粘貼值的一部分,我不知道如何做,而只是相對引用。 –

+0

感嘆。我對你表示讚賞,因爲你表現出了努力,但顯然你沒有打算研究我的答案:/ – findwindow

+0

爲什麼會對此感到屈辱?你解決了我的一半問題,當我試圖自己解決問題時,我請求了另一半的指導。我現在已經解決了其餘的問題,並且沒有絕對的參考文獻,但是對於一個新成員來說,有點廢話,不是嗎? 對我來說,這不是重點標記一個完整的答案(或至少到達目標的方向),而不是一半的答案?其他人發現我的問題,並做你上面的,他們沒有完成。 –