Combinazioni senza ripetizioni

Anonimo
2010-10-28T13:34:24+00:00

Ciao,

Range A2:D2

Stringhe del range:

A

B

C

D

Con una formula nella colonna a dx vorrei ottenere le combinazione possibili senza ripetizioni in questa forma:

A – B

A – C

A – D

B – C

B –D

C – B

C – D

D – A

Infine ad ogni nuovo inserimento nella colonna A, le combinazioni della colonna B devono aggiornarsi.

Grazie per l’attenzione.


.K

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2010-11-07T15:51:37+00:00

Grazie Antonio ma mi serve la quarta ( grazie per avermi dato ancora la possibilità di corregermi):

A – B

A – C

A – D

B – C

B – D

C – D

 Considera che non avrò mai doppioni e le risultanze devono essere così come in citazione. All'aggiunta di un'altra lettera a partire da B2 a scendere (solo a scendere) devono ricostituirsi le nuove combinazioni possibili. Grazie per lo spunto ma non ci arrivo. 


.K

ciao Karistotele, ti riferisco la risposta che l'amico Roberto (in arte sul NG mpioe: "r"; questo il suo sito:http://sites.google.com/site/e90e50/user ) ha dato a me e che mi ha autorizzato a pubblicare sul forum:

questa prima parte è mia:

innanzitutto attribuisci un intervallo dinamico ad un nome da richiamare nella formula:

nome: rng

riferito a: =Foglio1!$A$1:INDIRETTO("$A$"&CONTA.VALORI(Foglio1!$A:$A))

questa è la parte di Roberto (la più importante):

=INDICE(rng&" - "&MATR.TRASPOSTA(rng);SINISTRA(PICCOLO(SE(RIF.RIGA(rng)<MATR.TRASPOSTA(RIF.RIGA(rng));--(RIF.RIGA(rng)&RIF.COLONNA(SCARTO($A$1;;;;RIGHE(rng)))));RIF.RIGA(A1));1);DESTRA(PICCOLO(SE(RIF.RIGA(rng)<MATR.TRASPOSTA(RIF.RIGA(rng));--(RIF.RIGA(rng)&RIF.COLONNA(SCARTO($A$1;;;;RIGHE(rng)))));RIF.RIGA(A1));1)) matriciale da copiare in basso.

N.B.!!!!!: questa formula funziona sino a 9 elementi. Per un numero maggiore di elementi vedi qui:https://sites.google.com/site/e90e50/user/calcolo-combinatorio, in particolare l'esempio:combinazioni_per_k_2.xls


fai sapere, grazie

ciao paoloard

http://riolab.org

***********************************************

Se la risposta ti ha aiutato "Vota come Utile".

Se ha risolto il problema "Segna come Risposta".

La risposta è stata utile?

0 commenti Nessun commento

15 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2010-10-28T16:09:43+00:00

    Grazie per l’interessamento Mauro ma “la fretta uccide” ed hos bagliato ad indicare il range. Per questo non ho capito nulla della macro e soprattutto non ho fatto capire di cosa ho bisogno.

    Il range in effetti si sviluppa in verticale nella colonna A

    <cut>

    Ho bisogno però di una formula perché non riesco a concepire la logica di impostazione. Le tue macro sono sempre graditema vorrei veramente una formula.


    .K

    No. Con una funzion eposso avere dei valori *solo* nella cella dove richiamo la funzione. Posso però agganciare la macro ad un evento, ad esempio l'evento Change del foglio. Vediamo come. Tutto nel modulo di codice del foglio dove vuoi questa cosa:

    Private Sub Worksheet_Change(ByVal Target As Range)

        If Target.Column = 1 Then

            Call m

        End If

    End Sub

    Private Sub m()

        'dichiaro le variabili

        Dim lRighe As Long

        Dim lVal As Long

        Dim lCont As Long

        Dim lng As Long

        'valorizzo a 1 la variabile lCont

        lCont = 2

        With Me

            'pulisco la colonna B

            .Range("B:B").Clear

            'trovo l'ultima riga con un valore

            lRighe = .Range("A" & .Rows.Count).End(xlUp).Row

            'ciclo le righe(colonna A)

            For lng = 2 To lRighe

                'ciclo ancora le righe(sempre colonna A)

                For lVal = 2 To lRighe

                    'metto il valore nelle celle della colonna B

                   .Cells(lCont, 2).Value = .Cells(lng, 1).Value & _

                        " - " & .Cells(lVal, 1).Value

                    'aumento di 1 il contatore(indica la cella

                    'dove scrivere il valore)

                    lCont = lCont + 1

                Next

            Next

        End With

    End Sub

    Prova un po' ad inserire qualcosa(A, B, C, ecc) da A2 in giù. Fai sapere, grazie.


    --

    La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

    --

    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2010-10-28T15:37:10+00:00

    Grazie per l’interessamento Mauro ma “la fretta uccide” ed hos bagliato ad indicare il range. Per questo non ho capito nulla della macro e soprattutto non ho fatto capire di cosa ho bisogno.

    Il range in effetti si sviluppa in verticale nella colonna A

    Range A2:A5

    Stringhe del range:

    A

    B

    C

    D

    Con una formula nella colonna a dx (a partire da B2 a scendere)vorrei ottenere le combinazione possibilisenza ripetizioni in questa forma:

    A – B                                   “in B2”

    A – C                                   “in B3”

    A – D                                  “in B4”

    B – C                                   “in B5”

    B –D i                                  “in B6”

    C – B                                   “in B7”

    C – D                                   “in B8”

    D – A                                  “in B9”

    Infine ad ogni nuovo inserimento nella colonna A, le combinazioni della colonna B devono aggiornarsi.

    Ho bisogno però di una formula perché non riesco a concepire la logica di impostazione. Le tue macro sono sempre graditema vorrei veramente una formula.


    .K

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2010-10-28T14:52:52+00:00

    Ciao,

    Range A2:D2

    Stringhe del range:

    <cut>

    Opss, non ho capito nulla, scusa. Lascio comunque la risposta sbagliata che darebbe quanto chiedi inserendo i dati nella colonna A da A1 a An....

    Per favore, semplificando:

    • A2 = A
    • B2 = B

    In colonna C avrò:

    • C1 = A-A
    • C2 = A-B
    • C3 = B-A
    • C4 = B-B

    Se aggiungo una riga:

    • A3 = C
    • A4 = D

    Vuoi ottenere questo:

    • C1 = A-A
    • C2 = A-B
    • C3 = A-C
    • C4 = A-D
    • C5 = B-A
    • C6 = B-B
    • C7 = B-C
    • C8 = B-D
    • C9 = C-A
    • C10 = C-B
    • ecc.

    E' così?


    --

    La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

    --

    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2010-10-28T14:40:35+00:00

    Ciao,

    Range A2:D2

    Stringhe del range:

     

    <cut>

    Posso aiutarti con una macro. Da rilanciare ad ogni immissione di dati in colonna A(o da richiamare da un evento del foglio). I dati in colonna A devono essere contigui, non devono esserci celle vuote:

    Public Sub m()

        'dichiaro le variabili

        Dim lRighe As Long

        Dim lVal As Long

        Dim lCont As Long

        Dim lng As Long

        Dim sh As Worksheet

        'metto un riferimento al foglio(qui Foglio1)

        Set sh = ThisWorkbook.Worksheets("Foglio1")

        'valorizzo a 1 la variabile lCont

        lCont = 1

        With sh

            'pulisco la colonna B

            .Range("B:B").Clear

            'trovo l'ultima riga con un valore

            lRighe = .Range("A" & .Rows.Count).End(xlUp).Row

            'ciclo le righe(colonna A)

            For lng = 1 To lRighe

                'ciclo ancora le righe(sempre colonna A)

                For lVal = 1 To lRighe

                    'metto il valore nelle celle della colonna B

                   .Cells(lCont, 2).Value = .Cells(lng, 1).Value & _

                        " - " & .Cells(lVal, 1).Value

                    'aumento di 1 il contatore(indica la cella

                    'dove scrivere il valore)

                    lCont = lCont + 1

                Next

            Next

        End With

        'Set a Nothing della variabile oggetto

        Set sh = Nothing

    End Sub

    Provala e per favore fai sapere. Grazie.


    --

    La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

    --

    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento