岩溶水用水量包不住調配代碼
'算法
'第一步:將2-8項的負差值都加到第1項;
'第二步:將第1項的負差值往後分配出去;
'第三步:將差值加回到各項;
Private Sub btnKarstWaterDiffDeal_Click()
Dim Y As String
Dim S As Integer
Y = "2013年" '年份及Sheet頁名稱
S = 2 '列號偏移量
For R = 6 To 135
Call Collect(R, 8, S)
Call Distribute(R, 1, S)
Call ReAllocate(Y, R, S)
Next
MsgBox (Y + "岩溶水調配完成")
End Sub
' 將2-8項的負差值都加到第1項
' R 行號
' N 列號
' S 列號偏移量
Private Sub Collect(R, N, S)
Dim D As Double
While N > 1
D = Cells(R, N + S)
If D < 0 Then
Cells(R, 1 + S) = D + Cells(R, 1 + S)
Cells(R, N + S) = 0
End If
N = N - 1
Wend
End Sub
'將第1項的負值往後分配出去
' R 行號
' N 列號
' S 列號偏移量
Private Sub Distribute(R, N, S)
Dim D As Double
While N < 8
D = Cells(R, N + S)
If D < 0 Then
Cells(R, N + S + 1) = Cells(R, N + S + 1) + D
Cells(R, N + S) = 0
Else
Exit Sub
End If
N = N + 1
Wend
End Sub
'將差值加回到各項
Private Sub ReAllocate(SheetName, R, S)
Dim D As Double
Dim A(7) As Integer
A(0) = 6 '城鎮生活的岩溶水用水量
A(1) = 13 '農村生活
A(2) = 24 '第三產業
A(3) = 20 '建築業
A(4) = 2 '工業
A(5) = 9 '農業灌溉
A(6) = 16 '林牧漁業
A(7) = 27 '生態
For i = 0 To 7
'調整後的差值
D = Cells(R, i + 1 + S)
' 當調整後的差值和原差值不等時,就認爲該項岩溶水調整過,這時,才需要將調整後的差值加回去
If D <> Worksheets(SheetName).Cells(R, A(i) + 1 + S) Then
'岩溶水 = 用水量 - 新的差值
Worksheets(SheetName).Cells(R, A(i) + S) = Worksheets(SheetName).Cells(R, A(i) - 1 + S) - D
'賦回新差值,原表中有計算差值的公式
'Worksheets(SheetName).Cells(R, A(i) + 1 + S) = D
End If
Next
End Sub
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.