Есть ли способ для VBA распределять значения равномерно? - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть массив (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] то же, что и раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...