Condividi:        

Creare matrice prossimità (distanze)

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Creare matrice prossimità (distanze)

Postdi davide67 » 22/04/09 09:52

Ho un problema statistico da risolvere. Ho la seguente tabella:
Immagine

Da questa devo creare una matrice di prossimità come sotto:
Immagine
cioé ho una serie di utenti che hanno associato una serie di campi. l'associazione è definita con un numero uguale (139,140,ecc). devo praticamente creare una matrice di prossimità cioè contare quanti utenti hanno associato due campi diversi (esempio nella cella campo1/campo2 devo contare quanti utenti hanno associato questi due campi quindi c'è il numero uguale), non contanto chiaramente le celle vuote.
Ho provato con varie funzioni (conta.se, confronta, somma(se...) però senza risultati. e' necessario passare a vba? qualcuno mi sa aiutare? spero di essere stato chiaro. grazie
davide67
Newbie
 
Post: 4
Iscritto il: 21/04/09 06:57

Sponsor
 

Re: Creare matrice prossimità (distanze)

Postdi Flash30005 » 22/04/09 12:12

Ho pensato che potresti risolvere così (se ho interpretato bene la tua esigenza)
esempio1
Immagine

Inserendo in B28 (riferimento esempio1) questa formula:
Codice: Seleziona tutto
=CONTA.SE(B$2:B$24;$A28)

copiarla in verticale per tutti i valori esistenti e poi in orizzontale per tutti i campi esaminati

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Creare matrice prossimità (distanze)

Postdi davide67 » 22/04/09 13:35

Purtroppo non è così semplice.
Mi interessa sapere quanti utenti hanno inserito lo stesso valore nel campo1/campo2, campo1/campo3, campo1/campo4 ecc.
Devo praticamente fare dei confronti e creare una matrice come ho inserito nell'esempio. Chiaramente nella casella campo1/campo1 ci sarà il numero di tutti gli utenti (a meno di campi vuoti).
Spero di essere stato più chiaro.
Grazie
davide67
Newbie
 
Post: 4
Iscritto il: 21/04/09 06:57

Re: Creare matrice prossimità (distanze)

Postdi Anthony47 » 22/04/09 22:41

Ciao davide67 e benvenuto nel forum.
Io sono ancora nella nebbia: guardando quanto hai scritto per i primi 3 utenti, che cosa devi mettere agli incroci tra Campo1-Campo2, Campo2-Campo2, e Campo2-Campo3, ad esempio?

ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Creare matrice prossimità (distanze)

Postdi ricky53 » 22/04/09 23:31

Ciao Davide,
anch'io non ho capito quasi nulla o quais!!!

Cosa ne dici di dare ai vari campi i loro veri nomi?
I valori 139, 140, ..., 150 sono significativi o sono solo di esempio?
Gli utenti come vengono legati ai valori 139, 140, ...???
La matrice di arrivo sulle righe e sulle colonne che nomi deve avere? Quelli veri !!!
Come è collegata ai dati iniziali: ossia che algoritmo va utilizzato per fare i calcoli?

Spiegati bene altrimenti non se ne esce.

Se almeno due di noi dicono di aver capito poco mi viene il sospetto che chi ha spiegato non si sia spiegato bene.
Consentimi la battuta per allentare un po'; non te la prendere. Fai esperienza per i prossimi interventi.

Forza che ne usciamo.

Ciao da Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Creare matrice prossimità (distanze)

Postdi Flash30005 » 23/04/09 00:33

Anche io forse ancora lo sono (nella nebbia) :lol:
Comunque tento
ho usato due fogli Foglio1 e Foglio2
Nel foglio1 da B1 a AY1 ho inserito la testata da campo1 a campo50
e da A2 a A101 da utente1 a utente100

Nel foglio2 ho ripetuto i campi da B1 a AY (campo1, campo50)
e da A2 a A51 (campo1, campo50)
Poi in un modulo ho messo questa macro
Codice: Seleziona tutto
Sub Confronta()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Worksheets("Foglio2").Range("B2:AY102").ClearContents
Worksheets("Foglio1").Activate
Range("A1").Select
For CC = 1 To 100
    For IR = 1 To 50
        For IC = 1 To 50
        If ActiveCell.Offset(CC, IR).Value <> "" Then
           If ActiveCell.Offset(CC, IR).Value = ActiveCell.Offset(CC, IC).Value Then
                Worksheets("Foglio2").Activate
                Range("A1").Select
                If IC = IR Then
                    ActiveCell.Offset(IC, IR).Value = "-"
                Else
                    ActiveCell.Offset(IC, IR).Value = ActiveCell.Offset(IC, IR).Value + 1
                End If
                Worksheets("Foglio1").Activate
                Range("A1").Select
           End If
        End If
        Next
    Next
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Attivandola i valori voluti saranno conteggiati, in caso di campi uguali Campo1/Campo1; Campo2/Campo2 etc si avrà un segno - (trattino)
Nel caso non si voglia conteggiare anche questo caso (si avrà sempre 100) basta togliere questa condizione
Codice: Seleziona tutto
                If IC = IR Then
                    ActiveCell.Offset(IC, IR).Value = "-"
                Else
                    ActiveCell.Offset(IC, IR).Value = ActiveCell.Offset(IC, IR).Value + 1
                End If

e lasciare solo
Codice: Seleziona tutto
 
                    ActiveCell.Offset(IC, IR).Value = ActiveCell.Offset(IC, IR).Value + 1


Fai sapere

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Creare matrice prossimità (distanze)

Postdi davide67 » 23/04/09 14:23

Penso che "Flash" abbia capito il problema.
I numeri sono significativi solo del fatto che indicano associazioni (stesso numero campo associato), cioé ad esempi l'utente1 ha associato il campo1con il campo3 e con il campo4, l'utente2 ha associato il campo1 con il campo4, utente3 ha associato il campo4 con il campo5.
La funzione (macro) mi deve dire quanti utenti hanno associato il campo1 con il campo2, il campo1 con il campo3, il campo1 con il campo4 ecc. creandomi la matrice detta proprio in statistica di prossimità.
A prima vista la macro sebra faccia questa funzione, purtroppo con il mio excel 2003 non funziona, dandomi errore 400, epoi avanzando con F8 errore run-time 1004 sulla riga: Range("A1").Select.
Scusate la mia ignoranza con VB...
Grazie
Ciao
davide67
Newbie
 
Post: 4
Iscritto il: 21/04/09 06:57

Re: Creare matrice prossimità (distanze)

Postdi Flash30005 » 23/04/09 14:47

davide67 ha scritto:...
A prima vista la macro sebra faccia questa funzione, purtroppo con il mio excel 2003 non funziona, dandomi errore 400, epoi avanzando con F8 errore run-time 1004 sulla riga: Range("A1").Select.
...

Quella macro è stat realizzata con excel 2003 quindi deve funzionare anche a te
quindi se hai copiato l'intera macro, ti consiglio di copiarla di nuovo (ho apportato una modifica) e la inserisci nel modulo della cartella di lavoro, poi nel Foglio1 i dati, ossia la matrice dei dati, dovranno essere da B2 a AY101 (nella prima riga:B1..Ay1 c'è la testata e nella colonna A2..A101 ci sono i nomi utenti), inoltre dovrai avere un foglio che si chiama Foglio2 (anche vuoto).
Ora prova a lanciare la macro e fai sapere

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Creare matrice prossimità (distanze)

Postdi davide67 » 23/04/09 20:51

Benissimo, funziona perfettamente, anche se sembrava fosse un loop perché un po' lento.
Avrei solo un'ultima richiesta: avrei bisogno di non contare le celle vuote, poiché lui le considera uguali e le conta.
Se puoi ancora darmi una mano.
Grazie mille!!!!.
Davide
davide67
Newbie
 
Post: 4
Iscritto il: 21/04/09 06:57

Re: Creare matrice prossimità (distanze)

Postdi Flash30005 » 23/04/09 22:38

davide67 ha scritto:Benissimo, funziona perfettamente, anche se sembrava fosse un loop perché un po' lento.
Avrei solo un'ultima richiesta: avrei bisogno di non contare le celle vuote, poiché lui le considera uguali e le conta.
Se puoi ancora darmi una mano.
Grazie mille!!!!.
Davide

Ciao innanzitutto hai un pm di risposta
le celle se sono veramente vuote non vengono conteggiate ma se hai un -1 allora le conteggia
comunque per tagliare la testa al toro usa questo codice
Codice: Seleziona tutto
   
If ActiveCell.Offset(CC, IR).Value <> "" or ActiveCell.Offset(CC, IR).Value > 0 Then     '<<<< modifica questa riga così
           If ActiveCell.Offset(CC, IR).Value = ActiveCell.Offset(CC, IC).Value Then
                Worksheets("Foglio2").Activate
                Range("A1").Select
                If IC = IR Then
                    ActiveCell.Offset(IC, IR).Value = "-"
                Else
                    ActiveCell.Offset(IC, IR).Value = ActiveCell.Offset(IC, IR).Value + 1
                End If
                Worksheets("Foglio1").Activate
                Range("A1").Select
           End If
        End If

Modificando quella riga non verrano conteggiate le celle dove
non vi è nulla
che abbiano il valore minore o uguale a 0 (zero) quindi
se dovessero avere un numero negativo, come nel tuo caso ( -1)

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-


Torna a Applicazioni Office Windows


Topic correlati a "Creare matrice prossimità (distanze)":


Chi c’è in linea

Visitano il forum: Nessuno e 47 ospiti