如何在Excel中使用for循环创build命名区域?

我想在Excel中使用循环脚本创build命名范围。

示例数据集

我的目标是创build从B到D列的每一行的范围,它们以列AEg命名:范围'alfae'包含B1:D1,范围'alfag'包含B2:D2等等。

这是我创build的基本脚本:

Sub ExampleMacro() ' ' ExampleMacro Macro ' ' Range("B1:D1").Select ActiveWorkbook.Names.Add Name:="alfae", RefersToR1C1:="=Munka1!R1C2:R1C4" End Sub 

我的问题是:如何循环遍历列A中的每一行? 我怎样才能命名一个单元格的值的范围(例如A1:D1 =“alfae”; A2:D2 =“alfag”等)?

先谢谢你。

使用列A中提出的名称,请尝试:

 Sub WhatsInAName() For Each r In Columns(1).SpecialCells(2) Range(r.Offset(, 1), r.Offset(, 3)).Name = r.Value Next r End Sub 

编辑#1:

为了节省一些打字,你可以replace:

 Range(r.Offset(, 1), r.Offset(, 3)).Name = r.Value 

有:

 r.Offset(, 1).Resize(, 3).Name = r.Value 

像这样的东西就足够了:

 Sub TestMe() Dim myRange As Range Dim myRow As Range Set myRange = Range("A1:D4") For Each myRow In myRange.Rows If Not IsNumeric(Left, Cells(myRow.Row, 1)) Then ActiveWorkbook.Names.Add Name:=Cells(myRow.Row, 1), _ RefersToR1C1:=Range(myRange(myRow.Row, 2), myRange(myRow.Row, myRow.Columns - 1)) End If Next myRow End Sub 

只要确保在A1:A4有一些值。 您可以进一步更新代码。 Left()用作条件,因为命名范围不能以数字开始。

  sub Example() Dim r as range set r = range("A1") Do ActiveWorkbook.Names.Add Name:=r.text, RefersToR1C1:="=Munka1!R" & r.row & "C2:R" & r.row & "C4" set r = r.offset(1.0) Loop until r = "" End SUb 
 Sub MakeNamedRanges() startrow = 1 endrow = Cells(Rows.Count, "A").End(xlUp).Row For r = startrow To endrow Range(Cells(r, 2), Cells(r, 4)).Select rangename = Cells(r, 1) ActiveWorkbook.Names.Add Name:=rangename, RefersToR1C1:="=Munka1!R" & r & "C2:R" & r & "C4" Next r End Sub 

你并不需要循环:

 Sub ExampleMacro() Dim r As Range Set r = Application.Intersect(Sheet4.Range("A1").CurrentRegion, Sheet4.Range("A:D")) r.CreateNames Left:=True End Sub 

根据你想从哪里调用你的公式,你可以用你在将数据转换成Excel表格(又名ListObject)时得到的内置范围名称来达到这个目的。 使用Ctrl + T键盘快捷键,或从function区中select“插入”>“表格”。 多列引用语法如下所示:= Table3 [@ [Column2]:[Column4]] …其中[Column2]和[Column4]是列的名称。