Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何在Excel中使用for循环创建命名范围?_Vba_Excel - Fatal编程技术网

Vba 如何在Excel中使用for循环创建命名范围?

Vba 如何在Excel中使用for循环创建命名范围?,vba,excel,Vba,Excel,我想在Excel中使用for循环脚本创建命名范围 我的目标是为从B到D列的每一行创建范围,这些列以A列命名。例如:范围'alfae'包含B1:D1,范围'alfag'包含B2:D2,等等 以下是我创建的基本脚本: Sub ExampleMacro() ' ' ExampleMacro Macro ' ' Range("B1:D1").Select ActiveWorkbook.Names.Add Name:="alfae", RefersToR1C1:="=Mun

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

我的目标是为从B到D列的每一行创建范围,这些列以A列命名。例如:范围'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;等等


提前谢谢。

像这样的东西就足够了:

 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 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中有一些值。您可以更进一步,更新代码。左侧用作条件,因为命名范围不能以数字开头。

对于a列中建议的名称,请尝试:

编辑1:

要保存某些键入,可以替换:

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


您实际上不需要循环:

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键盘快捷键,或从功能区中选择“插入”>“表格”。多列引用语法如下所示: =表3[@[Column2]:[Column4]]
…其中,[Column2]和[Column4]是列的名称。

如果不一定要使用VBA完成此操作,则可以使用公式菜单中的Ctrl+Shift+F3在整个范围内执行此操作。或者查看高级模式。@Peh-有点离题-为了找到Ctrl+Shift+F3作为选择名称的快捷方式,您在做什么?@vityta将鼠标悬停在功能区“公式”菜单中的菜单按钮上,会显示一个工具提示Excel 2016不知道这与我使用的德语Office本地化版本是否不同。@Peh-2010年确实如此没有出现。但它仍然有效!不幸的是,我也使用德语Office,通过特殊单元格2使用常量单元格,并在所有单元格中循环是一种有趣的方法@Vityata它在这种情况下很有用。是的,它是-保存一些行,用于定义最后一行和检查空值。我甚至已经开始在这里使用它:-
r.Offset(, 1).Resize(, 3).Name = r.Value
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