【问题标题】:VBA Loop through range and replace value in adjacent row cellVBA循环遍历范围并替换相邻行单元格中的值
【发布时间】:2015-03-05 15:07:45
【问题描述】:

我有一个关于某些代码似乎无法正常工作的问题。 我已经设置了一些代码,我认为这是通过范围的基本循环并替换相邻的行单元格,虽然没有发生错误,但我没有得到想要的结果。

如果有人知道得更好,他们可以查看下面的代码并给我一些建议/解决方法以使事情顺利进行:

For Each cCell In Range("C16,C1000")
    'perform action if cell value = "-"
    If ActiveCell.Value = "-" Then
    'move to adjacent cell
    ActiveCell.Offset(0, 1).Select
    'change the cell value to "-"
    Selection.cell.Value = "-"
Else
    ActiveCell.Offset(0, 1).Select
End If
Next cCell

【问题讨论】:

  • 您将选择向右移动一个以更改值并且永远不会将您的选择移回,因此您从 C 列开始,一旦遇到“-”,您就会进入D 列。如下面的答案所述,您应避免使用 select 并仅参考 cCell。

标签: vba loops offset


【解决方案1】:

您应该只使用cCell.Value 而不是使用ActiveCell.Value

另外,避免使用Select。这是邪恶的。

例如:

cCell.Offset(0,1).Value = "-"

【讨论】:

    【解决方案2】:

    是的,避免使用选择。但是,如果必须这样做,则需要这样做。您必须在每次迭代中选择 cCell,以便 ActiveCell 将其拾取。

    尽管您不需要也不应该使用 Select,但您仍然可以在不先选择 cCell 的情况下更新它。正如 joseph4tw 所述。

    For Each cCell In Range("C16,C1000")
        'perform action if cell value = "-"
        cCell.select
    
        If ActiveCell.Value = "-" Then
          'edit adjacent cell
          ActiveCell.Offset(0, 1).Value = "-"    
        End If
    Next cCell
    

    【讨论】:

      猜你喜欢
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      相关资源
      最近更新 更多