1

我已经搜索了论坛,但我真的很难让我的部分代码工作。基本上,这个想法是搜索工作表 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)

谢谢,斯图尔特

4

1 回答 1

1

你要这个:

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

cells(1, columns.count).end(xlToLeft).column) 获取最后一列编号(例如 'M' 为 13)。

将其放入 cells(1, lastcolNum) 会得到一个表示该列第一行中的单元格的单元格(例如 Cell M1)。

address(true, false) 方法获取在行之前但不在列字母之前带有美元符号的单元格引用(例如“M$1”

split 函数返回一个用“$”字符分割输入字符串的数组(例如数组 - ("M","1")

(0) 返回返回数组中的第 0 个元素(例如“M”)然后将其放入 range 函数返回范围(例如)“A1:M1”

我不完全确定您要在这里使用 UBound 函数做什么。这样做会更有意义

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

然后循环

For N = 1 To e

因为这将遍历每一列。

于 2015-03-02T16:30:34.857 回答