Stampa combinazioni con VBA



  • Stampa combinazioni con VBA
    di taranto57 (utente non iscritto) data: 30/08/2013 16:27:05

    Buona sera a tutti.

    Dopo varie ricerche e alcuni tentativi sono riuscito a rappresentare le
    combinazioni date da 9 elementi sistemati in celle di un foglio Excel,
    A1=A B1=D C1=G
    A2=B B2=E C2=H
    A3=C B3=F C3=I

    Con la macro (in VBA), di seguito riportata, riesco ad ottenere le 27
    possibili combinazioni a partire da A15 e sino a C41 con sistemazione delle
    combinazioni in orizzontale da A15 a C15 .. da A41 a C41:
    A D G
    A D H
    A D I
    A E G
    A E H
    A E I
    A F G
    A F H
    A F I
    B D G
    B D H
    B D I
    B E G
    B E H
    B E I
    B F G
    B F H
    B F I
    C D G
    C D H
    C D I
    C E G
    C E H
    C E I
    C F G
    C F H
    C F I

    e questo è il listato:

    Private Sub CommandButton1_Click()
    Dim A, B, C, Riga As Integer
    Riga = 15 'riga di partenza delle combinazioni
    For A = 1 To 3
    For B = 1 To 3
    For C = 1 To 3
    Cells(Riga, 1) = Cells(A, 1)
    Cells(Riga, 2) = Cells(B, 2)
    Cells(Riga, 3) = Cells(C, 3)
    Riga = Riga + 1
    Next C
    Next B
    Next A
    End Sub

    Vorrei sapere come implementare il listato affinché le combinazioni siano sviluppate in verticale a partire sempre da A15:
    AAA ......
    DDD ......
    GHI ......
    (le 27 combinazioni sono sempre le stesse, solo che la lettura delle terne da orizzontale passa a verticale)

    Ringrazio anticipatamente

     
    Private Sub CommandButton1_Click()
        Dim A, B, C, Riga As Integer
        Riga = 15 'riga di partenza delle combinazioni
        For A = 1 To 3
            For B = 1 To 3
                For C = 1 To 3
                                                    Cells(Riga, 1) = Cells(A, 1)
                                                    Cells(Riga, 2) = Cells(B, 2)
                                                    Cells(Riga, 3) = Cells(C, 3)
                                                    Riga = Riga + 1
               Next C
            Next B
        Next A
    End Sub
    



  • di HarryBosch data: 30/08/2013 20:23:25

    Se selezioni l'intervallo e fai "copia-->trasponi" ottieni il risultato che stai cercando, anche se non puoi sovrascrivere i dati a partire dalla stessa cella.

    Modificando la sub che hai postato, devi invertire i riferimenti di cella e colonna dell'istruzione Cells, nel modo sotto indicato:
     
    Private Sub CommandButton1_Click()
      Dim A As Byte, B As Byte, C As Byte
      Dim col As Integer
      For A = 1 To 3
        For B = 1 To 3
          For C = 1 To 3
            col = col + 1
            Cells(15, col) = Cells(A, 1)
            Cells(16, col) = Cells(B, 2)
            Cells(17, col) = Cells(C, 3)
          Next C
        Next B
      Next A
    End Sub