当我尝试将公式应用于单个单元格时,为什么列中的每个单元格都会得到公式?

时间:2015-11-12 14:30:09

标签: excel vba excel-vba

我正在尝试创建一个引用另一个表的公式列,我希望能够对新列进行排序,而不会影响值。我在尝试:

' dataTable is a ListObject
Dim statusCol As ListColumn
Dim statusRange as Range
Dim statusCell As Range
Dim statusIndex as Integer

Set statusCol = dataTable.ListColumns.Add(2)
dataTable.HeaderRowRange(2) = "Status"
Set statusRange = statusCol.DataBodyRange
statusIndex = 1
For Each statusCell in statusRange.Cells
    statusCell.formula = "=IF(INDEX(MatchColumn," & statusIndex & "), ""X"", ""Y"")"
    statusIndex = statusIndex + 1
Next statusCell

如果我理解正确的话,这个循环应该在每个单元格中添加一个不同的statusIndex值。但是当我在调试器中逐步执行它时,只要我设置第一个单元格,就会为每个单元格设置公式。因此,当我有25行数据时,我最终得到公式为

的每个单元格中的公式
=IF(INDEX(MatchColumn, 25), "X", "Y")

而我希望第一行的数字为1,第二行的数字为2 ......

那么为什么Excel每次在循环中设置列中的每个单元格?我怎么能阻止它呢?

1 个答案:

答案 0 :(得分:1)

我发现获得此方法的唯一方法是使用idexes编号向表中再添加一列,然后使用此代码:

ActiveSheet.Range("D2:D9").Formula = "=IF(INDEX(MatchColumn, A" & statusIndex & "), ""X"", ""Y"")"

请注意,我在公式上添加了额外的A

在此示例中,我的A列包含索引编号,如下所示

enter image description here