循环遍历列并粘贴数组公式

我正在处理一个问题来遍历一定数量的列并粘贴到数组公式中。 对于每一个新的列,我必须改变公式来反映那个列地址。 但是,当我尝试运行它时,我不断得到一个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的代码。