Задача 25
Открыть книгу Excel "Торговый дом" на рабочем листе с именем "Подведение итогов". На рабочем листе с помощью программного кода процедуры ProdSales создать список, состоящий из трех полей: названия полей "Код продукта", "Количество продаж” и "Объем продаж" расположить в ячейках ЕЗ и F3 и G3 соответственно. Количество записей в этом списке будет определяться переменной NFound. Написать программный код процедуры формирования записей списка на рабочем листе элементами уже сформированных массивов ProdCodes(Nfound), Quantity(Nfound), Dollars (Nfound). Пояснения для составления процедуры:
- в начале программного кода выполнить описание переменной Nfound как целой, и массивов размера NFound как первых двух целых и третьего денежного;
- затем занести элементы массивов в столбцы с использованием цикла
For и управляющей структуры With - End With;
- выполнить сортировку списка по объему продаж в порядке убывания, в сортировке заголовки полей не участвуют;
- с помощью функции MsgBox вывести количество записей в списке.
Option Explicit
Option Base 1
Sub ProdSales()
Dim Nsales As Integer, ProdCodesData() As Integer, ProdCodesFound() As Integer, Quantity() As
Integer, DoIIarsData() As Single, DollarsTotal() As Single, i As Integer, j As Integer, NFound As
Integer, NewProduct As Boolean
With Active Workbook. Worksheets("Topговые операции").Range("E3")
Range(.Offset(1. 0), .Offset(0, 2).End(xIDown)).ClearContents
End With
With Active Workbook. Worksheets("Topговые операции ").Range("A3")
Nsales = Range(.Offset(1, 0), .End(xlDown)).Rows.Count
ReDim ProdCodesData(Nsales)
ReDim DollarsData(Nsales)
For i = 1 To Nsales
ProdCodesData(i) = .Offset(i, 0)
DollarsData(i) = .Offset(i, 2)
Next i
End With
NFound = 0
For i = 1 To Nsales
NewProduct = True
If NFound > 0 Then
For j = 1 To NFound
If ProdCodesData(i) = ProdCodesFound(j) Then
NewProduct = False
Quantity(j) = Quantity(j) + 1
DollarsTotal(j) = DollarsTotal(j) + DollarsData(j)
Exit For
End If
Nextj
End If
If NewProduct Then
NFound = NFound + 1
ReDim Preserve ProdCodesFound(NFound)
ReDim Preserve Quantity(NFound)
ReDim Preserve DollarsTotal(NFound)
ProdCodesFound(NF ound) = ProdCodesData(i)
Quantity(NFound) = 1
DollarsTotal(NFound) = DollarsData(i)
End If
Next i
Forj = 1 To NFound
With Range("E3")
.Offset(j, 0) = ProdCodesFound()
.Offset(j, 1) = Quantity(j)
.Offset(j, 2) = DollarsTotal()
End With
Nextj
Range("E4").Sort Key1 :=Range("G4"), Order1:=xlDescending, Header:=xlYes
MssBox "В базе данных проданных товаров найдено " & NFound & " наименований"
End Sub