Condividi:        

Raggruppamento dati separati..macro o formula

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

Re: Raggruppamento dati separati..macro o formula

Postdi nignetto » 28/02/22 00:23

eeh ti capisco..vediamo cosi... i dati sono nel range fo7:fq7 e variano ad ogni aggiornamento...quindi vorrei che ogni volta che aggiorno la query venissero smazzati come sai..
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Sponsor
 

Re: Raggruppamento dati separati..macro o formula

Postdi Anthony47 » 28/02/22 16:54

Tutta questa discussione per tre colonne di dati?

Intanto ho capito che in riga 6 ci sono le intestazioni x, y o z, che sono necessarie per capire dove le info vanno smazzate. Quindi le informazioni sono in PO6:PQ6 (non riga 7). Vediamo quindi se questa macro si avvicina al risultato voluto:
Codice: Seleziona tutto
Sub XYZ3()
Dim deSh As String, I As Long, NextC As Long
Dim GiaIn As Long, CArr
'
Sheets("Foglio1").Select            '<<< Il Foglio con i dati di partenza
For I = 171 To 173
    deSh = Cells(6, I)
    If Len(deSh) = 1 And InStr(1, "XYZ", deSh, vbTextCompare) > 0 Then
        With Sheets(deSh)
            GiaIn = Application.WorksheetFunction.CountA(.Range("e6").Resize(1, 10000))
            If GiaIn > 0 Then
                CArr = .Range(.Range("E6"), .Range("E6").End(xlDown)).Resize(, GiaIn + 1).Value
                .Range(.Range("E6"), .Range("E6").End(xlDown)).ClearContents
                .Range("F6").Resize(UBound(CArr), UBound(CArr, 2)) = CArr
            End If
            NextC = 5
            Range(Cells(6, I), Cells(6, I).End(xlDown)).Copy .Cells(6, NextC)
        End With
    End If
Next I
End Sub

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19233
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Raggruppamento dati separati..macro o formula

Postdi nignetto » 28/02/22 18:35

Yesss..finalmente fa quello che volevo..intanto mi scuso..probabilmente nell idea di voler descrivere in modo preciso quello che volevo non ho fatto altro che confonderti le idee..cmq tutto ok..ti ringrazio immensamente per la tua pazienza e disponibilità..grande
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: Raggruppamento dati separati..macro o formula

Postdi nignetto » 14/03/22 13:38

ciao Anthony..premetto che il codice sopra funziona bene.Facendo i test sto riscontrando una problematica sui calcoli a cui lo associo..credo che si possae risolvere se si potesse modificare in modo che scrivesse i nuovi dati nelle righe solo se il nuovo risultasse diverso dal precedente..quindi se i valori sono uguali non li memorizza..sempre pero non lasciando celle vuote nelle righe..credi sia possibile?per esempio se l ultimo valore memorizzato fosse 2 e al successivo aggiornamento è di nuovo 2 lo ignora...se diverso lo scrive..
grazie mille
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: Raggruppamento dati separati..macro o formula

Postdi Anthony47 » 14/03/22 18:48

per esempio se l ultimo valore memorizzato fosse 2 e al successivo aggiornamento è di nuovo 2 lo ignora...se diverso lo scrive..
Mi risulta che da copiare sia un elenco in colonna, non un solo elemento; per cui mi risulta difficile capire cosa intendi.

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

Re: Raggruppamento dati separati..macro o formula

Postdi nignetto » 14/03/22 23:44

provo con un esempio con una sola riga di dati
primo aggiornamento dati
------------------------------
x y z
1 2 3

Foglio X
1
Foglio y
2
Foglio z
3
-----secondo aggiornamento dati
X Y Z
2 3 3

Foglio X
2 1
Foglio Y
3 2
Foglio Z
3
come vedi il codice smazza i valori x y z facendoli scorrere a destra come fa adesso..ma nell esempio , nel foglio z non viene aggiunto un altro 3 perchè è uguale al suo precedente..
il codice rimane lo stesso,ma non memorizza i valori nei fogli X o y o Z che si ripetono in sequenza..

esempio con valori X
se avessimo avuto una sequenza di valori 1 1 1 3 4 3 1 3 3 con il codice attuale sarebbe memorizzata cosi..nella modifica che propongo
avremmo 1 3 4 3 1 3
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: Raggruppamento dati separati..macro o formula

Postdi Anthony47 » 15/03/22 01:09

Non hai risposto al dubbio principale: mi risulta che i tuoi dati siano incolonnati (cioe' tanti valori in colonna; vedi tua immagine qui: https://postimg.cc/MMdJyCRk)
Basta confrontare allora la prima cella? Quella su riga 7, per intenderci. O che cosa?
Avatar utente
Anthony47
Moderatore
 
Post: 19233
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Raggruppamento dati separati..macro o formula

Postdi nignetto » 15/03/22 09:05

Si si..l esempio era x farmi capire..ma dovrebbe valere per tutti i dati xyz in colonna presenti
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: Raggruppamento dati separati..macro o formula

Postdi Anthony47 » 15/03/22 12:39

Si si..l esempio era x farmi capire..ma dovrebbe valere per tutti i dati xyz in colonna presenti
Interpreto questa risposta come "Si si, basta limitarsi a controllare il contenuto della prima cella"

In questo caso dovreppe potersi usare questa penultima variante:
Codice: Seleziona tutto
Sub XYZ4()
Dim deSh As String, I As Long, NextC As Long
Dim GiaIn As Long, CArr
'
Sheets("Foglio1").Select            '<<< Il Foglio con i dati di partenza
For I = 171 To 173
    deSh = Cells(6, I)
    If Len(deSh) = 1 And InStr(1, "XYZ", deSh, vbTextCompare) > 0 Then
        With Sheets(deSh)
            GiaIn = Application.WorksheetFunction.CountA(.Range("e6").Resize(1, 10000))
            If Cells(7, I) <> .Range("E7") Then
                If GiaIn > 0 Then
                    CArr = .Range(.Range("E6"), .Range("E6").End(xlDown)).Resize(, GiaIn + 1).Value
                    .Range(.Range("E6"), .Range("E6").End(xlDown)).ClearContents
                    .Range("F6").Resize(UBound(CArr), UBound(CArr, 2)) = CArr
                End If
                NextC = 5
                Range(Cells(6, I), Cells(6, I).End(xlDown)).Copy .Cells(6, NextC)
            End If
        End With
    End If
Next I
End Sub


Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19233
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Raggruppamento dati separati..macro o formula

Postdi nignetto » 15/03/22 21:17

l ho testato purtroppo non va..ho preparato un esempio per simulare cosa dovrebbe fare...perchè mi rendo conto che non è facile da capire descrivendolo...
nel foglio1 abbiamo sempre in Fo:Fq l intervallo dove si aggiornano i dati..nelle colonne successive ho messo 2 esempi di dati per far capire gli step ma questi si trovavo sempre in fo:fq...

primo aggiornamento-->ore 9.30
il codice li smazza in x y z

secondo aggiornamento --> ore 9.45
cambia solo dato in Fu9 (z)..quindi gli altri non li smazza perchè uguali al precendente..solo ne foglio z viene spostato a destra il valore in riga 9,l unico cambiato...e inserito il nuovo

terzo aggiornamento --> 10.00
i valori in giallo sono variati... 2 in X ,1 in y,2 in z rispetto ai precedenti delle 9.45
il codice va in foglio X..inserisce nella riga di riferimento i 2 valori cambiati e sposta a destra solo quelli precedenti

stessa operazione per l unico valore cambiato in Y e i 2 in Z...e cosi via per tutti gli aggiornamenti successivi..

in effetti è un po contorto..in sostanza tutto cio per avere nei fogli x y z,in riga solo i valori che sono cambiati in ordine cronologico dal piu recente al piu vecchio da sinistra verso destra..ignorando quelli che si ripetono in successione
lo so contorto,ma un senso ce l ha :lol:

https://docs.google.com/spreadsheets/d/ ... ue&sd=true
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: Raggruppamento dati separati..macro o formula

Postdi Anthony47 » 15/03/22 23:40

ho preparato un esempio per simulare cosa dovrebbe fare...perchè mi rendo conto che non è facile da capire descrivendolo...
Basta descriverlo bene... Perche' se io chiedo "Basta confrontare allora la prima cella? Quella su riga 7, per intenderci. O che cosa?" e tu rispondi "Si si..l esempio era x farmi capire..ma dovrebbe valere per tutti i dati xyz in colonna presenti" allora significa che basta controllare la riga 7; a me sembra chiaro.

Invece ora capisco che il "raggruppamento" non va fatto a gruppo ma a singola cella...

Per questo, la penultima versione di macro diventa:
Codice: Seleziona tutto
Sub XYZ5()
Dim deSh As String, I As Long, J As Long
'
Sheets("Foglio1").Select            '<<< Il Foglio con i dati di partenza
For I = 171 To 173
    deSh = Cells(6, I)
    If Len(deSh) = 1 And InStr(1, "XYZ", deSh, vbTextCompare) > 0 Then
        With Sheets(deSh)
            For J = 0 To Range(Cells(7, I), Cells(7, I).Offset(1000, 0).End(xlUp)).Rows.Count - 1
                If Cells(7 + J, I) <> .Cells(7 + J, 5) Then
                    .Cells(7 + J, 5).Insert Shift:=xlToRight
                    .Cells(7 + J, 5) = Cells(7 + J, I)
                End If
            Next J
        End With
    End If
Next I
End Sub


Provaci…
Avatar utente
Anthony47
Moderatore
 
Post: 19233
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Raggruppamento dati separati..macro o formula

Postdi nignetto » 16/03/22 19:39

ho provato...purtroppo piu volte ,si impalla e devo annulare macro...su debug è evidenziato qui
.Cells(7 + J, 5) = Cells(7 + J, I)

ho visto che solo i dati in colonna nel foglio X vengono scritti in y z nulla
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: Raggruppamento dati separati..macro o formula

Postdi nignetto » 16/03/22 20:03

perdonami..sembra che invece vada..penso che con un bel po di dati ci mette piu tempo...tengo in test per vedere se tutto ok e ti faccio sapere ..
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: Raggruppamento dati separati..macro o formula

Postdi Anthony47 » 17/03/22 13:05

Purtroppo non hai mai condiviso molti dettagli sui tuoi dati (natura, quantita', variabilita'), quindi quel che ho sviluppato non e' tarato sulla tua situazione.
Ora dici che l'esecuzione e' lenta, che mi fa pensare che pochi dati siano costanti tra un campionamento e l'altro e che la quantita' di righe da trattare siano dell'ordine di parecchie migliaia (con 1k di righe i tempi sono dell'ordine di 1 secondo su una macchina non proprio giovanissima)

Comunque mi sono risoluto a proporti una evoluzione dell'ultima macro:
Codice: Seleziona tutto
Sub XYZ5bis()
Dim deSh As String, I As Long, J As Long
Dim sArr
'
Application.Calculation = xlCalculationManual
mytim = Timer
Sheets("Foglio1").Select            '<<< Il Foglio con i dati di partenza
For I = 171 To 173
    deSh = Cells(6, I)
    If Len(deSh) = 1 And InStr(1, "XYZ", deSh, vbTextCompare) > 0 Then
        With Sheets(deSh)
            For J = 0 To Range(Cells(7, I), Cells(7, I).Offset(1000, 0).End(xlUp)).Rows.Count - 1
                If Cells(7 + J, I) <> .Cells(7 + J, 5) Then
                    If Application.WorksheetFunction.CountA(.Cells(7 + J, 5).Resize(1, 2)) > 0 Then
                        sArr = .Range(.Cells(7 + J, 5), .Cells(7 + J, Columns.Count).End(xlToLeft).Offset(0, 1)).Value
                        .Cells(7 + J, 6).Resize(1, UBound(sArr, 2)) = sArr
                    End If
                    .Cells(7 + J, 5) = Cells(7 + J, I)
                End If
            Next J
        End With
    End If
Next I
'MsgBox (Format(Timer - mytim, "0.00"))
Application.Calculation = xlCalculationAutomatic
End Sub

Usa piu' la memoria e meno l'accesso alle celle excel, quindi dovrebbe essere piu' performante della precedente; prova...
Avatar utente
Anthony47
Moderatore
 
Post: 19233
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Raggruppamento dati separati..macro o formula

Postdi nignetto » 18/03/22 00:55

stavo proprio scrivendo per questo problema e mi sono magicamente trovato questo nuovo codice..in effetti molto molto meglio.anzi velocissimo..mi si bloccava qui
mytim = Timer --->errore prevista function o variabile

l ho rimossa e parte regolarmente...non so cosa sia :D
una cosa che mi da problema riguarda il fatto che i dati smistati nelle celle dei fogli xyz li collego a altri i fogli con delle formule..ho notato che a ogni inserimento i riferimenti delle formule vengono sfalsati ..ovviamente credo in sia normale in virtu degli inserimenti..ho grossolamente risolto legando un altra macro spartana per ripristinarli...se invece hai soluzione piu semplice meglio..
cmq in generale tutto ok..
sei magico accidenti
grazie grazie mille ancora
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: Raggruppamento dati separati..macro o formula

Postdi Anthony47 » 18/03/22 11:21

L'istruzione che hai rimosso serviva per controllare i tempi di esecuzione, va bene così.
ho notato che a ogni inserimento i riferimenti delle formule vengono sfalsati
Succede anche con l'ultima macro, la Sub XYZ5bis?

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

Re: Raggruppamento dati separati..macro o formula

Postdi nignetto » 18/03/22 19:35

tengo sotto controllo
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: Raggruppamento dati separati..macro o formula

Postdi nignetto » 19/03/22 21:41

Tutto ok grazie mille..ora non sfalsa
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "Raggruppamento dati separati..macro o formula":


Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti