【问题标题】:How do I iterate through a range of two columns and select both columns in a row at each step?如何遍历两列的范围并在每个步骤中连续选择两列?
【发布时间】:2014-07-24 11:45:02
【问题描述】:

我正在尝试自动化定义名称的任务。具体来说,我有两列 A 和 B,B 是依赖的:

A          B
Label1     Data1
Label2     Data2
Label3     Data3

我想在定义的范围内选择两列,然后遍历它,用列 A 中的名称定义列 B。我认为 FOR EACH 构造可以工作,但我找不到任何关于 Excel 究竟如何的信息读取 FOR EACH 中的每个项目。它是否将当前行中的两列视为一个单元(这可能是我的理想选择)?它会向下迭代一列然后另一列吗?它会迭代行中的每一列,然后向下移动吗?

最终,我将为 3 或 4 对列执行此操作。它们最终将用于填充用户表单中的标签或选择框。例如,如果您从 ComboCox 中选择“培根”,则依赖于它的标签将填充为“鸡蛋”。如果您选择“燕麦片”,它会填充“葡萄干”。

我想要链接大型列,并认为快速宏会使其更快。

谢谢

到目前为止的代码:

Sub FeatureNumberAssignMk2()
'
' FeatureNumberAssignMk2 Macro
'
' Keyboard Shortcut: Ctrl+Shift+L
'
Dim myCells As Range

Set myCells = Selection
For Each Row In myCells
    ' THIS IS WHERE I AM NOT SURE WHAT IS BEING SELECTED
    Row.CreateNames Top:=False, Left:=True, Bottom:=False, Right:= _
    False
Next
End Sub

【问题讨论】:

    标签: excel for-loop range vba


    【解决方案1】:

    无需循环。如果您选择包含两列的范围,则该命令将使用第一列中的文本为每一行创建一个名称。

    myCells.Row.CreateNames Top:=False, Left:=True, Bottom:=False, Right:=False
    

    【讨论】:

    • +1 - 您甚至可以将其简化为 Selection.CreateNames Left:=True
    • 这非常有效。事实上,宏与我的目的无关。我没有意识到我可以在使用键盘快捷键 (ctrl-shift-F3) 时选择多行并单独定义每一行。感谢您的帮助!
    【解决方案2】:

    ...但我找不到有关 Excel 如何准确读取 FOR EACH 中的每个项目的任何信息...

    供您参考,这是测试For Each 将如何循环的简单方法:

    Dim Cell As Range
    Dim Rng As Range
    
    Set Rng = Range("A1:B5")
    
    For Each Cell In Rng
        Debug.Print Cell.Address
    Next Cell
    

    立即窗口的输出如下:

    $A$1
    $B$1
    $A$2
    $B$2
    $A$3
    $B$3
    $A$4
    $B$4
    $A$5
    $B$5
    

    【讨论】:

    • 酷。我经常这样做,我的前两个问题是关于一个练习项目的工作,以了解一些概念并了解它们是如何工作的。我想即使在我正在使用的其他语言中,我也不经常使用 FOR/EACH 之类的东西。可能有用,我只是不需要它。
    猜你喜欢
    • 1970-01-01
    • 2016-04-30
    • 2022-12-08
    • 2021-12-30
    • 2010-12-12
    相关资源
    最近更新 更多