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