有人知道为什么这会忽略我的数据吗?

时间:2019-03-19 19:55:25

标签: excel vba

很长时间以来,我一直在尝试编写此宏,但我仍在不断地与之抗争(实际上是在各个类别中),现在该宏忽略了我的数据。

这是代码(用注释来描述对我来说是什么):

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

在这里,我在使用宏之前发布了数据的屏幕截图: before

及之后: after

这是我的Google云端硬盘的link,其中包含所有屏幕截图,包括带有此宏应执行的操作(标记为良好)链接的屏幕截图。

红色表示遗漏的数据(左侧列)和应分配给它的数据(在同一行)。

在屏幕截图的蓝色部分中,您可以看到应该怎么做。

0 个答案:

没有答案