2017-04-12 112 views
0

我很新的VBA,我試圖自動化我的一些日常任務。我想要自動化的一項任務需要我「搜索」指定的標題,並選擇整個數據列。然後,我會將該範圍粘貼到其他電子表格中。VBA代碼來搜索一個行標題,並選擇該標題下的整個範圍

Tamcolumn = Cells.Find(what:="plan_tamaward", after:="a1", searchdirection:=xlPrevious, searchorder:=xlBycolumn, lookat:=xlPart).Column

我發現這個代碼點點是有幫助的,當我限定的整個列,問題是我不能定義列標題和限定的範圍內,而不下面「選擇」數據 - 我知道這是一個很大的禁忌。

我希望這是有道理的。

在此先感謝。 。

+0

'application.worksheetfunction.match( 「plan_tamarard」,工作表( 「名」)的範圍( 「A1:Z1」),假)'得到列並使用'resize'來設置數據的長度。 –

回答

1

您可以將下面的方法到你的代碼...

Dim Col As Long, LastRow As Long 
Dim Rng As Range 
If Application.CountIf(Rows(1), "plan_tamaward*") > 0 Then 
    Col = Application.Match("plan_tamaward*", Rows(1), 0) 
    LastRow = Cells(Rows.Count, Col).End(xlUp).Row 
    Set Rng = Range(Cells(2, Col), Cells(LastRow, Col)) 
End If 
If Not Rng Is Nothing Then 
    MsgBox Rng.Address 
    'do whatever you want to do with this range here 
Else 
    MsgBox "The column named like plan_tamaward* was not found in Row1.", vbExclamation, "Column Not Found!" 
    Exit Sub 
End If 
+0

這太好了。有什麼方法可以將代碼從Application.countif更改爲工作表(「x」)。countif?我將從另一個工作簿中運行宏,並將此工作簿中的rng複製到另一個工作簿中。 – VBArookie

+0

您只需要在要查找字符串plan_tamaward *的工作表中限定CountIf內的範圍。因此,在這種情況下,它應該是如果Application.CountIf(工作表(「X」)。行(1),「plan_tamaward *」)> 0和您需要更改Match函數中的查找範圍一樣。 – sktneer

+0

謝謝修復!現在我只需將設置我複製的範圍值的最後一步=設置爲我設置的範圍 這是我擁有的代碼,但是當我運行它時,它會將工作表中的數據。 (「Copyto」)。Range(「F4」)。Resize(Rngm.Rows.Count).Value = Rngm.Value wbmodel.Sheets(「Copyto」)。Range(「E4」)。Resize (RngSku.Rows.Count,1).Value = RngSku.Value wbmodel.Sheets(「Copyto」)。Range(「C4」)。Resize(RngPO.Rows.Count).Value = RngPO.Value End Sub – VBArookie