У меня есть эта проблема: Если у кого-то есть пять рабочих мест и есть 50 сотрудников, занятых неполный рабочий день (1 - 50). Каковы все возможные комбинации, когда каждый сотрудник из 50 человек может одновременно испытать 5 рабочих мест / ролей.
Мне нужно показать все возможности в электронной таблице.
I Я сделал этот код VBA ниже и рассчитал 4176 возможностей, но я думаю, что результат должен быть намного больше, потому что комбинация (50,5) = 2118760.
Это правильно?
Sub Possibilidades()
'Criar as variaveis referentes aos postos de trabalho e aos empregados
Dim jp, emp, totalemp, contjp, contemp, aux, auxemp As Integer
totalemp = Range("B1").Value
jp = Range("B2").Value
contemp = 1
'Posiciona célula para imprimir possibilidades
Range("B5").Activate
'Laço para criar blocos de 5 empregados
For emp = 1 To totalemp - 4
'Laço para atribuir posto de trabalho a cada funcionário
For contjp = 1 To jp
ActiveCell.FormulaR1C1 = "=""Emp""&" & contemp
contemp = contemp + 1
ActiveCell.Offset(0, 1).Activate
Next contjp
contemp = contemp - 4
ActiveCell.Offset(1, -jp).Activate
Next emp
'Separação de blocos de comando
'ActiveCell.Offset(1, 0).Activate
'Trava em 1 funcionário e em seguida mover blocos de 4 funcionarios
For emp = 1 To totalemp - 5
contemp = emp + 2
'Criar bloco de 4 funcionarios pulando 1 casa para evitar repeticao, ou seja, emp3 em diante
For aux = contemp To totalemp
ActiveCell.FormulaR1C1 = "=""Emp""&" & emp
ActiveCell.Offset(0, 1).Activate
For contjp = 2 To jp
ActiveCell.FormulaR1C1 = "=""Emp""&" & contemp
contemp = contemp + 1
ActiveCell.Offset(0, 1).Activate
aux = contemp - 1
Next contjp
contemp = contemp - 3
ActiveCell.Offset(1, -jp).Activate
Next aux
Next emp
'Separação de blocos de comando
'ActiveCell.Offset(1, 0).Activate
'Trava em 2 funcionários e em seguida mover blocos de 3 funcionarios
For emp = 1 To totalemp - 6
contemp = emp + 3
auxemp = emp
'Criar bloco de 3 funcionarios pulando 2 casa para evitar repeticao, ou seja, emp4 em diante
For aux = contemp To totalemp
ActiveCell.FormulaR1C1 = "=""Emp""&" & auxemp
ActiveCell.Offset(0, 1).Activate
auxemp = auxemp + 1
ActiveCell.FormulaR1C1 = "=""Emp""&" & auxemp
ActiveCell.Offset(0, 1).Activate
auxemp = auxemp - 1
For contjp = 3 To jp
ActiveCell.FormulaR1C1 = "=""Emp""&" & contemp
contemp = contemp + 1
ActiveCell.Offset(0, 1).Activate
aux = contemp - 1
Next contjp
contemp = contemp - 2
ActiveCell.Offset(1, -jp).Activate
Next aux
Next emp
'Separação de blocos de comando
'ActiveCell.Offset(1, 0).Activate
'Trava em 3 funcionários e em seguida mover blocos de 2 funcionarios
For emp = 1 To totalemp - 7
contemp = emp + 4
auxemp = emp
'Criar bloco de 3 funcionarios pulando 2 casa para evitar repeticao, ou seja, emp5 em diante
For aux = contemp To totalemp
ActiveCell.FormulaR1C1 = "=""Emp""&" & auxemp
ActiveCell.Offset(0, 1).Activate
auxemp = auxemp + 1
ActiveCell.FormulaR1C1 = "=""Emp""&" & auxemp
ActiveCell.Offset(0, 1).Activate
auxemp = auxemp + 1
ActiveCell.FormulaR1C1 = "=""Emp""&" & auxemp
ActiveCell.Offset(0, 1).Activate
auxemp = auxemp - 2
For contjp = 4 To jp
ActiveCell.FormulaR1C1 = "=""Emp""&" & contemp
contemp = contemp + 1
ActiveCell.Offset(0, 1).Activate
aux = contemp - 1
Next contjp
contemp = contemp - 1
ActiveCell.Offset(1, -jp).Activate
Next aux
Next emp
'Separação de blocos de comando
'ActiveCell.Offset(1, 0).Activate
'Trava em 4 funcionários e em seguida mover blocos de 1 funcionarios
For emp = 1 To totalemp - 8
contemp = emp + 5
auxemp = emp
'Criar bloco de 4 funcionarios pulando 1 casa para evitar repeticao, ou seja, emp6 em diante
For aux = contemp To totalemp
ActiveCell.FormulaR1C1 = "=""Emp""&" & auxemp
ActiveCell.Offset(0, 1).Activate
auxemp = auxemp + 1
ActiveCell.FormulaR1C1 = "=""Emp""&" & auxemp
ActiveCell.Offset(0, 1).Activate
auxemp = auxemp + 1
ActiveCell.FormulaR1C1 = "=""Emp""&" & auxemp
ActiveCell.Offset(0, 1).Activate
auxemp = auxemp + 1
ActiveCell.FormulaR1C1 = "=""Emp""&" & auxemp
ActiveCell.Offset(0, 1).Activate
auxemp = auxemp - 3
For contjp = 5 To jp
ActiveCell.FormulaR1C1 = "=""Emp""&" & contemp
contemp = contemp + 1
ActiveCell.Offset(0, 1).Activate
aux = contemp - 1
Next contjp
ActiveCell.Offset(1, -jp).Activate
Next aux
Next emp
'Conta as combinações
ActiveCell.Offset(-1, -1).Activate
auxemp = ActiveCell.Row - 4
Range("A5").Select
For aux = 1 To auxemp
ActiveCell.FormulaR1C1 = "=Row()-4"
ActiveCell.Offset(1, 0).Activate
Next aux
'Concatena as combinações
Range("G5").Select
For aux = 1 To auxemp
ActiveCell.FormulaR1C1 = "=RC[-5]&"", ""&RC[-4]&"", ""&RC[-3]&"", ""&RC[-2]&"", ""&RC[-1]"
ActiveCell.Offset(1, 0).Activate
Next aux
Range("G1").Select
ActiveCell.FormulaR1C1 = "= ""Done! Possibilities = ""&" & auxemp
End Sub