|
楼主 |
发表于 2013-9-14 14:26
|
显示全部楼层
youfang 发表于 2013-9-14 06:16
sub test1()
……
call test2
Type MYST
tag As Boolean
开始 As Double
结束 As Double
名称 As String
d01 As Double
d02 As Double
d11 As Double
d12 As Double
d21 As Double
d22 As Double
d31 As Double
d32 As Double
d41 As Double
d42 As Double
d1 As Double
d2 As Double
End Type
Sub test2()
Dim le
Dim rng, i, i1, t, diff
Dim Data(0 To 10000) As MYST
'第一步 生成初始数据
'见上面的test
'第二步 数据读入内存
Set rng = Range([F4], [h1000000].End(3))
Data(0).d01 = 70
Data(0).d02 = 100
For i = 1 To rng.Rows.Count
Data(i).开始 = rng.Cells(i, 1)
Data(i).结束 = rng.Cells(i, 2)
Data(i).名称 = rng.Cells(i, 3)
Next
'第三步 对数据进行处理
For i = 1 To rng.Rows.Count
diff = Data(i).结束 - Data(i).开始
Data(i).d01 = IIf((Data(i).名称 = "高填") * (diff > 70), diff, 0)
Data(i).d02 = IIf((Data(i).名称 = "其他") * (diff < 100), diff, 0)
Data(i).d11 = IIf((Data(i).名称 = "高填") * (diff > 70), Data(i).开始, 0)
Data(i).d12 = IIf((Data(i).名称 = "高填") * (diff > 70), Data(i).结束, 0)
Data(i).d21 = IIf(Data(i).名称 = "高填" And diff > 30 And diff < 70, (Data(i).开始 + Data(i).结束) / 2 - 35, 0)
Data(i).d22 = IIf(Data(i).名称 = "高填" And diff > 30 And diff < 70, (Data(i).开始 + Data(i).结束) / 2 + 35, 0)
Next
For i = 1 To rng.Rows.Count
Data(i).d31 = IIf(Data(i - 1).d01 * Data(i + 1).d01 * Data(i).d02 > 0, Data(i - 1).开始, 0)
Data(i).d32 = IIf(Data(i - 1).d01 * Data(i + 1).d01 * Data(i).d02 > 0, Data(i + 1).结束, 0)
Next
For i = 1 To rng.Rows.Count
Data(i).d41 = IIf((Data(i).d02 <> 0) * (Data(i).d02 < 100) * (Data(i - 1).d11 + Data(i - 1).d21 + Data(i - 1).d31) * (Data(i + 1).d11 + Data(i + 1).d21 + Data(i + 1).d31), Data(i).开始, 0)
Data(i).d42 = IIf((Data(i).d02 <> 0) * (Data(i).d02 < 100) * (Data(i - 1).d11 + Data(i - 1).d21 + Data(i - 1).d31) * (Data(i + 1).d11 + Data(i + 1).d21 + Data(i + 1).d31), Data(i).结束, 0)
Data(i).d1 = Data(i).d11 + Data(i).d21 + Data(i).d31 + Data(i).d41
Data(i).d2 = Data(i).d12 + Data(i).d22 + Data(i).d32 + Data(i).d42
Data(i).tag = Data(i).d1 + Data(i).d2 > 0
Next
'第四步 输出数据
[I4:K1000000].ClearContents
t = 4
For i = 1 To rng.Rows.Count
If Data(i).tag = True Then
Cells(t, "i") = Data(i).开始
Cells(t, "j") = Data(i).结束
Cells(t, "k") = Data(i).名称
t = t + 1
End If
Next
End Sub
能帮我解释一下这段语句吗?
|
|