Кто-нибудь знает, почему в этом подразделе отсутствуют мои данные?

#excel #vba

#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
  

Здесь я публикую скриншоты данных перед использованием макроса:
перед

и после: после

Вот ссылка на мой Google Диск со всеми скриншотами, включая тот, на котором указано, что должен делать этот макрос (с пометкой good). ссылка.

Красный цвет предназначен для данных, которые опущены (столбцы слева) и те, которые должны быть назначены им (в той же строке).

В разделе синего цвета на хорошем скриншоте вы можете увидеть, как это должно быть сделано.

Комментарии:

1. Поскольку мы не знаем, для чего вы собираетесь использовать этот макрос, было бы также полезно, если бы вы могли опубликовать, каким должен был быть ожидаемый результат.

2. Я все еще не понимаю, что это должно делать (или что не так с выводом «после»). Можете ли вы объяснить, чего вы ожидаете от него, и объяснить, почему то, что он делает в данный момент, неправильно. «ate» не очень описывает.

3. Теперь я добавил ссылку на свой диск и пояснения к скриншотам

4.Каждый раз, когда вы записываете данные в vntT , вы увеличиваете их, r за исключением последнего экземпляра в If komz > kom — это намеренно?

5. Да, он переходит к следующему элементу в таблице, вся суть этого макроса заключается в том, что (на мой взгляд) при проверке НЕ напечатанных элементов в таблице (когда все напечатаны) он должен повториться еще раз (так что все напечатанные данные проходят через ifs в макросе) для всех напечатанных элементов