Matrici di affiliazione con exce



  • Matrici di affiliazione con exce
    di Egrandi (utente non iscritto) data: 26/01/2016 21:20:33

    Ciao a tutti,
    Ho un problema con excel che vorrei sottoporvi, ho cercato molto ma non ho trovato nessun riferimento a come risolverlo con excel;
    Allora, si tratta di uno studio di interlocking directorates che faro' con un software di analisi di reti sociali, ma prima non riesco a capire come pulire il dataset.
    Ho una lista di amministratori associati alle compagnie in cui compaiono come membri del consiglio di amministrazione.
    Semplificato, il file è di questo tipo:
    ADMIN Compagnia
    1 20
    1 35
    2 35
    2 41
    2 60

    Il mio scopo sarebbe ottenere una lista di relazioni tra le compagnie che condividono almeno un amministratore. Quindi, nel caso esemplificato:
    20 35
    41 35
    41 60

    Ho chiamato la discussione matrice di affiliazione perché sarei anche curiosa di sapere se è possibile creare una matrice rettangolare Admin/compagnie e poi dividerla in due matrici quadrate Admin/admin e Comp/comp.

    Sapreste aiutarmi?
    Grazie mille
    35 60




  • di patel data: 27/01/2016 09:10:11

    allega un file di esempio un po' più complesso con i dati ed il risultato desiderato





  • di Egrandi (utente non iscritto) data: 27/01/2016 09:46:49

    Grazie mille.
    Ho allegato un file excel (MATRIX_TEST) con due fogli. Nel primo lo stato attuale: due colonne, una per gli amministratori e l'altra con le compagnie (entrambi identificati con il loro ID). Nel secondo foglio ("COMP_COMP") il risultato sperato, ovvero due colonne con le compagnie in relazione fra loro (A2 con B2 etc). Si tratta di stabilire questa corrispondenza ogni volta che due compagnie condividono un amministratore.
    Grazie ancora,
    Elisa



  • di Luca73 data: 27/01/2016 11:41:43

    Non mi è chiara una cosa perchè nella lista trovo
    1589 con 2104 e 3534 ma non 2292?









  • di Egrandi (utente non iscritto) data: 27/01/2016 12:58:12

    E' vero, grazie per la segnalazione. Ho corretto l'errore e caricato un file "MATRIX_TEST2". Comunque l'idea è che tutte le compagnie devono essere in relazione, se condividono un amministratore.



  • di Luca73 data: 27/01/2016 15:45:55

    Ciao
    ho buttato giù due righe di codice per fare quello che chiedi
    In pratica analizzo una per una le celle in COMPAGNIA. Ogni cella viene confrontata con ciascuna di quelle che gli stanno sotto. Se il valore di ADMIN della coppia in esame è uguale allora i valori vengono copiati in COMP-COMP.
    fammi ssapere se è qullo di cui avevi bisogno.
    Ciao
    Luca



     
    Sub CercoStessoAdmin()
    Dim Numero As Long
    Dim Index1 As Long
    Dim Index2 As Long
    Dim CellaW1 As Range
    Dim CellaW2 As Range
    Dim CellaFixA As Range
    Dim CellaFixC As Range
    Dim Quanti As Long
    
    If Range("B2").Offset(1, 0) = "" Then Exit Sub
    Quanti = 0
    Set CellaFixA = Sheets("ADMIN_COMP").Range("B2")
    Set CellaFixC = Sheets("COMP_COMP").Range("A2")
    Range(CellaFixC, CellaFixC.End(xlDown).Offset(0, 1)).Clear
    Numero = Range(CellaFixA, CellaFixA.End(xlDown)).Cells.Count
    For Index1 = 1 To Numero - 1
        Set CellaW1 = CellaFixA.Offset(Index1 - 1, 0)
        For Index2 = Index1 + 1 To Numero
            Set CellaW2 = CellaFixA.Offset(Index2 - 1, 0)
            If CellaW1.Offset(0, -1) = CellaW2.Offset(0, -1) Then
                CellaFixC.Offset(Quanti, 0) = CellaW1
                CellaFixC.Offset(Quanti, 1) = CellaW2
                Quanti = Quanti + 1
            End If
        Next
    Next
    
    End Sub
    






  • di Egrandi (utente non iscritto) data: 27/01/2016 17:48:34

    Grazie mille,
    Ho provato ad eseguirlo ma mi dà un errore, spero di non essermi sbagliata io nel procedimento...
    Allego uno screenshot



  • di alfrimpa data: 27/01/2016 18:03:07

    Ciao Elisa ed un saluto a Luca.

    Non ho seguito la discussione per cui non entro nel merito ma, per curiosità, ho provato la macro di Luca ed a me non da nessun errore (e credo funzioni correttamente ma questo lo puoi dire solo tu).

    Ti allego il file (elisa.xlsm).

    Comunque sarebbe utile dire a Luca su quale riga si blocca la macro (quella evidenziata in giallo dal debug).

    Alfredo





  • di Luca73 data: 28/01/2016 09:57:31

    Ciao Alfredo grazie per il feedback
    Ciao Elisa
    ho modificato la macro leggermente riprova a farla girare inserendola in un modulo come hai fatto prima e facendola partire con un pulsante.
    Ho notato che avevi aperti due file similari che avevano probabilmente fogli con nomi analoghi e questo potrebbe aver generato errori.
    Come ti ha suggerito Alfredo fammi sapere dove e quando si blocca. A me funziona regolarmente.
    Ciao
    Luca
     
    Sub CercoStessoAdmin()
    Dim Numero As Long
    Dim Index1 As Long
    Dim Index2 As Long
    Dim CellaW1 As Range
    Dim CellaW2 As Range
    Dim CellaFixA As Range
    Dim CellaFixC As Range
    Dim Quanti As Long
    Dim WB As Workbook
    Set WB = ThisWorkbook
    If WB.Sheets("ADMIN_COMP").Range("B2").Offset(1, 0) = "" Then Exit Sub
    Quanti = 0
    Set CellaFixA = WB.Sheets("ADMIN_COMP").Range("B2")
    Set CellaFixC = WB.Sheets("COMP_COMP").Range("A2")
    If CellaFixA.Offset(1, 0) = "" Then Exit Sub
    Range(CellaFixC, CellaFixC.End(xlDown).Offset(0, 1)).Clear
    Numero = Range(CellaFixA, CellaFixA.End(xlDown)).Cells.Count
    For Index1 = 1 To Numero - 1
        Set CellaW1 = CellaFixA.Offset(Index1 - 1, 0)
        For Index2 = Index1 + 1 To Numero
            Set CellaW2 = CellaFixA.Offset(Index2 - 1, 0)
            If CellaW1.Offset(0, -1) = CellaW2.Offset(0, -1) Then
                CellaFixC.Offset(Quanti, 0) = CellaW1
                CellaFixC.Offset(Quanti, 1) = CellaW2
                Quanti = Quanti + 1
            End If
        Next
    Next
    
    End Sub






  • di Egrandi (utente non iscritto) data: 28/01/2016 18:51:31

    Carissimi,
    Effettivamente funziona benissimo!
    Nessun errore, probabilmente come diceva Luca i vari fogli aperti con nomi analoghi perturbavano.
    Vi ringrazio tantissimo, davvero! Ore, giorni di lavoro risparmiati! Faccio qualche test per vedere se "è stato preso tutto" ma direi proprio che ci siamo!
    Grazie ancora!
    Elisa