很长时间以来,我一直在尝试编写此宏,但我仍在不断地与之抗争(实际上是在各个类别中),现在该宏忽略了我的数据。
这是代码(用注释来描述对我来说是什么):
Sub testro()
Const cSheet As String = "Procenty"
Const cRange As String = "A2:D71"
Const cel As Long = 4
Const cCol As Variant = "A"
Dim vntS As Variant
Dim vntT As Variant
Dim i As Long, r As Long
Dim emptyRow As Long
Dim kom As Double, komz As Double, kredyt As Double
Dim roz As Double, komr As Double, komn As Double
Dim dz As Date, dw As Date
vntS = ThisWorkbook.Worksheets(cSheet).Range(cRange).Value
ReDim vntT(1 To 3 * UBound(vntS), 1 To cel + 1)
kredyt = 0
r = 1
For i = 1 To UBound(vntS)
dz = vntS(i, 1)
komz = vntS(i, 2)
dw = vntS(i, 3)
kom = vntS(i, 4)
If komz > kom Then
If CStr(vntT(r, 1)) = "" Then
vntT(r, 1) = dz
vntT(r, 2) = komz 'debt
End If
vntT(r, 3) = dw
vntT(r, 4) = kom 'payment
vntT(r, 5) = " komz>kom"
r = r + 1
komz = komz - kom
vntT(r, 1) = dz
vntT(r, 2) = komz ' Debt
vntT(r, 3) = dw
vntT(r, 4) = kom ' payment
vntT(r, 5) = " .. komz > kom"
ElseIf komz < kom Then
komn = kom - komz
vntT(r, 1) = dz
vntT(r, 2) = komz
vntT(r, 3) = dw
vntT(r, 4) = kom
vntT(r, 5) = " .. A"
r = r + 1
vntT(r, 3) = dw
vntT(r, 4) = komn ' Overpaid
vntT(r, 5) = " .. komz < kom"
r = r + 1
ElseIf komz = kom Then
vntT(r, 1) = dz
vntT(r, 2) = komz ' debt
vntT(r, 3) = dw
vntT(r, 4) = kom ' payment
vntT(r, 5) = " .. komz = kom"
r = r + 1
End If
Next
With ThisWorkbook.Worksheets(cSheet)
emptyRow = .Columns(cCol).Find("*", , xlFormulas, xlWhole, xlByColumns, xlPrevious).Row + 1
.Cells(emptyRow, cCol).Resize(UBound(vntT), UBound(vntT, 2)) = vntT
.Cells(emptyRow, cCol) = kredyt
End With
End Sub
这是我的Google云端硬盘的link,其中包含所有屏幕截图,包括带有此宏应执行的操作(标记为良好)链接的屏幕截图。
红色表示遗漏的数据(左侧列)和应分配给它的数据(在同一行)。
在屏幕截图的蓝色部分中,您可以看到应该怎么做。