【问题标题】:Run a For Loop only if current row is odd仅当当前行为奇数时才运行 For 循环
【发布时间】:2019-10-26 12:08:15
【问题描述】:

我正在尝试运行一个循环来创建一些数据,如图所示。我正在尝试运行这个简单的循环,但只希望它运行奇数行或偶数行。我有一些想法如何做到这一点,但不知道如何将其转化为代码。

例如,我不确定 Excel VBA 是否可以处理以下内容:如果单元格值 = S AND Row is Odd then...

另一件事我认为也许“范围”可以定义为奇数或偶数值,但没有运气。这可能吗?

Dim typecheck As Range

Set typecheck = Range("B1:B60") 'set the range itself to odd/even? or no range at all? just individually?

For Each cell In typecheck

    If cell.Value = "S" Then 'and odd row?

    cell.Offset(0, 1).Value = "_status"

    End If

Next

预期结果是,循环将遍历第 1-60 行,并且仅当范围内的单元格的值为 S 并且该行是奇数行时才会产生结果。

【问题讨论】:

标签: excel vba for-loop excel-formula


【解决方案1】:

这将起作用:Mod 函数为您提供余数。如下使用它。

Dim typecheck As Range

Set typecheck = Range("B1:B60") 

For Each cell In typecheck

    If cell.Value = "S" And Not cell.Row Mod 2 = 0 Then 'For Odd Row

    cell.Offset(0, 1).Value = "_status"

    End If

Next

它只会在奇数行上通过 if 条件。对于偶数行,只需从 if 条件中删除 Not

我们检查行号除以 2 后的余数,如果 0 则为偶数行,否则为奇数行。

【讨论】:

  • 谢谢!还想出了另一种方法: If (cell.Row / 2#) = Int(cell.Row / 2#) And cell.Value = "S" Then But yours are more tidy :)
  • 使用 Mod 会更短更简洁。
  • 理想情况下,您应该需要两个Ifs:第一个用于检查奇数,第二个用于匹配字符串。
  • @JohnyL ... 不太明白您的意思?当我们可以在同一行中做到这一点时,为什么要放两个 if 条件?
  • 因为 VBA 中的 And 在 VBA 中不是短路(相对于 VB.NET 中的 AndAlso)。这意味着第一个条件是否为假无关紧要 - 无论如何都会检查第二个条件。通过分离这些检查,您可以消除不必要的检查。
猜你喜欢
  • 1970-01-01
  • 2017-06-08
  • 2020-05-13
  • 2022-08-17
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
相关资源
最近更新 更多