VBA创建动态命名范围

时间:2017-12-12 19:38:09

标签: excel excel-vba excel-formula vba

我正在尝试创建以每个范围中左上角单元格命名的命名范围的单元格。这说明我的意思: enter image description here

在这里,我希望有4个命名范围(名称A,名称B,名称C,名称D),因此我可以引用它们。有没有办法让excel查找B列中以“Names”开头的任何单元格,并在它击中以“Names”开头的下一个单元格时切断范围?如果这是不可能的,我道歉,我仍然是新手,并且不确定这是否可行。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:3)

这是一个快速抛出的脚本,提供了如何处理此问题的想法。绝不是很漂亮,但确实显示了步骤。这可以更复杂地编写,即与所有单元格一起工作,而不是在第一个名称实例之后开始(参见范围(“B3”)用于开始,而范围(“B4”)用于开始循环单元格)< / p>

Sub DefineRanges()
    Dim rngStart As Range
    Set rngStart = Range("B3")
    Dim NamedRangeCount As Integer
    NamedRangeCount = 0
    Dim NameRangeName As String
    Dim LastRow As Integer
    For Each cell In Range("B4:B18")
        If LCase(Left(cell.Value, 5)) = "names" Then
            NameRangeName = "Name_" & NamedRangeCount
            ActiveWorkbook.Names.Add Name:=NameRangeName, RefersToLocal:=Range(rngStart.Address & ":D" & cell.Row - 1)
            Set rngStart = Range("B" & cell.Row)
            NamedRangeCount = NamedRangeCount + 1
        End If
        LastRow = cell.Row
    Next
    NameRangeName = "Name_" & NamedRangeCount
    ActiveWorkbook.Names.Add Name:=NameRangeName, RefersToLocal:=Range(rngStart.Address & ":D" & LastRow)
End Sub