Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[EXCEL] VBA cerca valori in matrice e restituisce r&c

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

[EXCEL] VBA cerca valori in matrice e restituisce r&c

Postdi giuliad88 » 27/01/14 19:26

Ciao a tutti!
Prima di esporre il mio problema ci tenevo a sottolineare che non credo affatto che il forum sia al mio servizio, ma che anzi ogni mio post è una umile richiesta di aiuto perché di certo ci sono persone molto più esperte di me nel settore che, per qualche motivo strano (e a me molto familiare) ci prendono tanto gusto quando riescono a far funzionare le cose :D
Detto questo, siete tutti gentilissimi e vi ringrazio sinceramente da prima!

Come al solito sono alle prese con una macro che non ne vuole sapere di funzionare come io le dico di fare (sarà che non glielo dico un granchè bene :cry: )

Provo a spiegarvi un po' il problema magari qualcuno di voi saprà illuminarmi :)

Ho una matrice che esprime dei legami padre figlio:

nella prima colonna (di lunghezza variabile) ci sono gli elementi padri (io li ho chiamati comp "X4:X23")
nelle righe in corrispondenza dei padri ci sono i rispettivi figli (dip = Range("Y4:AR23") ) anche queste di lunghezza variablile

per fare un esempio ho una cosa del genere:

(6) -> 7 8
(7)
(8)

ovvero nella prima colonna 6, 7 e 8 e solo nella prima riga 7 e 8. (Questo accade perché l'algoritmo che mi tira fuori queste cose deve verificare se 7 e 8 a loro volta abbiano figli, che in questo caso non ci sono)

Ora il mio obiettivo è affiancare ad ogni figlio il valore (presente in un'altra matrice) che si ottiene entrando con riga valore padre e colonna valore figlio.

Quello che mi serve è quindi entrare nella seconda riga, leggere il valore del figlio (7) vedere se questo valore è contenuto nella riga precedente e leggere il valore del padre (6).
Poi entrare nella terza, leggere il valore del figlio (8) e cercare nelle righe precedenti il valore del padre, in questo caso sempre 6.

Io ho abbozzato una cosa del genere, ma non funziona!

Codice: Seleziona tutto
Sub giulia()

Set matr = Range("C4:V23")
Set comp = Range("X4:X23")
Set temp = Range("AS4:AS23")
Set dip = Range("Y4:AR23")
Range("AS4:AS23").Select
Selection.ClearContents

Nr = comp.rows.count


k = 1

For i = 2 To Nr

For j = 1 To Nr

If comp(i).Value = dip(k, j).Value Then
a = comp(i).Value
b = comp(k).Value
v = matr(b, a).Value
temp(i) = v

End If
Next
Next
k = k + 1

End Sub

Suppongo sia perché non so come dirgli di leggere le righe precedenti :(
giuliad88
Utente Junior
 
Post: 17
Iscritto il: 22/11/13 09:46

Sponsor
 

Re: [EXCEL] VBA cerca valori in matrice e restituisce r&c

Postdi Anthony47 » 28/01/14 01:25

Non ho afferrato perche' invece di lavorare solo sulla riga che indica una relazione tra padre e figlio (la riga che ha un valore anche nella seconda colonna) vuoi elaborare le righe successive salvo poi dover tornare indietro a cercare dove e' e chi e' il padre...
Suggerisco inoltre di pubblicare almeno uno screenshot dei dati da elaborare (da cui si vedano le coordinate Riga/Colonna); per come fare guarda qui: viewtopic.php?f=26&t=80395#p466013

Quanto alle vecchie storie, io suggerisco sempre di lasciarle alle spalle.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] VBA cerca valori in matrice e restituisce r&c

Postdi giuliad88 » 28/01/14 10:32

Ok, proviamo se funziona questo:
Immagine
o questo
Immagine
image hosting

Quella a sinistra è la matrice che ho tentato di descrivere. Allego anche la macro attraverso cui creo quella a sinistra a patire da quella a destra. In pratica entro con un elemento e determino se c'è un legame di dipendenza confrontado i valori che ho in ogni colonna, in corrispondenza di una riga di patenza, confrontandoli con il valore in diagonale. Prendo solo quelli con valore minore.

Questa è la macro.

Codice: Seleziona tutto
Sub calcola()
Sheets("tempi").Activate
Set matr = Range("C4:V23")
Nr = matr.Rows.Count
Range("X4:AQ23").Select
Selection.ClearContents

Set omatr = Range("X4:AQ23")
omatr(1, 1).Value = Range("I26").Value
ne = 1
ie = 1



Do
  jj = 2
  For j = 1 To Nr
    E = omatr(ie, 1).Value
    If matr(E, j).Value < matr(j, j).Value Then
        omatr(ie, jj).Value = j
        jj = jj + 1
        chk = 0
        For ii = 1 To ne
            If omatr(ii, 1).Value = j Then
                chk = 1
                Exit For
            End If
        Next

        If chk = 0 Then
            ne = ne + 1
            omatr(ne, 1).Value = j
        End If

    End If
  Next
  ie = ie + 1
Loop Until ie > ne

End Sub

Non so se sono riuscita a spiegarmi al meglio :/
giuliad88
Utente Junior
 
Post: 17
Iscritto il: 22/11/13 09:46


Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL] VBA cerca valori in matrice e restituisce r&c":


Chi c’è in linea

Visitano il forum: Nessuno e 18 ospiti