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

Excel 循环遍历列并粘贴数组公式,excel,vba,Excel,Vba,我正在解决一个问题,即循环一定数量的列并粘贴到数组公式中。对于每个新列,我都必须更改公式以反映该列地址。然而,当我现在尝试运行它时,我不断得到一个1004 select方法的range类failed错误。以下是我写的: 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

我正在解决一个问题,即循环一定数量的列并粘贴到数组公式中。对于每个新列,我都必须更改公式以反映该列地址。然而,当我现在尝试运行它时,我不断得到一个1004 select方法的range类failed错误。以下是我写的:

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

谢谢大家的帮助

据我所见,您可能选择了工作表的“数据验证”列,而活动工作表是另一个工作表

您需要首先激活数据验证表,这意味着您需要添加一行

ThisWorkbook.Sheets("Data Validation").Select
排队前

ThisWorkbook.Sheets("Data Validation").Range(colStr & "2:" & colStr & "500").Select
这样,您就不需要再运行使用当前activesheet的代码了

试试这个:

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
用于使公式与每个单元格相关,而无需循环

此外,您还可以使用Resize方法调整现有范围的大小-同样,保存循环

最后,如前所述-99.99%的时间不需要选择中的任何内容-您可以直接访问对象的属性和方法,而无需将其作为选择


是否使用R1C1参考样式?只能在活动工作表中选择单元格。你根本不需要选择Hi BrakNicku,我试着不使用选择,只是将其作为SheetsRange.FormulaArray=Formula,但它也不起作用。埃博拉,我没有在公式中使用R1C1引用。我不知道如何在具有可变列的数组公式中实现它。嗨@Macro-Man,谢谢你的建议!我认为我需要使用R1C1是对的,但当我以这种方式实现它时:使用SheetsData Validation.RangeA2:A500.Resize500,LastCol.FormulaArray==IFLENAgent1!RC:R[498]C+LENAgent2!RC:R[498]C=0,IFAgent1!RC:R[498]C=Agent2!RC:R[498]C,是的,Agent1!RC:R[498]C&| |&&Agent2!RC:R[498]C然后我得到一个范围为A500:J的公式,在这种情况下,R1C1计算为A2:A500。它似乎并没有随着专栏的改变而改变。我在R1C1中加入了Hi@Macro-Man,它仍然只在A2:J500范围内复制相同的公式。