如何写 Do Until Cell 值 = 0

How to write Do Until Cell value = 0

提问人:M Muaz 提问时间:3/12/2021 最后编辑:M Muaz 更新时间:3/12/2021 访问量:886

问:

我是 VBA 的新手,我主要根据不同人已经编写的代码构建大部分宏。 但我还没有找到一个这样做的人。

我需要宏不断重复某个任务,直到值 = 0 的单元格 0 来自 COUNTIF 公式。

  1. 所以我在单元格 A2 中有一个文本 ID,
  2. 它将偏移到单元格 B2,输入一个公式(这是一个 COUNTIF 公式)
  3. 然后它将偏移到单元格 C2,输入一个公式(这给了我另一个文本 ID)
  4. 然后它会将 C2 复制到 A3,然后重复步骤 2
  5. 我的目标是继续这样做,直到 B 列中的 COUNTIF 值 = 0

我目前的宏是

Sub macro ()
    Selection.Offset(0, 1).Select
    ActiveCell.FormulaR1C1 = "=COUNTIFS(TASKPRED!C1,RC1,TASKPRED!C10,""Y"")"
    
'Add formula #2 (Type the "Driving successor")
    Selection.Offset(0, 1).Select
    ActiveCell.Formula2R1C1 = "=INDEX(TASKPRED!C[-1],MATCH(RC1&""Y"",TASKPRED!C1&TASKPRED!C10,0),0)"
'Copy to new line
Selection.Copy
    Selection.End(xlToLeft).Select
    Selection.Offset(1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

我试过这个,但没有用

 i = 2
 Do Until Range(i, 2).Value = 0
[MACRO ABOVE HERE]
 i = i + 1
 Loop

谢谢

Excel VBA

评论

0赞 Warcupine 3/12/2021
Cells(i, 2).value范围需要Range("B" & i)
0赞 FunThomas 3/12/2021
@Warcupine:你为什么这么认为?这两个术语是等价的
0赞 Warcupine 3/12/2021
@FunThomas范围不需要吗?如果我尝试,我会得到运行时错误 1004 - 应用程序或对象定义的错误。Range(cells(i, 2), cells(i, 2)).valueRange(i, 2).value
0赞 FunThomas 3/12/2021
.cells(row, col) 是一个范围。而且,如果您愿意,还可以使用列字母:有效Cells(i, "B")
0赞 Warcupine 3/12/2021
@FunThomas我知道,但如果你使用它,它需要是他们拥有的格式或格式,这将出错。Range()cells(), cells()ColRowRange(i, 2)

答:

0赞 VBasic2008 3/12/2021 #1

在做...圈

  • 如果公式正确,这应该可以。
  • 这感觉不对,应该有更好的方法。
  • 未经测试。

守则

Option Explicit

Sub pasteFormulas(cel As Range)
    cel.Offset(, 1).FormulaR1C1 _
        = "=COUNTIFS(TASKPRED!C1,RC1,TASKPRED!C10,""Y"")"
    cel.Offset(, 2).Formula2R1C1 _
        = "=INDEX(TASKPRED!C[-1],MATCH(RC1&""Y"",TASKPRED!C1&TASKPRED!C10,0),0)"
    cel.Offset(1).Value = cel.Offset(, 2).Value
End Sub

Sub doPasteFormulas()
    Dim i As Long: i = 1
    Dim cValue As Variant
    Do
        i = i + 1
        pasteFormulas Cells(i, 1)
        cValue = Cells(i, 2).Value
    Loop Until cValue = 0
End Sub

评论

0赞 M Muaz 3/12/2021
谢谢你,它给了我一个错误,因为“pasteFormulas”尚未声明
0赞 VBasic2008 3/12/2021
不知道这意味着什么。确切的错误号和描述是什么,它发生在哪个过程的哪一行?
0赞 M Muaz 3/12/2021
哦,对不起,我又试了一次,它工作正常,尽管它在 cellvalue=0 后继续了几个单元格,产生了“#N/A”值。更大的问题是我无法将这个宏集成到我的主长宏的末尾,因为那里有一对“Sub”和“End Sub”,当我试图删除那些“Sub”和“End Sub”时,宏停止了,没有到达你的位