首页 > 解决方案 > 如何写直到单元格值 = 0

问题描述

我是 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

谢谢

标签: excelvba

解决方案


在 Do...Loop 中调用 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

推荐阅读