【问题标题】:Copying values from a previous iteration of For loop in VBA从 VBA 中 For 循环的前一次迭代中复制值
【发布时间】:2020-09-07 13:49:09
【问题描述】:

希望这个问题以前没有被问过或者太愚蠢了。

我正在尝试做我认为相对简单的 VBA 任务,遍历一个矩阵并根据可以在其他列中找到哪些值来填充一列。如果不满足特定条件,我想复制上一行的值。

这是我认为可行的:

For i = 1 To n
   If a(3, i) = 1 Then
      a(5, i) = 1
   ElseIf a(2, i) = 9 Then
      a(5, i) = 0
   Else
      a(5, i) = a(5, i - 1)
   End If
Next i

但是,尽管 0 条件没有得到满足,但 1 不会延续,并且 1 之后的单元格变为 0。有什么建议吗?

编辑: 这是它的一部分没有做我想要的,在最后两行中,第二个条件没有完成,但第五列仍然为 0。我希望宏从上面的单元格复制 1 直到第二个条件满足。

matrix

【问题讨论】:

  • 能否请您举例说明您的矩阵数据(之前)和您想要的矩阵数据结果(之后)?
  • 您告诉您的宏检查第 3 行和第 i 列是否等于 1,然后第 5 行和第 i 列等于 1。如果第 2 行和第 i 列等于 9,则第 5 行和列i 等于0。否则.. 第5 行列i 等于第5 行,列i - 1。对于 excel 及其数组 a(x, y) 表示 x = rowy = column
  • 我在原帖中贴了一个矩阵的sn-p,希望你明白我的意思。谢谢达米安,我不知道,但如果我没有遗漏一些不应该影响发布代码功能的东西,除非我遗漏了什么。
  • @erikdansle19 您正在循环矩阵中的所有列,一遍又一遍地更改相同的“单元格”,因此您需要更改代码以遍历所有行。

标签: vba for-loop


【解决方案1】:

试试这个:

For i = 1 To n
   If a(i, 3) = 1 Then 'if row i column 3
      a(i, 5) = 1
   ElseIf a(i, 2) = 9 Then 'elseif row i column 2
      a(i, 5) = 0
   Else 'else which will only trigger if none of the ones before trigger
      a(i, 5) = a(i - 1, 5)
   End If
Next i

【讨论】:

  • 谢谢。我更改了我的代码以正确输入行和列,但遗憾的是它并没有改变结果,由于某种原因它仍然没有从上面的行中复制值。
  • @erikdansle19 它只会复制 IF 列 3 1 和列 9 上方的行中的值。如果其中之一为真,则永远不会复制上方行中的值。在您的矩阵中,所有行在第 3 列中都有一个 1。因此它永远不会跳转到 Else,将在第一个 If 处停止。检查If 的工作原理。
  • 不是在最后两行,这让我很困惑,没有满足任何条件,但我仍然在第 5 列得到 0:s。
  • @erikdansle19 然后您可以尝试逐步调试并检查显示的值...这是唯一的方法。
猜你喜欢
  • 1970-01-01
  • 2010-12-28
  • 2021-04-27
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多