Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Excel Eliminare righe matrice su condizione

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 Eliminare righe matrice su condizione

Postdi Francesco53 » 17/05/20 17:21

Un saluto a tutti, ho bisogno di un aiuto per ridurre le righe di una matrice.
La matrice può essere di n righe per 6 colonne, che creo da un ciclo for…next,
io dovrei leggere la matrice dall’inizio riga per riga, dopo aver letto i sei valori della prima riga
avvio un altro ciclo for…next...Step - 1 che legge la matrice dall’ultima riga sino alla riga che ho letto.
Questo è il codice incompleto che utilizzo:
Codice: Seleziona tutto
Sub PcFacile()
Dim Matrice(400, 6)
Dim NumUguali As Byte
NumUguali = 3
For rig = 1 To 400
    For cc = 1 To 6
     Agg(cc) = Matrice(rig, cc)
    Next cc
    For rig2 = 400 To rig + 1 Step -1
        conta = 0
        For cc2 = 1 To 6
            Agg2 = Matrice(rig2, cc2)
            For Col2 = 1 To 6
                If Agg2 = Agg(Col2) Then conta = conta + 1
            Next Col2
                If conta = NumUguali Then

'Se fosse in un foglio potrei scrivere per eliminare la riga:

                    Range("A" & rig2 & ":G" & rig2).Select
                    Selection.Delete Shift:=xlUp

''vorrei evitare di scrivere tutta la matrice nel foglio eliminando direttamente la riga dalla Matrice.
                    GoTo salta
                End If
        Next cc2
salta:
    Next rig2
Next rig
' Qui dovrei scrivere nel foglio le righe valide rimaste:

End Sub


Non inserisco un foglio in quanto penso che capita la richiesta si possa lavorare teoricamente.
Un ringraziamento a chi mi aiuta,
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 753
Iscritto il: 20/02/10 18:45

Sponsor
 

Re: Excel Eliminare righe matrice su condizione

Postdi Anthony47 » 17/05/20 23:44

Su un array in memoria non puoi "eliminare" una riga.
Non so a che scopo sarebbe utile o necessaria l'eliminazione, ti propongo un paio di ipotesi...
Potresti "marcare" quella riga come cancellata, o inserendo una colonna aggiuntiva che usi per questo flag oppure inserendo nella colonna 1 un valore irragionevole (tipo 99, se parli di estrazioni del lotto); oppure cancelli tutte le 6 colonne (ma pensandoci bene e' equivalente a marcare la riga come cancellata).
Oppure mentre scorri la Matrice (ciclo For rig2 = 400 To rig + 1 Step -1 / Next Rig2) contemporaneamente popoli una seconda matrice (bArray) che inizialmente hai dimensionato esattamente come la tua matrice; se a ogni riga che elimini incrementi un contatore puoi usare questo contatore per correggere il puntamento all; a fine ciclo copi bArray in Array principale (Array = bArray) e usi il contatore delle righe complessivamente eliminate per determinare il limite inferiore di validita' della matrice
Oppure crei in foglio di servizio una copia della matrice; man mano che ne hai bisogno elimini le righe sul foglio di servizio; a fine ciclo popoli la matrice con le righe rimaste sul foglio di servizio.

Oppure... cambi approccio (e sia chiaro: non sapendo quale e' l'obiettivo finale dell'elaborazione non ho in mente nessun approccio migliore di quello che stai adottando).

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17005
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel Eliminare righe matrice su condizione

Postdi Francesco53 » 18/05/20 10:01

Buongiorno Anthony, ti ringrazio per le indicazioni, anche io avevo pensato ad un marcatore, ma prima di procedere
volevo sentire il parere di altri per capire se era la via migliore da seguire.
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 753
Iscritto il: 20/02/10 18:45


Torna a Applicazioni Office Windows


Topic correlati a "Excel Eliminare righe matrice su condizione":


Chi c’è in linea

Visitano il forum: Nessuno e 13 ospiti