2015-03-02 19 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