循环遍历列并粘贴数组公式
我正在处理一个问题来遍历一定数量的列并粘贴到数组公式中。 对于每一个新的列,我必须改变公式来反映那个列地址。 但是,当我尝试运行它时,我不断得到一个1004(select范围类失败的方法)错误。 这是我写的:
Sub Testlee() Dim i As Integer Dim LastColumn As Long Dim rng As Range Dim colStr As String LastColumn = 10 For i = 1 To LastColumn colStr = Replace(Split(Columns(i).Address, ":")(0), "$", "") ThisWorkbook.Sheets("Data Validation").Range(colStr & "2:" & colStr & "500").Select Selection.FormulaArray = "=IF(LEN(Agent1!" & colStr & "2:" & colStr & "500) + LEN(Agent2!" & colStr & "2:" & colStr & "500) = 0,"""",(IF(Agent1!" & colStr & "2:" & colStr & "500=Agent2!" & colStr & "2:" & colStr & "500, ""YES"", Agent1!" & colStr & "2:" & colStr & "500&""||""&Agent2!" & colStr & "2:" & colStr & "500)))" Next i End Sub
任何帮助,将不胜感激 : )
更新:我能够使用这两种方法的组合工作。 这里是工作的代码:
For i = 1 To LastColumn colStr = Replace(Split(Columns(i).Address, ":")(0), "$", "") With ThisWorkbook.Sheets("Data Validation").Range("A2:A500") ThisWorkbook.Sheets("Data Validation").Range(colStr & "2:" & colStr & "500").FormulaArray = "=IF(LEN(Agent1!RC:R[498]C)+LEN(Agent2!RC:R[498]C) = 0,"""",(IF(Agent1!RC:R[498]C=Agent2!RC:R[498]C, ""YES"", Agent1!RC:R[498]C&""||""&Agent2!RC:R[498]C)))" End With Next i
感谢大家的帮助!
试试这个:
Sub MM() Const LastCol As Integer = 10 '// Column number to extend to With Sheets("Data Validation").Range("A2:A500") .Resize(500, LastCol).FormulaArray = "=IF(LEN(Agent1!RC:R[498]C)+LEN(Agent2!RC:R[498]C) = 0,"""",(IF(Agent1!RC:R[498]C=Agent2!RC:R[498]C, ""YES"", Agent1!RC:R[498]C&""||""&Agent2!RC:R[498]C)))" End With End Sub
-
使用R1C1表示法使每个单元格的公式与循环无关。
-
此外,您可以使用
Resize()
方法来调整现有范围的大小 – 再次保存循环。 有关Resize方法的信息 -
最后,正如已经提到的那样 – 99.99%的时间不需要。selectvba中的任何东西 – 您可以直接访问对象的属性和方法,而不必将其作为
Selection
从我所看到的,你可能select表格'数据validation'的列,而活动工作表是另一个工作表。
您需要先激活数据validation表,这意味着您添加一行
ThisWorkbook.Sheets("Data Validation").Select
在线之前
ThisWorkbook.Sheets("Data Validation").Range(colStr & "2:" & colStr & "500").Select
这是提供您不需要运行使用当前activesheet的代码。