Загрузка данных


' =====================================================
' ПРИМЕР 1. Функция СКИДКА_СЛОЖНАЯ
' =====================================================
Function СКИДКА_СЛОЖНАЯ(x As Double) As Double
    Const const1 As Double = 100
    Const const2 As Double = 150
    
    If x <= 1000 Then
        СКИДКА_СЛОЖНАЯ = 0
    ElseIf x <= 2000 Then
        СКИДКА_СЛОЖНАЯ = (x - 1000) * 0.1
    ElseIf x <= 3000 Then
        СКИДКА_СЛОЖНАЯ = (x - 2000) * 0.15 + const1
    Else
        СКИДКА_СЛОЖНАЯ = (x - 3000) * 0.2 + const2 + const1
    End If
End Function

' =====================================================
' ПРИМЕР 2. Функция Discont2 (скидка по покупателю)
' =====================================================
Function Discont2(Покупатель As String, ВсеПокупатели As Range, СуммыРеализации As Range) As Double
    Dim N As Integer
    Dim i As Integer
    Dim s As Double
    Dim k As Integer
    
    N = ВсеПокупатели.Rows.Count
    s = 0
    k = 0
    
    For i = 1 To N
        If ВсеПокупатели(i, 1).Value = Покупатель Then
            k = k + 1
            s = s + СуммыРеализации(i, 1).Value
        End If
    Next i
    
    If s >= 10000 Then
        Discont2 = 3
    ElseIf s >= 5000 Then
        Discont2 = 2
    ElseIf k > 3 Then
        Discont2 = 1
    Else
        Discont2 = 0
    End If
End Function

' =====================================================
' ПРИМЕР 3. Кнопка "Расчёт сумм" (сумма выделенного диапазона)
' =====================================================
Sub Расчет_сумм_Щелчок()
    Dim cell As Range
    Dim summa As Double
    summa = 0
    
    For Each cell In Selection
        If IsNumeric(cell.Value) Then
            summa = summa + cell.Value
        End If
    Next cell
    
    MsgBox "Сумма выделенных чисел: " & summa
End Sub

' =====================================================
' ПРИМЕР 4. Кнопка "Расчет" (итоги по таблице товаров)
' =====================================================
Sub Расчет()
    Dim lastRow As Long
    Dim i As Long
    
    ' Определяем последнюю заполненную строку в столбце A
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    ' Если данных нет — выходим
    If lastRow < 2 Then
        MsgBox "Нет данных для расчёта"
        Exit Sub
    End If
    
    ' Итоговая строка
    Cells(lastRow + 1, 1).Value = "ИТОГО"
    Cells(lastRow + 1, 2).Formula = "=SUM(B2:B" & lastRow & ")"
    Cells(lastRow + 1, 3).Formula = "=SUM(C2:C" & lastRow & ")"
    
    ' Отклонение (факт - прогноз)
    Cells(lastRow + 1, 4).Formula = "=C" & lastRow + 1 & "-B" & lastRow + 1
    
    ' Процент выполнения плана
    Cells(lastRow + 1, 5).Formula = "=C" & lastRow + 1 & "/B" & lastRow + 1
    
    ' Удельный вес факта по каждой строке
    For i = 2 To lastRow
        Cells(i, 6).Formula = "=C" & i & "/C$" & lastRow + 1
    Next i
    
    ' Форматируем проценты
    Range(Cells(2, 6), Cells(lastRow + 1, 6)).NumberFormat = "0.00%"
    Range(Cells(2, 5), Cells(lastRow + 1, 5)).NumberFormat = "0.00%"
    
    MsgBox "Расчёт завершён!"
End Sub