VBA向上循环一个单元格,直到单元格不等于“”,单元格包含两个中频函数

我对VBA是全新的,我自己也在学习。 这是问题:

在这里input图像说明

所以对于列E如果B =“S”那么E =“”// null

如果B =“F”,那么E =(反向秩x 先前调整秩+故障no + 1)/(反向秩+ 1)

或在公式excel格式

E5 =((D5 * E4)+($ K $ 1 + 1))/(D5 + 1)

所以问题在于以前调整的排名在公式中。 说,要得到E5的价值,它需要E4的价值,但如果E4 =“”,所以它必须向上一个单元格。 如果一个单元向上也是=“”,则它必须再次向上一个单元,直到不等于“>”“。

问题是我不知道什么function是正确的使用。 我认为这将是IF和LOOP,但我不明白如何写条件。 就像我说的,我是全新的,时间的限制让我焦虑不安。 另外,如果你注意到,列E有两个IF函数我想? 一个是E依赖于B列。

如果范围(“B2:B”&lastRow)=“S”或“F”,一个是E =“”或“>”

我如何融入?

我认为你可以做到这一点,而不使用VBA。 您可以使用以下内容来获取列E中以前的非空值:

E5=INDEX($E:$E,MAX(ROW($E$1:$E4)*(LEN($E$1:$E4)>0))) 

此公式在单元格E5上方的列E(即E1:E4)中查找,并返回具有最大行值(也不是空白(长度> 0))的单元格。

从那里,你的整个公式变成:

 E5=IF($B5="S","",IF($B5="F",($D5*INDEX($E:$E,MAX(ROW($E$1:$E4)*(LEN($E$1:$E4)>0)))+($K$1+1))/($D5+1))) 

请注意,这些是数组公式,因此必须使用Ctrl + Shift + Enter进行validation。 而且,E列中的最高非空白值必须手动input或使用不同的公式input。

  1. 当您遇到B列中的第一个“F”时,E列中的第一个值是多less? 我的意思是,E栏没有什么是“以前的调整排名”。 在这种情况下,我只是把它设置为0。
  2. 什么是“失败”?

这是我的解决scheme,我把“失败的次数”设置为零。

 Sub test() Dim i, j As Integer Dim previous As Single Dim NoOfFailure As Single For i = 2 To Cells.CurrentRegion.Rows.Count If Cells(i, 2).Value = "S" Then Cells(i, 5).Value = "" ElseIf Cells(i, 2).Value = "F" Then previous = 0 NoOfFailure = 0 For j = i To 2 Step -1 If Cells(j, 5).Value <> "" Then previous = Cells(j, 5).Value Exit For End If Next Cells(i, 5).Value = (Cells(i, 4).Value * previous + NoOfFailure + 1) / (Cells(i, 4).Value + 1) End If Next End Sub