Matrici di affiliazione con exce
Hai un problema con Excel? 
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
Vuoi Approfondire?