Fórmula excel

Buenas a todos:
Estoy haciendo un trabajo y no encuentro la fórmula que me de el resultado correcto.
- Imaginemos, tengo 14 número 1,2,3,4,5,6,7,8,9,10,11,12,13,14 cada uno en su celda y necesito una fórmula para que me de todas sus variantes teniendo encuenta que me tiene que seleccionar siembre 6 números del 1 al 14 independientemente del orden.
Ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 En la primera fila y que al arastrar la fórmula aparezca
2ª Fila 1 2 3 4 5 6
3ª Fila 1 2 3 4 5 7
Así hasta que me calcule todas sus variantes sin que me de valores repetidos. (Ejemplo: 1 2 2 3 4 5)
Si alguien tiene alguna duda, por favor que me escriba. Excel2003
Muchísimas gracias. Un saludo.

1 respuesta

Respuesta
1
Entiendo que lo que buscas son las combinaciones de un conjunto de 14 elementos en grupos de 6, lo que arroja 3003 combinaciones.
Suponiendo que los 14 números están en el rango A1:N1 de Hoja1, el siguiente código debería hacer el trabajo:
Sub ListarCombinaciones()
    Dim rngOrigen As Range
    Set rngOrigen = [Hoja1!A1:A14]
    Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer, f As Integer
    Application.ScreenUpdating = False
    ActiveSheet.[A2].Select
    For a = 1 To 9
        For b = a + 1 To 10
            For c = b + 1 To 11
                For d = c + 1 To 12
                    For e = d + 1 To 13
                        For f = e + 1 To 14
                            With ActiveCell
                                .Value = rngOrigen(1, a).Value
                                .Offset(, 1).Value = rngOrigen.Cells(1, b).Value
                                .Offset(, 2).Value = rngOrigen.Cells(1, c).Value
                                .Offset(, 3).Value = rngOrigen.Cells(1, d).Value
                                .Offset(, 4).Value = rngOrigen.Cells(1, e).Value
                                .Offset(, 5).Value = rngOrigen.Cells(1, f).Value
                                ActiveCell.Offset(1, 0).Select
                            End With
                        Next f
                    Next e
                Next d
            Next c
        Next b
    Next a
    Application.ScreenUpdating = True
    Set rngOrigen = Nothing
End Sub
Las combinaciones aparecerán listadas a partir de A2, hasta F3004.
Muchísimas gracias! Solo una cosa más:
- ¿Si tengo que buscar 9 valores en lugar de 6 como lo vario?
Un saludo.
Sub ListarCombinaciones()
    Dim rngOrigen As Range
    Set rngOrigen = [Hoja1!A1:A14]
    Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer, f As Integer, g As Integer, h As Integer, i As Integer
    Application.ScreenUpdating = False
    ActiveSheet.[A2].Select
    For a = 1 To 6
        For b = a + 1 To 7
            For c = b + 1 To 8
                For d = c + 1 To 9
                    For e = d + 1 To 10
                        For f = e + 1 To 11
                            For g = f + 1 To 12
                                For h = g + 1 To 13
                                    For i = h + 1 To 14
                                        With ActiveCell
                                            .Value = rngOrigen(1, a).Value
                                            .Offset(, 1).Value = rngOrigen.Cells(1, b).Value
                                            .Offset(, 2).Value = rngOrigen.Cells(1, c).Value
                                            .Offset(, 3).Value = rngOrigen.Cells(1, d).Value
                                            .Offset(, 4).Value = rngOrigen.Cells(1, e).Value
                                            .Offset(, 5).Value = rngOrigen.Cells(1, f).Value
                                            .Offset(, 6).Value = rngOrigen.Cells(1, g).Value
                                            .Offset(, 7).Value = rngOrigen.Cells(1, h).Value
                                            .Offset(, 8).Value = rngOrigen.Cells(1, i).Value
                                            .Offset(1).Select
                                        End With
                                    Next i
                                Next h
                            Next g
                        Next f
                    Next e
                Next d
            Next c
        Next b
    Next a
    Application.ScreenUpdating = True
    Set rngOrigen = Nothing
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas