如何使用VBA在excel中命名动态列

时间:2016-09-06 14:17:18

标签: excel vba

我一直在学习VBA一段时间,但是我遇到过一个问题,直到知道我才能解决这个问题。

我希望能够使用VBA命名列,因此我可以稍后将其用作其他单元格/列中的参考列(使用INDEX函数)。

我知道如何命名固定的列。但这不是我想要的。

我的问题示例:

本月我将列D命名为TotalAmount。 VBA代码可以是:

ActiveWorkbook.Names.Add Name:="TotalAmount", RefersToR1C1:="=Sheet1!C4"

我将使用INDEX函数在其他单元格中引用该列。

但是,下个月我将在专栏D之前添加一个新专栏(比如上个月的销售额)。因此,我希望下个月命名为TotalAmount的新列将是E列,而不是D

我知道在添加新列时不应更改列命名,而列E将自动成为TotalAmount列。但是,我不能依赖它,因为excel表是由不同的人访问的,每个人都在做自己的计算。

所以我也尝试了这个(我确定它很愚蠢,但是我仍然是一个菜鸟)但它不起作用:(

Sub Macro4()
    Range("D1").Select 
    '(I can select the desired cell each month using the search function)
    Dim i As Integer
    i = ActiveCell.Column
    ActiveWorkbook.Names.Add Name:="TotalAmount", RefersToR1C1:="=Sheet1!Ci"
End sub

如果有人能帮助我或指导我这个问题,我将非常感激。

2 个答案:

答案 0 :(得分:0)

'i'是一个变量,所以你不能在引号中使用它。在引号中,它只是'我'并且没有价值。试试ActiveWorkbook.Names.Add Name:="TotalAmount", RefersToR1C1:="=Sheet1!C" & i
不确定这是否可以解决您的问题

答案 1 :(得分:0)

您可以让VBA为您找到该单元格:

import

代码在Sub SetNamedRange() Dim rng As Range Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1:Z1").Find("TotalAmount") ThisWorkbook.Names.Add Name:="TotalAmount", RefersToR1C1:=rng End Sub 中搜索文本A1:Z1并将命名范围设置为该单元格