VBA с несколькими скидками и проблемой следующего без для и вставить значение в соответствующую ячейку - PullRequest
1 голос
/ 21 марта 2020

Проблема в том, что у нас есть продвижение на фрукты, травы и овощи. Код VBA необходим в соответствии с несколькими правилами скидок.

  • Цветная капуста, гуава и человек go продаются со скидкой 30%, количество заказа не зависит.

Категория фруктов:

  • Без скидки на количество заказа менее 5 случаев.
  • 10% скидка при количестве заказа от 5 до 15 случаев.
  • 20% скидка для более чем 15 случаев.

Категория травы:

  • Без скидки на количество заказа менее 10 случаев.
  • 5% скидка при количестве заказа от 10 до 15 случаев.
  • 10% скидка для более 15 случаев.

Категория овощей:

  • Капуста: скидка 12% на 20 и более коробок
  • Другие: скидка 12% на 5 и более коробок

Тем не менее, я сталкиваюсь с вопросом «следующий без для» ...... и я не мог видеть, где недостаток ... и во-вторых, могу ли я знать, как вставить соответствующую скидку в столбце D (под в процентах). Любые предложения и помощь приветствуются. Спасибо !!

Sub Task3()
    Dim i As Integer
    Dim FinalRow As Integer
    Dim thisCategory As String, thisProduct As String
    Dim thisQty As Integer
    Dim Sale As Boolean
    Dim discount As Single

    With Sheets("sheet1")
    FinalRow = Cells(Rows.Count, 1).End(xlUp).Row

    Range("D1").Value = "Discount"

    For i = 2 To FinalRow
        thisCategory = Cells(i, 1).Value
        thisProduct = Cells(i, 2).Value
        thisQty = Cells(i, 3).Value

        Select Case thisProduct
            Case "Cauliflower"
                Sale = thisProduct
            Case "Guava"
                Sale = thisProduct
            Case "Mango"
                Sale = thisProduct
        End Select

        If Sale Then
            discount = 0.3
        Else
            If thisCategory = "Fruits" Then
                Select Case thisQty
                    Case Is < 5
                        discount = 0
                    Case 5 To 15
                        discount = 0.1
                    Case Is > 15
                        discount = 0.2
                End Select

            ElseIf thisCategory = "Herbs" Then
                Select Case thisQty
                    Case Is < 10
                        discount = 0
                    Case 10 To 15
                        discount = 0.05
                    Case Is > 15
                        discount = 0.1
                End Select

            ElseIf thisCategory = "Vegetables" Then
                    If thisProduct = "Kale" And thisQty >= 20 Then
                        discount = 0.12
                    ElseIf thisProduct <> "Kale" And thisQty >= 5 Then
                        discount = 0.12
                    End If
        End If
        ' insert discount in column D


         If discount = 0.3 Then
            .Range(.Cells(i, 1), Cells(i, 4)).Interior.Color = vbYellow
         End If
    Next i
    End With

End Sub

1 Ответ

1 голос
/ 21 марта 2020

Я просмотрел ваш код, добавил несколько комментариев, и в двух строках необходимо указать скидку. Я надеюсь, что это работает для вас.

Sub Task3()

    Dim i As Integer
    Dim FinalRow As Integer
    Dim thisCategory As String, thisProduct As String
    Dim thisQty As Integer
    Dim Sale As Boolean
    Dim discount As Single

    With Sheets("sheet1")
        ' use a leading period to identify each item that
        ' VBA should find in Sheets("sheet1") specified with "With"
        ' I marked every added period with *
        FinalRow = .Cells(.Rows.Count, 1).End(xlUp).Row     ' **

        .Range("D1").Value = "Discount"                     ' *

        For i = 2 To FinalRow
            thisCategory = .Cells(i, 1).Value               ' *
            thisProduct = .Cells(i, 2).Value                ' *
            thisQty = .Cells(i, 3).Value                    ' *

            Select Case thisProduct
                Case "Cauliflower"
                    Sale = thisProduct
                Case "Guava"
                    Sale = thisProduct
                Case "Mango"
                    Sale = thisProduct
            End Select

            If Sale Then
                discount = 0.3
            Else
                If thisCategory = "Fruits" Then
                    Select Case thisQty
                        Case Is < 5
                            discount = 0
                        Case 5 To 15
                            discount = 0.1
                        Case Is > 15
                            discount = 0.2
                    End Select

                ElseIf thisCategory = "Herbs" Then
                    Select Case thisQty
                        Case Is < 10
                            discount = 0
                        Case 10 To 15
                            discount = 0.05
                        Case Is > 15
                            discount = 0.1
                    End Select

                ElseIf thisCategory = "Vegetables" Then
                        If thisProduct = "Kale" And thisQty >= 20 Then
                            discount = 0.12
                        ElseIf thisProduct <> "Kale" And thisQty >= 5 Then
                            discount = 0.12
                        End If
            End If
            ' insert discount in column D


            With .Cells(i, 4)
                .Value = discount
                .NumberFormat = "0%"
                If discount = 0.3 Then
                    .Offset(0, -3).Resize(1, 4).Interior.Color = vbYellow   '*
                End If
            End With
        Next i
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...