2015-11-12 22 views
0

我正在尝试创建一个引用另一个表的公式列,并且我希望能够在不影响值的情况下对我的新列进行排序。我试图:为什么当我尝试将公式应用于单个单元格时,列中的每个单元格都会得到公式?

' 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每次在循环中设置列中的每个单元?我该如何阻止它呢?

+2

在表格中输入公式时 - 当你发现 - 该公式将自动填写表格中的所有行。但是,它应该分别识别每一行。但是你试图在表格对象之外放置一个引用,但它不能识别这个。作为一种解决方法,是否可以将公式列放在离表格一列以外的地方,以便Excel无法将其识别为表格的一部分? –

+0

@ScottHoltzman:谢谢你的指针,我会去的。我可以在不破坏公式的情况下将列复制回来吗? –

+0

您的声明:'Set statusRange = statusCol.DataBodyRange'表示您正在创建刚刚创建的2列的数据范围(包含标题的范围)。然后你循环这两列中的每个单元格。所以它可能更容易做到:'statusRange.Cells(1,1).. formula =“= IF(INDEX(MatchColumn,”&statusIndex&“),”“X”“,”“Y”“)”'如果你只想要第一个单元格有这个公式! – R3uK

回答

1

我发现让这个分辩的唯一办法就是多了一个列添加到表idexes号码,然后使用此代码:我在配方中添加一个额外的A

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

通知。

在这个例子中我列包含索引号,像这样

enter image description here

相关问题