VBA定义多个命名范围
我正在使用近200个命名范围(每列是NR)的工作表。 我现在想让他们dynamic而不是像他们定义他们
PersonID = =RawData!$A$2:$A$100
我想这样做
PersonID = OFFSET(RawData!$A$2,0,0,COUNTA(RawData!$A:$A),1)
但我不想手动做这个! 有没有办法做到这一点在Excel以外的texteditor或有办法做到这一点编程? 我已经有了第一种方式完成的200个NR,但手动经过它们的想法都改变了我。
你可以在VBA中做到这一点。 创build新名称的示例:
ActiveWorkbook.Names.Add Name:="PersonID", _ RefersTo:="=OFFSET(RawData!$A$2,0,0,COUNTA(RawData!$A:$A),1)"
编辑一个已经存在的名字:
ActiveWorkbook.Names("PersonID").RefersTo = _ "=OFFSET(RawData!$A$2,0,1,COUNTA(RawData!$A:$A),1)"
您在评论中指出,您还想遍历所有命名的范围,以便更改其定义。 要遍历所有的名字,你可以这样做:
Dim nm As Name For Each nm In ActiveWorkbook.Names Debug.Print nm.Name Next nm
或这个:
Dim i As Long For i = 1 To ActiveWorkbook.Names.Count Debug.Print ActiveWorkbook.Names.Item(i).Name Next i
这似乎是一个非常好的工具,在你的工具箱?
Sub MakeRangesDynamic() Dim i As Long For i = 1 To ActiveWorkbook.Names.Count If Not (ActiveWorkbook.Names.Item(i).Name = "NameToExclude1" Xor _ ActiveWorkbook.Names.Item(i).Name = "NameToExclude2" Xor _ ActiveWorkbook.Names.Item(i).Name = "NameToExclude3") Then FindTheColumn = Mid$(ActiveWorkbook.Names.Item(i).RefersTo, 11, 2) If Mid$(FindTheColumn, 2, 1) = "$" Then FindTheColumn = Mid$(FindTheColumn, 1, 1) Else FindTheColumn = Mid$(FindTheColumn, 1, 2) End If DynNameString = "=OFFSET(RawData!$" & FindTheColumn & "$2,0,0,COUNTA(RawData!$" & FindTheColumn & ":$" & FindTheColumn & "),1)" Debug.Print DynNameString 'ActiveWorkbook.Names.Item(i).Name.RefersTo = DynNameString End If Next i End Sub
特别感谢Jean-Francois帮助我。
将RawData更改为sheetname,将NameToExclude更改为不变。 删除最后的评论,使其发生! 但一定要先备份一下!