我是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
感谢
在Do…循环中调用Sub
- 如果公式是正确的,应该这样做
- 这感觉不对,应该有更好的方法
- 未经测试
代码
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