2015-03-02 39 views
1

我已經搜索論壇,但我真的很努力讓我的代碼的一部分工作。基本上這個想法是搜索工作表1並根據標準將一個或多個列複製到特定工作表。 即,如果工作表1的第1列和第3列包含「複製01」,則將兩列都複製到工作表2,如果工作表1的第2列和第4列包含「複製02」,則將兩列都複製到工作表3等。Excel VBA - 使用變體的列數

I可以使用代碼對行進行精確計數,但不能對列進行計數。似乎不涉及列範圍,但我沒有想法來解決這個問題!任何幫助將非常感激。

'Row  
Dim NR As Long 
Dim d As Variant 

d = ws1.Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).Value 
    For NR = 1 To UBound(d, 1) 

'column 
Dim NC As Long 
Dim e As Variant 

e = ws1.Range(Cells(1, Columns.Count).End(xlToLeft).Column).Value 
    For NC = 1 To UBound(e, 1) 

感謝, 斯圖爾特

回答

1

你想這樣的:

e = range("A1:" & split(cells(1,cells(1,columns.Count).end(xlToLeft).column).address(true,false), "$")(0) & "1").Address 

細胞(1 columns.count).END(xlToLeft).COLUMN)得到最後一列數( 'M'的示例13)。

將其放入單元格(1,lastcolNum)中獲取表示此列第一行中的單元格(例如單元格M1)的單元格。

地址(真,假)方法獲取的行之前以美元符號的單元格引用而不是列字母(例如「M $ 1」之前

split函數返回其將輸入的陣列(例如array - (「M」,「1」)

(0)返回返回數組中的第0個元素(例如「M」) 然後將其放入範圍函數返回範圍(例如)「A1:M1」

我不完全確定你想用UBound樂趣做什麼在這裏。它會更有意義,使

e = cells(1,columns.count).end(xlToLeft).column 

,然後遍歷

For N = 1 To e 

通過每列這將循環。

+0

非常感謝這一點,它在我的代碼中完美工作。當我走的時候,我正在教自己(因此問題!),並有一些rondebruin代碼用於行計數,我試圖改變列數,但沒有運氣。 – 2015-03-03 12:24:54