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

时间:2015-10-05 06:36:34

标签: excel vba

我正在解决一个问题,要遍历一定数量的列并粘贴到数组公式中。对于每个新列,我必须更改公式以反映该列地址。但是,当我尝试现在运行它时,我不断得到1004(范围类的选择方法失败)错误。这是我写的:

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

感谢大家的帮助!

2 个答案:

答案 0 :(得分:1)

请改为尝试:

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 Notation使公式与每个单元格相关而不进行循环。

  • 此外,您可以使用Resize()方法调整现有范围 - 再次保存循环。 Info on Resize method here

  • 最后,如前所述 - 99.99%的时间内不需要.Select任何内容 - 您可以直接访问对象的属性和方法而无需制作它是Selection

答案 1 :(得分:0)

从我看到的情况来看,您可能正在选择表格和数据验证的列。而活动表是另一个工作表。

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

ThisWorkbook.Sheets("Data Validation").Select
行前

ThisWorkbook.Sheets("Data Validation").Range(colStr & "2:" & colStr & "500").Select

如果您不再需要运行使用当前活动表的代码,则可以使用此功能。

相关问题