Condividi:        

ricerca statistica in archivio

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

ricerca statistica in archivio

Postdi nignetto » 16/05/22 22:04

ciao Anthony,
se possibile vorrei chiederti un nuovo sviluppo... allego file che ho cercato di ridurre al minimo essenziale per capire cosa mi servirebbe anche se rimane un po grandino comunque.
la macro che mi sarebbe utile andrebbe applicata al foglio "analisi" dove dovrebbero essere riportate in riga le % della ricerca statistica nel foglio Archivio.
cerco di spiegarmi..nel foglio ho creato un esempio..in a2 del foglio Analisi ho scritto colonna "abk";nella colonna abk riga 6 del foglio Archivio abbiamo una serie di valori..in questo caso da -42 a 45
la macro si dovrebbe posizionare su quel filtro e e scrivere le % risultanti di ogni singolo valore che vengono scritte in "prono%"..
in pratica,parte dal primo -42,lo scrive in A4 "analisi"..i valori % risultanti vengono scritti ,come puoi vedere, nel foglio "prono%" riga 8 e dovrebbero essere riportati in Analisi sulla riga del valore analizzato...fatto cio si riazzera abk e si passa al singolo valore successivo (-39 in questo caso ) e stesso procedimento per i successivi fino all ultimo presente..
ho fatto esempio con abk ma ovviamente mi intesserebbe ovviamente che l operazione si potesse fare con qualsiasi colonna che scrivo in a2 di Analisi..
mi interessa in pratica avere in elenco la la % prodotta da ogni singolo valore di una qualsivoglia colonna filtro..
spero che sia chiaro..grazie sempre e comunque della tua disponibilità..un saluto

https://drive.google.com/file/d/1u4BhPx ... sp=sharing
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Sponsor
 

Re: ricerca statistica in archivio

Postdi Anthony47 » 16/05/22 23:36

Insomma vorresti che, fissata una colonna una macro provveda a selezionare uno per uno i valori possibili, e i dati calcolati in PRONO%-Riga 8 siano copiati su foglio Analisi, come fatto in Q4:AG10, per ognuno dei valori filtrati?
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: ricerca statistica in archivio

Postdi nignetto » 17/05/22 07:01

Si esatto
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: ricerca statistica in archivio

Postdi Anthony47 » 17/05/22 13:34

Ad esempio questa macro:
Codice: Seleziona tutto
Sub FiltraAnd()
Dim AK As Worksheet, wCol As String, FilFiel As Long
Dim fArrZZZ(), vArr, FilRan As String, vInd As Long
Dim PronoVal As Range, I As Long, NextR As Long

Sheets("analisi").Select
wCol = Sheets("analisi").Range("A2")
FilFiel = Cells(1, wCol).Column
Set AK = Sheets("ARCHIVIO")
Set PronoVal = Sheets("PRONO%").Range("A8:Q8")
'
FilRan = AK.AutoFilter.Range.Address
AK.Range(FilRan).AutoFilter field:=FilFiel
If Application.WorksheetFunction.CountA(AK.Cells(7, wCol).Resize(2)) = 2 Then
    vArr = AK.Range(AK.Cells(7, wCol), AK.Cells(7, wCol).End(xlDown)).Value
    vInd = 0
    For I = 6 To 6 + UBound(vArr) - 1
        vInd = vInd + 1
        If IsError(Application.Match(vArr(vInd, 1), Range("A2").Resize(UBound(vArr), 1), False)) Then
            AK.Range(FilRan).AutoFilter field:=FilFiel, Criteria1:=vArr(vInd, 1)
            NextR = Cells(Rows.Count, 1).End(xlUp).Row + 1
            Cells(NextR, 1).Value = vArr(vInd, 1)
            Cells(NextR, 2).Resize(1, PronoVal.Columns.Count).Value = PronoVal.Value
        End If
    Next I
    PronoVal.Copy
    If NextR > 0 Then
        Range("B3:R" & NextR).PasteSpecial xlPasteFormats
    End If
    Application.CutCopyMode = False
    Range("A2").Select
End If
End Sub

Inserita una valida colonna in ANALISI!A2 filtrera' la colonna con i possibili valori e scrivera' i risultati da A3, accodandoli a dati eventualemnte gia' presenti
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: ricerca statistica in archivio

Postdi nignetto » 17/05/22 14:20

Grazieee...stasera provo e ti dico
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: ricerca statistica in archivio

Postdi nignetto » 17/05/22 21:53

ho fatto un po di test..
l estrazione avviene correttamente...purtroppo ho visto che nelle colonne conntenenti valori % o numeri con decimali non estrae nulla..mentre su quelle con valori numeri interi si...per ora ho visto questo come problema
se possibile vorrei chiederti un paio di modifiche..una semplice..ossia quando termina l estrazione per una colonna..se ne voglio analizzare un altra devo cancellare tutti i dati estratti altrimenti la successiva non va..sarebbe possibile fare in modo che non debba cancellarli e quelli nuovi vengano accodati,magari con una riga di separazione?
altra cosa che semplificherebbe piu il lavoro sarebbe la possibilita di automatizzare l estrazione di piu colonne contemporaneamente..allego screen di esempio..
nel foglio analisi da a1:g1 scrivo colonne da analizzare singolarmente..
parte dalla prima a sinistra(rj)..analizza/scrive..poi passa alla seconda (rh)..analizza/scrive e cosi via fino a g1(rp)..ognuna separata da una riga..ovviamente credo che alla fine dell analisi di tutti i valori di ciascuna colonna,questa debba essere riiazzerata,intendo riattivati tutti i valori ,prima di passare alla successiva
...spero che riesca a correggere il problema del filtraggio,per le modifiche ovviamente non voglio portarti via troppo tempo :) solo se puoi..sempre grazie infinite
https://drive.google.com/file/d/1zJpfrm ... sp=sharing
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: ricerca statistica in archivio

Postdi Anthony47 » 17/05/22 22:32

l estrazione avviene correttamente...purtroppo ho visto che nelle colonne conntenenti valori % o numeri con decimali non estrae nulla..mentre su quelle con valori numeri interi si...per ora ho visto questo come problema
I campi calcolati su PRONO% sono tutti in formato percentuale (a parte la prima colonna), quindi stai dicendo che non ti estrae niente??? Io vedo una bella tabella con tutti i numerelli formattati come % senza decimali (ma i valori nelle celle sono spesso con cifre decimali, non visualizzati per aderire alla formattazione impostata in PRONO%)

Se mi dici qualcosa di piu' concreto posso verificare; es su colonna ABJ, filtrando col valore -39 la colonna H dovrebbe essere 123 mentre io vedo 321.

L'immagine che hai allegata non capisco come rapportarla col lavoro in oggetto

Per FACILITARE l'importazione di lavori fatti su piu' colonne ho aggiunto questo blocco:
Codice: Seleziona tutto
FilRan = AK.AutoFilter.Range.Address
AK.Range(FilRan).AutoFilter field:=FilFiel
'
'Aggiunte >>>
Dim StaR As Long
StaR = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Cells(StaR, 1) = wCol
'<<< End aggiunte
If Application.WorksheetFunction.CountA(AK.Cells(7, wCol).Resize(2)) = 2 Then

In questo modo a ogni estrazione la prima riga di colonna A viene compilata con la colonna impostata; sulle righe successive vengono riportati i dati estratti.

Per estrarre 3 colonne scriverai 3 volte la colonna in A2 e poi avvii la Sub FiltraAnd: ogni volta i dati vengono accodati ai precedenti, con una riga vuote di inframmezzo. La prima volta cancellerai a mano i dati gia' presenti da riga 3 in avanti
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: ricerca statistica in archivio

Postdi nignetto » 18/05/22 11:55

ho aggiunto blocco..ti allego il file nuovamente e mi sono permesso di fare video per spiegare il problema.credo che cosi si capisca meglio e ti possa agevolare..grazie
https://drive.google.com/file/d/1V3riT_ ... sp=sharing
https://drive.google.com/file/d/1Ds8dVf ... sp=sharing
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: ricerca statistica in archivio

Postdi Anthony47 » 18/05/22 16:56

Allora, nel codice mancava la cancellazione certa di precedenti filtri. L'ho aggiunta
Inoltre, le modifiche per facilitare l'esecuzione di piu' ricerche in sequenza erano piu' ampie del blocco che ti avevo segnalato ieri sera.
Ho poi notato che in tantissime colonne i dati da riga 7 verso il basso spesso sono intramezzate da righe vuote.
Moltissime colonne contengono dei dati, non so se voluti o residui di elaborazioni precedente, a partire dalla riga 15815 (es VA e successive).
Queste due ultime situazioni mettono in crisi l'identificazione certa delle righe occupate da ogni colonna; usero' arbitrariamente l'ipotesi che il limite per le celle filtrabili sia di 10mila righe.

Tutto cio' ha portato a questa penultima versione di macro:
Codice: Seleziona tutto
Sub FiltraAnd()
Dim AK As Worksheet, wCol As String, FilFiel As Long
Dim fArrZZZ(), vArr, FilRan As String, vInd As Long
Dim PronoVal As Range, I As Long, NextR As Long

Sheets("analisi").Select
wCol = Sheets("analisi").Range("A2")
FilFiel = Cells(1, wCol).Column
Set AK = Sheets("ARCHIVIO")
Set PronoVal = Sheets("PRONO%").Range("A8:Q8")
'
FilRan = AK.AutoFilter.Range.Address
On Error Resume Next
    AK.Range(FilRan).AutoFilter field:=FilFiel
    If AK.AutoFilterMode Then AK.ShowAllData
On Error GoTo 0
'
'Per ricerche ripetute:
Dim StaR As Long
StaR = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Debug.Print "INIZIO per " & wCol & " / " & StaR
Cells(StaR, 1) = wCol
Cells(StaR, 1).HorizontalAlignment = xlLeft
'<<< End
If Application.WorksheetFunction.CountA(AK.Cells(7, wCol).Resize(2)) > 0 Then
    vArr = AK.Range(AK.Cells(7, wCol), AK.Cells(10000, wCol).End(xlUp)).Value
    Debug.Print "Ubound vARR: " & UBound(vArr)
    vInd = 0
    For I = 6 To 6 + UBound(vArr) - 1
        vInd = vInd + 1
        If IsError(Application.Match(" " & vArr(vInd, 1), Range("A" & StaR).Resize(UBound(vArr), 1), False)) Then
            AK.Range(FilRan).AutoFilter field:=FilFiel, Criteria1:=CStr(vArr(vInd, 1))
            If Sheets("Archivio").Range("C2") = 0 Then
                Debug.Print "Trovato 0: (wCol / filtro) " & wCol & " --/-- " & vArr(vInd, 1)
            End If
            NextR = Cells(Rows.Count, 1).End(xlUp).Row + 1
            Cells(NextR, 1).Value = "' " & vArr(vInd, 1)
            Cells(NextR, 2).Resize(1, PronoVal.Columns.Count).Value = PronoVal.Value
        End If
    Next I
    PronoVal.Copy
    If NextR > 0 Then
        Range("B3:R" & NextR).PasteSpecial xlPasteFormats
        Cells(StaR + 1, 1).Resize(NextR - StaR, 1).HorizontalAlignment = xlCenter
    End If
    Application.CutCopyMode = False
    Range("A2").Select
End If
Debug.Print "End per " & wCol, "Area: " & StaR & ":" & NextR
Beep
End Sub

Ne ho approfittato anche per inserire alcune informazioni di debug, che vengono scritte nella "finestra Immediata" del vba (dal vba si apre con Contr-g) che potrebbero tornare utili in caso di altri problemi.

Per me la macro gira felicemente; che giri anche facendo il lavoro atteso lo lascio debuggare a te...
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: ricerca statistica in archivio

Postdi nignetto » 18/05/22 22:43

purtroppo la situazione non mi è migliorata..applicando la macro sul foglio che ho condiviso funziona..mentre su quello originale identico ma con molti meno dati non va..o va in errore o addirittura estrae valori della colonna prima della riga 6 ..ovviamente non un problema macro..ma il perche non capisco..
invece la vecchia macro con aggiunta invece funziona anche sul foglio originale...il problema rimane sempre lo stesso..ossia nelle colonne con valori con decimali o percentuali...estrae dati ma con 0 record e non congrui..ho provato a ripulire una colonna del genere da formule con errore o vuote ma nulla per fargli fare una ricerca pulita ma nulla
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: ricerca statistica in archivio

Postdi Anthony47 » 19/05/22 08:57

Mi pare che tu dica che sul file che hai pubblicato le estrazioni sono ora corrette mentre su altro file con altri dati l'output e' inconsistente.
Piu' che provare con quel che ho io non posso; vedi se riesci a creare un nuovo demo file, magari con poche colonne e dati parziali nel foglio ARCHIVIO con cui replicare gli errori e trovare la quadra.
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: ricerca statistica in archivio

Postdi nignetto » 20/05/22 21:33

facendo vari test ,anche inserendo valori in colonna manualmente,credo di aver capito 2 problemi...
il primo che manda in crisi la macro è la presenza degli errori Div/0 nelle celle in colonna..il secondo che la macro non riesce ad estrarre i valori perle celle che hanno piu di 2 decimali; ad esempio 0,31 lo riconosce ma se trova 0,312 o piu decimali non estrae record...in molte colonne ho questi valori che ho ridotto a 2 decimali con la funzione "diminuisci decimali" ma quando li va ad estrarre li riconosce sempre con i decimali originali che sono molto piu di 2..per il primo problema non so se possibile dirgli di ignorare celle con errore o per il secondo di arrotondare in automatico il valore..dimmi tu ..grazie mille
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: ricerca statistica in archivio

Postdi Anthony47 » 21/05/22 10:17

Il sort potrebbe andare in crisi se lavorasse su numeri di oltre 15 cifre significative; che vada in crisi con 3 decimali non l'ho mai trovato...

Per lenire il problema puoi usare nelle tue formule ARROTONDA, per definire il numero max di decimali voluti nei calcoli.

L'errore DIV/0 ce l'hai nelle colonne da filtrare (e allora possiamo provare a skipparlo) o nei risultati da copiare?
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: ricerca statistica in archivio

Postdi nignetto » 21/05/22 12:47

Proverò con arrotonda..per il div se riesci è meglio skipparlo.. grazie infinite
PS potresti anche togliere il codice che azzarda l'intero filtraggio?nel senso che mi interessa filtrare anche se lascio una conlonna da me scelta con un filtro?
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: ricerca statistica in archivio

Postdi Anthony47 » 21/05/22 14:35

Per evitare di usare come filtro valori di errore aggiungiamo un If /Endif nel codice originale:
Codice: Seleziona tutto
    For I = 6 To 6 + UBound(vArr) - 1
        vInd = vInd + 1
 'If /End if aggiuntivo per evitare di usare valori in errore:
        If Not IsError(vArr(vInd, 1)) Then
            If IsError(Application.Match(" " & vArr(vInd, 1), Range("A" & StaR).Resize(UBound(vArr), 1), False)) Then
                AK.Range(FilRan).AutoFilter field:=FilFiel, Criteria1:=CStr(vArr(vInd, 1))
                If Sheets("Archivio").Range("C2") = 0 Then
                    Debug.Print "Trovato 0: (wCol / filtro) " & wCol & " --/-- " & vArr(vInd, 1)
                End If
                NextR = Cells(Rows.Count, 1).End(xlUp).Row + 1
                Cells(NextR, 1).Value = "' " & vArr(vInd, 1)
                Cells(NextR, 2).Resize(1, PronoVal.Columns.Count).Value = PronoVal.Value
            End If
        End If
    Next I


PS potresti anche togliere il codice che azzarda l'intero filtraggio?nel senso che mi interessa filtrare anche se lascio una conlonna da me scelta con un filtro?
Probabilmente si puo' fare, ma per il momento non ho capito :D cosa vorresti...
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: ricerca statistica in archivio

Postdi nignetto » 22/05/22 18:17

in effetti ho scritto veloce senza ricontrollare e non si capisce :-)
intendo dire se ad esempio applico un filtro alla colonna G e vado ad analizzare un altra non mi deve andare ad azzerare il filtro G..quindi deve rimanere valorizzata..
ho visto che durante l estrazione i valori vengono presi casualmente..sarebbe possibile averli ordinati in modo decrescente?è vero che lo posso fare manualmente ma quando faccio piu estrazioni diventa piu complicato e visivamente mi aiuta cercare cio che mi interessa

per quanto riguarda gli errori il div non da piu fastidio ma per le colonne con i decimali funziona solo con 1 e vanno arrotondate..cmq non è un grosso problema anche se sarebbe curioso capire il perchè
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: ricerca statistica in archivio

Postdi Anthony47 » 23/05/22 10:45

intendo dire se ad esempio applico un filtro alla colonna G e vado ad analizzare un altra non mi deve andare ad azzerare il filtro G..quindi deve rimanere valorizzata..
Traduco: filtro manualmente una colonna, vorrei che la macro non mi eliminasse quel filtro.

Esecuzione: eliminiamo l'azzeramento dei filtri in avvio della macro e inseriamo l'azzeramento del solo filtro utilizzato dalla macro prima della conclusione della macro.

ho visto che durante l estrazione i valori vengono presi casualmente..sarebbe possibile averli ordinati in modo decrescente?è vero che lo posso fare manualmente ma quando faccio piu estrazioni diventa piu complicato e visivamente mi aiuta cercare cio che mi interessa
Non sono presi a caso, ma nell'ordine in cui compaiono nella colonna. Comunque si puo' fare.

Esecuzione: aggiunta della Function bbSort1d per ordinare la matrice dei valori


per quanto riguarda gli errori il div non da piu fastidio...
Bene bene



...ma per le colonne con i decimali funziona solo con 1 e vanno arrotondate..cmq non è un grosso problema anche se sarebbe curioso capire il perchè
Come detto mi aspetterei problemi con numeri irrazionali che per essere rappresentati usano tutte le cifre significative usate in Excel (15). Questo succede perche' la rappresentazione numerica del vba e' autonoma da quella fatta da excel, per cui il numero 0.123456789012345 in excel facilmente e' diverso dallo stesso numero memorizzato in vba.
Ma con pochi decimali non ho mai notato problemi. Tra l'altro il file che hai condiviso. contiene numerose colonne con 2 decimali, e su esse non ho problemi; se hai una colonna con valori che generano problemi allora condividi almeno quella colonna e vedremo di risolvere la cosa, o almeno di capirla

La penultima versione del codice quindi e':
Codice: Seleziona tutto
Sub FiltraAndFiltra()
Dim AK As Worksheet, wCol As String, FilFiel As Long
Dim fArrZZZ(), vArr, FilRan As String, vInd As Long
Dim PronoVal As Range, I As Long, NextR As Long

Sheets("analisi").Select
wCol = Sheets("analisi").Range("A2")
FilFiel = Cells(1, wCol).Column
Set AK = Sheets("ARCHIVIO")
Set PronoVal = Sheets("PRONO%").Range("A8:Q8")
'
FilRan = AK.AutoFilter.Range.Address
''On Error Resume Next
''    AK.Range(FilRan).AutoFilter field:=FilFiel
''    If AK.AutoFilterMode Then AK.ShowAllData
''On Error GoTo 0
'
'Per ricerche ripetute:
Dim StaR As Long
StaR = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Debug.Print "INIZIO per " & wCol & " / " & StaR
Cells(StaR, 1) = wCol
Cells(StaR, 1).HorizontalAlignment = xlLeft
'<<< End
If Application.WorksheetFunction.CountA(AK.Cells(7, wCol).Resize(2)) > 0 Then
    vArr = AK.Range(AK.Cells(7, wCol), AK.Cells(10000, wCol).End(xlUp)).Value
    vArr = bbSort1d(vArr)
    Debug.Print "Ubound vARR: " & UBound(vArr)
    vInd = 0
    For I = 6 To 6 + UBound(vArr) - 1
        vInd = vInd + 1
        'If /End if aggiuntivo per evitare di usare valori in errore
        If Not IsError(vArr(vInd, 1)) Then
            If IsError(Application.Match(" " & vArr(vInd, 1), Range("A" & StaR).Resize(UBound(vArr), 1), False)) Then
                AK.Range(FilRan).AutoFilter field:=FilFiel, Criteria1:=CStr(vArr(vInd, 1))
                If Sheets("Archivio").Range("C2") = 0 Then
                    Debug.Print "Trovato 0: (wCol / filtro) " & wCol & " --/-- " & vArr(vInd, 1)
                End If
                NextR = Cells(Rows.Count, 1).End(xlUp).Row + 1
                Cells(NextR, 1).Value = "' " & vArr(vInd, 1)
                Cells(NextR, 2).Resize(1, PronoVal.Columns.Count).Value = PronoVal.Value
            End If
        End If
        DoEvents
    Next I
    PronoVal.Copy
    If NextR > 0 Then
        Range("B3:R" & NextR).PasteSpecial xlPasteFormats
        Cells(StaR + 1, 1).Resize(NextR - StaR, 1).HorizontalAlignment = xlCenter
    End If
    Application.CutCopyMode = False
    Range("A2").Select
End If
AK.Range(FilRan).AutoFilter field:=FilFiel
Debug.Print "End per " & wCol, "Area: " & StaR & ":" & NextR
Beep
End Sub


Function bbSort1d(ByRef oArr) As Variant
Dim tArr, I As Long, J As Long
'
'ordinamento in Bubble Sort:
For I = 1 To UBound(oArr) - 2
    If Not IsError(oArr(I, 1)) Then
        For J = I + 1 To UBound(oArr) - 1
            If oArr(I, 1) > oArr(J, 1) Then
                tArr = oArr(I, 1)
                oArr(I, 1) = oArr(J, 1)
                oArr(J, 1) = tArr
            End If
        Next J
    End If
Next I
bbSort1d = oArr
End Function
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: ricerca statistica in archivio

Postdi nignetto » 23/05/22 21:27

ciao anthony,la macro fa il suo dovere...purtroppo alcune colonne mi danno sempre dei problemi..anche se con qualche escamotage riesco a farle interrogare..cmq non voglio disturbarti oltremodo..in questi giorni cerco di testare bene per avere bene il quadro della situazione..intanto ti rinnovo sempre i miei ringraziamenti..persone come te,cosi disponibili e preparate, sono una rarità
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: ricerca statistica in archivio

Postdi nignetto » 26/05/22 22:04

ciao anthony..direi tutto ok..sonon riuscito a interrogare correttamente le colonne "problematiche" modificando i valori..l ultima "rifinitura" che ti chiedo sarebbe utile per automatizzare la ricerca..
ossia valorizzare le celle della riga1 in Analisi con le colonne da interrogare e in automatico far avviare la ricerca una per una da a1 in poi..esempio
valorizzo da A1 a P1
la macro prende il rif colonna in a1,la copia in a2 e si avvia..finito questa passa a b1 e stessa cosa..cosi fino a p1..in pratica si ferma dove trova la prima cella vuota in riga....in questo modo potrei mettere in ricerca tutte le colonne che voglio in automatico,,ora devo aspettare che finisce e inserire manualmente..si puo fare?grazie
nignetto
Utente Junior
 
Post: 63
Iscritto il: 21/02/22 17:54

Re: ricerca statistica in archivio

Postdi Anthony47 » 27/05/22 14:23

Allora, mi pare che vuoi eseguire in cascata tante ricerche, posizionando le colonne di fitro in foglio Analisi, da A2 (come ho ipotizzato fino adesso) verso destra.
Per questo inseriamo il cuore della precedente Sub FiltraAndFiltra in un Do /Loop per ripetere fino all'ultima colonna (di riga 2) valorizzata.
Il codice nuovo:
Codice: Seleziona tutto
Sub FiltraAndFiltraMulti()
Dim AK As Worksheet, wCol As String, FilFiel As Long
Dim fArrZZZ(), vArr, FilRan As String, vInd As Long
Dim PronoVal As Range, I As Long, NextR As Long
Dim hOff As Long

Sheets("analisi").Select

Do              'Ricicla per filtrare le colonne successive
'=======
wCol = Sheets("analisi").Range("A2").Offset(0, hOff)
If Len(wCol) = 0 Then Exit Do
FilFiel = Cells(1, wCol).Column
Set AK = Sheets("ARCHIVIO")
Set PronoVal = Sheets("PRONO%").Range("A8:Q8")
'
FilRan = AK.AutoFilter.Range.Address
''On Error Resume Next
''    AK.Range(FilRan).AutoFilter field:=FilFiel
''    If AK.AutoFilterMode Then AK.ShowAllData
''On Error GoTo 0
'
'Per ricerche ripetute:
Dim StaR As Long
StaR = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Debug.Print "INIZIO per " & wCol & " / " & StaR
Cells(StaR, 1) = wCol
Cells(StaR, 1).HorizontalAlignment = xlLeft
'<<< End
If Application.WorksheetFunction.CountA(AK.Cells(7, wCol).Resize(2)) > 0 Then
    vArr = AK.Range(AK.Cells(7, wCol), AK.Cells(10000, wCol).End(xlUp)).Value
    vArr = bbSort1d(vArr)
    Debug.Print "Ubound vARR: " & UBound(vArr)
    vInd = 0
    For I = 6 To 6 + UBound(vArr) - 1
        vInd = vInd + 1
        'If /End if aggiuntivo per evitare di usare valori in errore
        If Not IsError(vArr(vInd, 1)) Then
            If IsError(Application.Match(" " & vArr(vInd, 1), Range("A" & StaR).Resize(UBound(vArr), 1), False)) Then
                AK.Range(FilRan).AutoFilter field:=FilFiel, Criteria1:=CStr(vArr(vInd, 1))
                If Sheets("Archivio").Range("C2") = 0 Then
                    Debug.Print "Trovato 0: (wCol / filtro) " & wCol & " --/-- " & vArr(vInd, 1)
                End If
                NextR = Cells(Rows.Count, 1).End(xlUp).Row + 1
                Cells(NextR, 1).Value = "' " & vArr(vInd, 1)
                Cells(NextR, 2).Resize(1, PronoVal.Columns.Count).Value = PronoVal.Value
            End If
        End If
        DoEvents
    Next I
    PronoVal.Copy
    If NextR > 0 Then
        Range("B3:R" & NextR).PasteSpecial xlPasteFormats
        Cells(StaR + 1, 1).Resize(NextR - StaR, 1).HorizontalAlignment = xlCenter
    End If
    Application.CutCopyMode = False
    Range("A2").Select
End If
AK.Range(FilRan).AutoFilter field:=FilFiel
Debug.Print "End per " & wCol, "Area: " & StaR & ":" & NextR
hOff = hOff + 1
If hOff > 100 Then Exit Do
'=====
Loop
Beep
End Sub

Rimane immutato il codice della Function bbSort1d

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

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "ricerca statistica in archivio":


Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti