我搜索了论坛,但我真的很难让我的代码部分工作。基本上,我们的想法是搜索工作表1并根据条件将一个或多个列复制到特定工作表。 即如果表1第1列和第3列包含"复制01"然后将两列复制到工作表2,如果工作表1列2和4包含"复制02"然后将两列复制到工作表3等。
我可以使用代码计算行数,但不能计算列数。似乎与不违反列范围有关,但我没有想法解决这个问题!任何帮助将不胜感激。
'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)
谢谢, 斯图尔特
答案 0 :(得分: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)中会获得一个表示此列第一行中单元格的单元格(例如Cell M1)。
地址(true,false)方法获取行前的美元符号但不是列字母前的单元格引用(例如“M $ 1”
split函数返回一个数组,该数组用“$”字符分割输入字符串(例如数组 - (“M”,“1”)
(0)返回返回数组中的第0个元素(例如“M”) 然后将其放入范围函数中将返回范围(例如)“A1:M1”
我不完全确定你在这里尝试使用UBound功能。制作
会更有意义e = cells(1,columns.count).end(xlToLeft).column
然后循环
For N = 1 To e
因为这会遍历每一列。