我想在Excel中使用for循环脚本创建命名范围。
我的目标是为从B列到D列的每一行创建范围,这些列以列AEg命名:范围'alfae'包含B1:D1,范围'alfag'包含B2:D2,依此类推。
这是我创建的基本脚本:
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”;等等)?
提前谢谢。
答案 0 :(得分:4)
使用 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:强>
要保存一些输入,您可以替换:
Range(r.Offset(, 1), r.Offset(, 3)).Name = r.Value
使用:
r.Offset(, 1).Resize(, 3).Name = r.Value
答案 1 :(得分:2)
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
答案 2 :(得分:2)
这样的事情就足够了:
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()
用作条件,因为命名范围不能以数字开头。
答案 3 :(得分:2)
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
答案 4 :(得分:2)
你真的不需要循环:
Sub ExampleMacro()
Dim r As Range
Set r = Application.Intersect(Sheet4.Range("A1").CurrentRegion, Sheet4.Range("A:D"))
r.CreateNames Left:=True
End Sub
答案 5 :(得分:1)
根据您要从中调用公式的位置,您可以使用在将数据转换为Excel表(也称为ListObject)时获得的内置范围名称来实现此目的。使用Ctrl + T键盘快捷键,或从功能区中选择“插入>表格”。多列引用语法如下: 表3 = [@ [列2]:[Column4]] ...其中[Column2]和[Column4]是列的名称。