У меня есть массив (5,6) в электронной таблице, и он может содержать случайные значения от 0 до 15. Я создаю сценарий VBA, который в соответствии с общим средним значением матрицы будет концентрировать или распределять значения в соответствии с к результату общего среднего.
Это для системы инвентаризации магазина одежды. Строки в массиве означают размер (инвентаря, L, M, S, xS, xL, xxL) и столбцов в разных хранилищах.
Private Sub Trasladeichon(concentrado, ref, rBogota, cuenta)
Dim talla As String
Dim cantidad As Integer
tiendas = concentrado
Set posicion = ActiveCell
Set rooty = posicion
profundidad = cuenta
talla = ActiveCell.Offset(0, -1).Value
'rBogota.Select
For p = 0 To profundidad - 1
producto = WorksheetFunction.Sum(rBogota)
For i = 0 To tiendas - 1
cantidad = WorksheetFunction.RoundDown(producto / tiendas, 2)
If ActiveCell.Offset(0, i).Value < cantidad Then
For j = 5 To i Step -1 ' CAMBIAR 5 POR NUMERO DE TIENDAS
If ActiveCell.Offset(0, j).Value > 0 Then
Do While ActiveCell.Offset(0, i).Value < cantidad And ActiveCell.Offset(0, j).Value > 0 And ActiveCell.Offset(0, j) <> ActiveCell.Offset(0, i)
ActiveCell.Offset(0, i).Value = ActiveCell.Offset(0, i).Value + 1
ActiveCell.Offset(0, j).Value = ActiveCell.Offset(0, j).Value - 1
Loop
If ActiveCell.Offset(0, i).Value = cantidad Then
GoTo iloop
End If
End If
Next j
End If
iloop:
Next i
'''''''''''''''''''''''''''''''''''''''
For i = 0 To tiendas - 1
If ActiveCell.Offset(0, i).Value > cantidad Then
For j = i To tiendas - 1
Do While ActiveCell.Offset(0, i).Value > cantidad And ActiveCell.Offset(0, j).Value < cantidad And ActiveCell.Offset(0, j) <> ActiveCell.Offset(0, i)
ActiveCell.Offset(0, i).Value = ActiveCell.Offset(o, i).Value - 1
ActiveCell.Offset(0, j).Value = ActiveCell.Offset(o, j).Value + 1
Loop
Next j
End If
Next i
'''''''''''''''''''''''
ActiveCell.Offset(1, 0).Select
Next p
End Sub
Вот пример с одиночными строками матрицы с разными значениями внутри:
[0] [0] [0] [2] [0] -> [2] [0] [0] [0] [0] Если в матрице мало значений ov, поместите все значения в (0,0)
[0] [0] [1] [2] [0] -> [2] [1] [] [] [] Здесь у нас небольшое количество инвентаря, но мы можем его распределить в двух магазинах, так он раздает в первые магазины слева.
[0] [1] [0] [1] [1] -> Тот же сценарий случая, что и предыдущий
[0] [0] [0] [10] [0] -> [2] [2] [2] [2] [2] достаточно инвентаря для сортировки во все магазины.
[0] [5] [0] [5] [0] -> [2] [2] [2] [2] [2] то же, что и раньше.