excel函数,求s列第一个2对应e列的值减去前面s列第一个1对应e列值的差

来源:百度知道 编辑:UC知道 时间:2024/05/26 04:57:24
E — S — 结果
5 — 0 — 0
3 — 2 — 0
5 — 0 — 0
2 — 1 — 0
4 — 0 — 0
6 — 2 — 4【6-2=4/2=2即200%】
4 — 0 — 0
7 — 2 — 0
5 — 0 — 0
7 — 1 — 0
6 — 0 — 0
3 — 1 — 0
5 — 0 — 0
6 — 0 — 0
9 — 2 — 4【9-7=2/7=0.286即28.6%】
9 — 2 — 0
7 — 2 — 0
当s值为1时买入,当s值为2时卖出。买卖的价格在e列,
s列从前面的最后一个2到后面的第一个2为一个周期。每个周期之间可能会有多个1,只有一个1或者没有1。之间没有1的我们就不要去考虑它了。当s列出现第一个1时就买入(出现多次1时只考虑第一个1),价格在e列,当s列出现第一个2时就卖出(出现多次2时只考虑第一个2),价格在e列。
求s列第一个2对应e列的值减去前面s列第一个1对应e列值的差。就是说卖出价格(成本)减去买入价格(成本)

=IF(S42<>2,IF(S43=2,(E43-LOOKUP(1,0/(S$30:S42=2),E$31:E43))/LOOKUP(1,0/(S$30:S42=2),E$31:E43),""),"")

Alt+F11打开VBA编辑器,新建一个宏,代码如下,使用时调用宏即可
Sub Try()
Dim c As Range, k As Integer, i As Integer
k = 2
For i = 2 To [a65536].End(xlUp).Row
If Cells(i, 2).Value = 2 Then
Set c = Range(Cells(k, 2), Cells(i, 2)).Find(1)
If Not c Is Nothing Then
irow = c.Row
Cells(i, 3) = Cells(i, 1) - Cells(irow, 1)
End If
k = i
End If
Next
End Sub

dfghjkl;

wrgerg

f