提问人:M Muaz 提问时间:3/12/2021 最后编辑:M Muaz 更新时间:3/12/2021 访问量:886
如何写 Do Until Cell 值 = 0
How to write Do Until Cell value = 0
问:
我是 VBA 的新手,我主要根据不同人已经编写的代码构建大部分宏。 但我还没有找到一个这样做的人。
我需要宏不断重复某个任务,直到值 = 0 的单元格 0 来自 COUNTIF 公式。
- 所以我在单元格 A2 中有一个文本 ID,
- 它将偏移到单元格 B2,输入一个公式(这是一个 COUNTIF 公式)
- 然后它将偏移到单元格 C2,输入一个公式(这给了我另一个文本 ID)
- 然后它会将 C2 复制到 A3,然后重复步骤 2
- 我的目标是继续这样做,直到 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
谢谢
答:
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”时,宏停止了,没有到达你的位
评论
Cells(i, 2).value
范围需要Range("B" & i)
Range(cells(i, 2), cells(i, 2)).value
Range(i, 2).value
.cells(row, col)
是一个范围。而且,如果您愿意,还可以使用列字母:有效Cells(i, "B")
Range()
cells(), cells()
ColRow
Range(i, 2)