Sviluppare funzionalita su Microsoft Office con VBA Filtrare dei in base ad una condizione

Login Registrati
Stai vedendo 25 articoli - dal 1 a 25 (di 40 totali)
  • Autore
    Articoli
  • #44188 Score: 0 | Risposta

    planera63
    Partecipante

      Ciao.

      Io ho la versione di Excel 2019 MSO (versione 2401) a 64 bit di Office 365 Business 2019

      Allora nel file in allegato io ho dei dati chimico-fisici acquisiti in mare mediante una sonda. Per ogni stazione di campionamento (NationalStationID), caratterizzata dall'appartenenza ad una regione (Region) e ad un area (MRU) e dalla profondità del fondale (SeaDepth) sono stati fatti nel 2021 diverse campagne di acquisizione definite dai campi (Year, Month, Day, Time). Per ogni profilo effettuato dalla sonda in un giorno (es.: Stazione: ITA06SMLG1, SeaDepth=15, 12/1/2021, i dati iniziano ad essere acquisiti per vari parametri presenti nel campo Determin_Nutrients, a differenti profondità indicate nel campo SampleDepth; per questo profilo i dati sono stati acquisiti fino alla profondità di 15 m, cioè fino al fondo.

      Tuttavia in alcune stazioni la sonda non scende fino al fondo, specialmente nelle stazioni profonde, per cui i dati si arrestano ad una certa profondità. Nel primo caso che vi ho descritto invece la sonda è scesa fino al fondo.

      Andiamo al dunque. 

      Io devo selezionare del profilo di quelle stazioni, selezionando tutti i campi identificativi (MRU, Region, NationalStationID, Year, Month, Day, Time) in cui la sonda raggiunge il fondo, cioè in cui ASS(SeaDepth - SampleDepth(massima profondità del profilo) sia al massimo 1, e mi interessa anche il dato di "Dissolved oxygen" associato alla massima profondità presente nel campo "Concentration".

      Riferendosi all'esempio di prima il record che mi interessa dell'intero profilo dovrebbe contenere solo i seguenti dati, rispetto all'intero profilo che inizia alla riga 2 e finisce alla riga 128

      ID,  IT, NAS, Friuli Venezia Giulia, ITA06SMLG1, 15, 2021, 1, 12, 10:53:48 (ora di quando la sonda raggiunge il fondo), Dissolved oxygen, µmol/l, 247,17 (valore di Concentration associato alla quota più profonda di SampleDepth), 15 (SampleDepth), ASS(SeaDepth- SampleDepth) [campo calcolato]

      Va bene anche selezionare i dati di tutti i profili, pure di quelli dove ASS(SeaDepth- SampleDepth) > 1, poi mi ordino o filtro quelli che mi interessano.

      Io sono riuscito con le PivotTable a selezionare per ciascun profilo di una stazione la profondità del fondale e la profondità massima raggiunta della sonda (messi nello stesso rigo), però putroppo non sono riuscito a ad avere il valore del Dissolved oxygen associato alla massima profondità della sonda.

      Spero di essermi spiegato bene e chiaro. Se avete da chiedermi qualcosa non esitate a contattarmi.

      Vi allego il file di prova che contiene solo una parte dei dati.

       

      Aspetto con ansia un vostro aiuto, sperando che non sia necessario trasferire tutto in Access per fare questa select. 

      By Albatros54: per  privacy rimosso contatto Telefonico

      Allegati:
      You must be logged in to view attached files.
      #44190 Score: 0 | Risposta

      Aldo Ercolini
      Partecipante
        19 pts

        Basta applicare i filtri alle colonne in base alle tue esigenze.

        in allegato il file con i filtri applicati, mancando la colonna ASS non e' corretto, ma il concetto funziona.

        Allegati:
        You must be logged in to view attached files.
        #44192 Score: 0 | Risposta

        planera63
        Partecipante

          Grazie Aldo.

          La cosa purtroppo è più complessa, sennò non avrei chiesto il vostro aiuto.

          Il valore massimo di SampleDeath cambia per la stessa stazione da mese a mese (le indagini si svolgono ogni due mesi in un solo giorno per la maggioranza delle regioni; solo per EMR, Veneto e Marche tutti i mesi). Come puoi vedere per la stazione ITA06SMLG3 per 5 mesi è 20m e per un mese è 21m. Inoltre da stazione a stazione anche cambia la massima profondità di campionamento/misurazione.

          Poi, immaginando di lavorare sul complesso dei dati (circa 500.000 record o righe in Excel), dovrei filtrare una stazione e poi filtrare le profondità massime (che possono variare nel corso dei mesi, quindi dovrei valutare quali sono quelle massime). A questo punto mi copio questi dati in un nuovo foglio. Poi rifaccio le operazioni fatte per una nuova stazione, e vado avanti così. Probabilmente dopo 1-2 giorni di estenuanti copia e incolla finirei.

          Non è possibile con la TabellaPivot o PowerPivot riuscire ad automatizzare il tutto, magari inserendo una Select in linguaggio SQL ?

          Oppure con una procedura in VB, magari inserendo sempre una Select in linguaggio SQL ?

          Io purtroppo mi tocca analizzare questi dati ogni 5-6 anni e poi mi occupo di altro, per cui non ho mai approfondito l'uso di VB per Excel o le potenzialità delle PowerPivot o delle Query in Excel. Se dovessi occuparmi di gestire dati molto più frequentemente allora sicuramente avrei cercato di imparare il linguaggio di VB, o di R, o il linguaggio SQL per creare query complesse in ACCESS.

          Fidando nel vostro supporto, attendo qualche soluzione al mio problema. Se devo smanettare un po' per adattarla alla mia situazione non c'è problema.   

           

                

          #44193 Score: 0 | Risposta

          Aldo Ercolini
          Partecipante
            19 pts

            In base alla tua richiesta

            "Riferendosi all'esempio di prima il record che mi interessa dell'intero profilo dovrebbe contenere solo i seguenti dati, rispetto all'intero profilo che inizia alla riga 2 e finisce alla riga 128

            ID, IT, NAS, Friuli Venezia Giulia, ITA06SMLG1, 15, 2021, 1, 12, 10:53:48 (ora di quando la sonda raggiunge il fondo), Dissolved oxygen, µmol/l, 247,17 (valore di Concentration associato alla quota più profonda di SampleDepth), 15 (SampleDepth), ASS(SeaDepth- SampleDepth) [campo calcolato]"

            e al file allegato la soluzione proposta soddisfava il quesito.

            Per fare quello che vuoi devi allegare il file originale da dove prelevare i dati (Anche parziale, anzi parziale con due/tre stazioni) ,facciamo una macro che contiene una query con i parametri da te richiesti, scriviamo i record corrispondenti in un nuovo foglio/file.

            E' quello che ti serve?

             

            #44194 Score: 0 | Risposta

            planera63
            Partecipante

              Grazie Aldo.

              Il file allegato già contiene i dati di più stazioni. 
              Per esempio dalla riga 129 iniziano i dati della stazione ITA06SMLG2,  campionata sempre a gennaio ma con fondale (colonna F) pari a 12m.
              Seguono le stazioni, ITA06SMLG3, ITA06SMTS1, ...; cioè tutte le stazioni del FVG e Puglia campionate nel corso dei vari mesi del 2021. Io ho i dati di tutte le regioni bagnate dal mare, per il periodo 2016-2021.
              Puoi verificarlo applicando il filtro sulle colonne dei dati.

              #44195 Score: 0 | Risposta

              scossa
              Partecipante
                37 pts

                Puoi riallegare il file con, in Foglio2, il risultato che ti attendi per almeno un paio di stazioni (quindi con le colonne da estrarre ed i valori attesi) in modo da capire bene quello che vuoi ottenere.

                #44196 Score: 0 | Risposta

                planera63
                Partecipante

                  OK. Ora ho una riunione. Appena finito te lo mando.

                  #44199 Score: 0 | Risposta

                  Aldo Ercolini
                  Partecipante
                    19 pts

                    Allora ho fatto una prima scremata.

                    Nel file allegato premendo il pulsante FILTRA scrive nel foglio DatiEstratii tutte le righe che hanno ASS <= 1 e "Dissolved oxygen" associato alla massima profondità presente nel campo "Concentration".

                    Pero' ci sono delle cose che non mi tornano.

                    Di massime profondita, nello stesso profilo ce ne sono piu' di una, e addirittura alcune ASS sono con segno negativo cioe la profondita' della sonda e maggiore della profondita del fondale, se non ho capito male.

                    Guardalo e  dimmi le cose da cambiare nella selezione delle righe.

                     

                    Allegati:
                    You must be logged in to view attached files.
                    #44201 Score: 0 | Risposta

                    alfrimpa
                    Partecipante
                      33 pts

                      @planera63 

                      Devi cancellare il tuo numero di cellulare che hai inserito nel primo post.

                      In un forum pubblico non serve ed è un dato sensibile.

                      #44213 Score: 0 | Risposta

                      planera63
                      Partecipante

                        Ciao Aldo.

                        Scusa ma ieri pomeriggio sono stato impegnato.

                        Ho visto il risultato della macro nel foglio "DatiEstratti". Funziona, ma andrebbe fatta una piccola correzione per eliminare i record in più per ogni profilo giornaliero. Potrei farlo anche manualmente ma, trattandosi di migliaia di record, impiegherei molto tempo; inoltre, non credo che ad uno bravo come te costa molto tempo.

                        Nel file che ti rimando ho evidenziato in verde la riga da mantenere e in rosso quelle che non vanno estratte relative all'acquisizione di quella stazione per quella data. Per alcune stazioni è solo una riga da non estrarre (es: ITA06SMLG1) e per altre sono più di una (1CA03, 1CA04, 9PN02bis).

                        La riga da selezionare è quella con il valore del campo ASS più vicino a zero, perché a me interessa che venga estratta una sola riga e cioè un solo dato dell'ossigeno disciolto  per ciascuna stazione campionata per quella data. Ci sono delle situazioni però da valutare.

                        Per esempio per la stazione 1CA03 ci sono due valori di ASS equidistanti dallo 0 (che manca), 0,5 e -0,5. In questo caso basta eliminare i valori negativi e risolviamo. Quindi basta nello script fare in modo di non estrarre i record con valori di ASS negativi.

                        Eliminando i valori negativi, per assurdo in una stazione potrebbero esserci acquisizioni di dati a breve distanza tra loro per cui ci potrebbero essere record con ASS uaguale a 0; 0,5; 0,75; 1,0; 1,20. In questo caso dovrebbe essere estratta solo quella con ASS pari a 0. 

                        In una stazione con ASS pari a 0,75; 1,00; 1,30; andrebbe estratto quello con ASS = 0,75

                        Spero sia tutto chiaro  

                           

                        Allegati:
                        You must be logged in to view attached files.
                        #44219 Score: 0 | Risposta

                        Raffaele53
                        Partecipante
                          23 pts

                          >>>perché a me interessa che venga estratta una sola riga e cioè un solo dato dell'ossigeno disciolto per ciascuna stazione campionata per quella data<<<

                          Io non sono bravo, vedendo l'allegato in DatiEstratti capisco il motivo perche la riga3 rimane e  la Riga2 debba essere eliminata.

                          Domanda, mà allora pure le righe4,6,8 devono essere eliminate ecc ecc ecc? Perchè non sono colorate?

                          Ps. Quasi pronto, mà devo capire se il mio pensiero è giusto.

                          Edit. Se non sbaglio, desideri una riga sola con date differenti ed (ASS <= 1)

                          #44222 Score: 0 | Risposta

                          planera63
                          Partecipante

                            Le righe colorate erano solo un esempio. Certamente anche le righe 4,6 e 8 non vanno estratte, così come così come le righe 10, 12 e 14, ed altre ancora.

                            Le condizioni sono le seguenti. 

                            Ad ogni stazione (NationalStationID) sono associate più date di campionamento nell'anno. Per ogni data di una determinata stazione sede essere selezionata una sola riga. Se il valore del campo ASS è positivo, allora va estratta quella riga con valore di ASS uguale a zero o più vicino allo zero. Se il valore del campo ASS è negativo, allora va estratta quella riga con il valore di ASS più negativo. 

                            Scusatemi mi sono accorto adesso che nel precedente commento ho fatto un errore nel definire le condizioni. In quest'ultimo commento sono descritte le condizioni corrette per la selezione della riga da estrarre per ciascuna campagna di campionamento eseguita in ogni stazione per una determinata campagna.

                            Rimando l'allegato con le righe evidenziate da estrarre in verde e da non estrarre in rosso.

                            Grazie mille     

                             

                             

                            Allegati:
                            You must be logged in to view attached files.
                            #44231 Score: 0 | Risposta

                            scossa
                            Partecipante
                              37 pts

                              Non hai allegato un foglio coi dati richiesti per almeno due o tre stazioni (tutte le righe che vorresti venissero estratte)  ed ilfoglio  DatiEstratti del file che hai allegato non chiarisce nulla.

                              Io con una query Access estrarrei questi 115 record (ho omesso le prime colonne per fare stare i dati più importanti nel post):

                              StationID 	Giorno   	Ora     	Nutrients       	Unit  	Conc.	SampleDepth
                              1CA02bis  	25-feb-21	12:19:38	Dissolved oxygen	µmol/l	247,50	16,5
                              1CA02bis  	30-mar-21	12:30:48	Dissolved oxygen	µmol/l	288,40	15,5
                              1CA02bis  	13-mag-21	12:27:21	Dissolved oxygen	µmol/l	256,60	15,5
                              1CA02bis  	15-set-21	14:25:39	Dissolved oxygen	µmol/l	198,40	16,5
                              1CA03     	25-feb-21	13:12:21	Dissolved oxygen	µmol/l	249,40	26,5
                              1CA03     	30-mar-21	13:18:00	Dissolved oxygen	µmol/l	270,20	25,5
                              1CA03     	13-mag-21	13:05:36	Dissolved oxygen	µmol/l	262,20	35,5
                              1CA03     	12-lug-21	15:11:05	Dissolved oxygen	µmol/l	290,00	32,5
                              1CA03     	15-set-21	13:47:36	Dissolved oxygen	µmol/l	231,60	34,5
                              1CA04     	25-feb-21	13:58:14	Dissolved oxygen	µmol/l	263,80	90,5
                              1CA04     	30-mar-21	14:28:56	Dissolved oxygen	µmol/l	250,00	82,5
                              1CA04     	13-mag-21	13:48:11	Dissolved oxygen	µmol/l	247,50	45,5
                              1CA04     	15-set-21	12:54:59	Dissolved oxygen	µmol/l	246,60	82,5
                              8PC02bis  	22-feb-21	12:30:56	Dissolved oxygen	µmol/l	245,30	28,5
                              8PC02bis  	26-mar-21	16:30:00	Dissolved oxygen	µmol/l	252,81	31,5
                              8PC02bis  	28-mag-21	12:38:43	Dissolved oxygen	µmol/l	269,40	29,5
                              8PC02bis  	29-lug-21	12:18:00	Dissolved oxygen	µmol/l	258,40	29,5
                              8PC02bis  	14-set-21	12:02:11	Dissolved oxygen	µmol/l	224,40	32,5
                              8PC03     	22-feb-21	11:44:57	Dissolved oxygen	µmol/l	241,90	47,5
                              8PC03     	26-mar-21	15:40:00	Dissolved oxygen	µmol/l	248,80	45,5
                              8PC03     	28-mag-21	11:51:38	Dissolved oxygen	µmol/l	263,40	45,5
                              8PC03     	29-lug-21	11:30:00	Dissolved oxygen	µmol/l	238,40	48,5
                              8PC03     	14-set-21	11:25:16	Dissolved oxygen	µmol/l	212,80	48,5
                              8PC04     	22-feb-21	10:36:00	Dissolved oxygen	µmol/l	241,30	98,5
                              8PC04     	26-mar-21	14:15:00	Dissolved oxygen	µmol/l	239,10	97,5
                              8PC04     	28-mag-21	10:33:32	Dissolved oxygen	µmol/l	435,00	101,5
                              8PC04     	14-set-21	10:17:03	Dissolved oxygen	µmol/l	167,20	96,5
                              9PN02bis  	23-feb-21	10:19:50	Dissolved oxygen	µmol/l	242,20	42,5
                              9PN02bis  	26-mar-21	13:25:00	Dissolved oxygen	µmol/l	248,80	36,5
                              9PN02bis  	28-mag-21	16:51:27	Dissolved oxygen	µmol/l	349,40	45,5
                              9PN02bis  	12-ago-21	12:40:00	Dissolved oxygen	µmol/l	230,30	35,5
                              9PN02bis  	15-set-21	12:39:04	Dissolved oxygen	µmol/l	241,90	36,5
                              9PN03     	23-feb-21	09:51:58	Dissolved oxygen	µmol/l	240,30	99,5
                              9PN03     	26-mar-21	12:40:00	Dissolved oxygen	µmol/l	231,30	100,5
                              9PN03     	28-mag-21	16:05:13	Dissolved oxygen	µmol/l	260,90	91,5
                              9PN03     	12-ago-21	11:56:02	Dissolved oxygen	µmol/l	247,80	95,5
                              9PN03     	15-set-21	12:01:27	Dissolved oxygen	µmol/l	223,80	105,5
                              9PN04     	23-feb-21	09:22:14	Dissolved oxygen	µmol/l	230,30	86,5
                              9PN04     	26-mar-21	11:05:00	Dissolved oxygen	µmol/l	226,90	100,5
                              9PN04     	28-mag-21	14:57:39	Dissolved oxygen	µmol/l	231,30	99,5
                              9PN04     	12-ago-21	11:07:31	Dissolved oxygen	µmol/l	240,60	98,5
                              9PN04     	15-set-21	10:52:04	Dissolved oxygen	µmol/l	223,10	106,5
                              ITA06SMLG1	12-gen-21	10:53:48	Dissolved oxygen	µmol/l	274,17	15
                              ITA06SMLG1	08-mar-21	11:58:31	Dissolved oxygen	µmol/l	280,18	14
                              ITA06SMLG1	26-mag-21	10:45:08	Dissolved oxygen	µmol/l	248,00	15
                              ITA06SMLG1	12-lug-21	11:05:14	Dissolved oxygen	µmol/l	241,66	15
                              ITA06SMLG1	14-set-21	11:25:03	Dissolved oxygen	µmol/l	177,48	15
                              ITA06SMLG2	12-gen-21	11:36:42	Dissolved oxygen	µmol/l	268,13	12
                              ITA06SMLG2	08-mar-21	12:43:30	Dissolved oxygen	µmol/l	279,29	11
                              ITA06SMLG2	26-mag-21	11:26:22	Dissolved oxygen	µmol/l	259,27	12
                              ITA06SMLG2	12-lug-21	11:46:30	Dissolved oxygen	µmol/l	267,69	12
                              ITA06SMLG2	14-set-21	12:06:14	Dissolved oxygen	µmol/l	216,83	12
                              ITA06SMLG3	12-gen-21	12:26:17	Dissolved oxygen	µmol/l	260,63	20
                              ITA06SMLG3	08-mar-21	13:47:55	Dissolved oxygen	µmol/l	271,66	20
                              ITA06SMLG3	26-mag-21	12:23:27	Dissolved oxygen	µmol/l	247,63	20
                              ITA06SMLG3	12-lug-21	11:36:22	Dissolved oxygen	µmol/l	257,84	20
                              ITA06SMLG3	14-set-21	13:12:47	Dissolved oxygen	µmol/l	215,28	21
                              ITA06SMTS1	13-gen-21	12:56:34	Dissolved oxygen	µmol/l	263,75	22
                              ITA06SMTS1	11-mar-21	12:23:08	Dissolved oxygen	µmol/l	289,21	22
                              ITA06SMTS1	18-mag-21	13:10:31	Dissolved oxygen	µmol/l	225,19	22
                              ITA06SMTS1	13-lug-21	12:44:24	Dissolved oxygen	µmol/l	191,99	23
                              ITA06SMTS1	15-set-21	12:23:19	Dissolved oxygen	µmol/l	176,45	22
                              ITA06SMTS2	13-gen-21	12:11:59	Dissolved oxygen	µmol/l	266,88	25
                              ITA06SMTS2	11-mar-21	11:48:34	Dissolved oxygen	µmol/l	293,84	24
                              ITA06SMTS2	18-mag-21	12:19:12	Dissolved oxygen	µmol/l	244,69	24
                              ITA06SMTS2	13-lug-21	12:45:39	Dissolved oxygen	µmol/l	160,41	25
                              ITA06SMTS2	15-set-21	11:34:41	Dissolved oxygen	µmol/l	197,66	24
                              ITA06SMTS3	13-gen-21	10:54:16	Dissolved oxygen	µmol/l	267,19	23
                              ITA06SMTS3	11-mar-21	10:21:49	Dissolved oxygen	µmol/l	292,35	22
                              ITA06SMTS3	18-mag-21	10:49:24	Dissolved oxygen	µmol/l	241,25	22
                              ITA06SMTS3	13-lug-21	11:12:56	Dissolved oxygen	µmol/l	177,64	23
                              ITA06SMTS3	15-set-21	10:19:58	Dissolved oxygen	µmol/l	153,25	23
                              3FO02bis  	23-feb-21	12:57:41	Dissolved oxygen	µmol/l	259,10	18,5
                              3FO02bis  	26-mar-21	14:45:00	Dissolved oxygen	µmol/l	287,80	12,5
                              3FO02bis  	11-mag-21	12:19:20	Dissolved oxygen	µmol/l	258,13	18,5
                              3FO02bis  	21-set-21	11:58:57	Dissolved oxygen	µmol/l	193,80	16,5
                              3FO03     	23-feb-21	12:39:44	Dissolved oxygen	µmol/l	250,00	19,5
                              3FO03     	26-mar-21	14:15:00	Dissolved oxygen	µmol/l	269,10	19,5
                              3FO03     	11-mag-21	11:43:46	Dissolved oxygen	µmol/l	259,38	19,5
                              3FO03     	27-lug-21	15:52:08	Dissolved oxygen	µmol/l	210,00	22,5
                              3FO03     	21-set-21	11:35:58	Dissolved oxygen	µmol/l	199,40	21,5
                              3FO04     	23-feb-21	11:50:57	Dissolved oxygen	µmol/l	256,80	37,5
                              3FO04     	26-mar-21	13:10:00	Dissolved oxygen	µmol/l	259,40	33,5
                              3FO04     	11-mag-21	10:43:12	Dissolved oxygen	µmol/l	253,75	22,5
                              3FO04     	27-lug-21	13:56:42	Dissolved oxygen	µmol/l	275,30	34,5
                              3FO04     	21-set-21	11:02:08	Dissolved oxygen	µmol/l	252,50	36,5
                              4BA02bis  	23-feb-21	08:34:12	Dissolved oxygen	µmol/l	234,70	62,5
                              4BA02bis  	26-mar-21	10:30:00	Dissolved oxygen	µmol/l	246,30	75,5
                              4BA02bis  	03-giu-21	11:58:32	Dissolved oxygen	µmol/l	257,81	72,5
                              4BA02bis  	21-set-21	15:18:27	Dissolved oxygen	µmol/l	255,60	67,5
                              4BA03     	23-feb-21	08:57:55	Dissolved oxygen	µmol/l	245,00	52,5
                              4BA03     	26-mar-21	11:00:00	Dissolved oxygen	µmol/l	242,20	100,5
                              4BA03     	03-giu-21	11:08:30	Dissolved oxygen	µmol/l	237,50	100,5
                              4BA03     	27-lug-21	10:00:00	Dissolved oxygen	µmol/l	257,20	100,5
                              4BA03     	21-set-21	14:53:47	Dissolved oxygen	µmol/l	239,70	100,5
                              4BA04     	23-feb-21	09:30:32	Dissolved oxygen	µmol/l	226,40	75,5
                              4BA04     	26-mar-21	11:45:00	Dissolved oxygen	µmol/l	238,80	100,5
                              4BA04     	03-giu-21	09:52:17	Dissolved oxygen	µmol/l	227,80	100,5
                              4BA04     	27-lug-21	11:21:55	Dissolved oxygen	µmol/l	250,90	100,5
                              4BA04     	21-set-21	14:16:35	Dissolved oxygen	µmol/l	236,60	100,5
                              6CB02bis  	26-feb-21	12:15:08	Dissolved oxygen	µmol/l	240,00	73,5
                              6CB02bis  	29-mar-21	12:46:00	Dissolved oxygen	µmol/l	241,30	85,5
                              6CB02bis  	17-giu-21	14:07:09	Dissolved oxygen	µmol/l	242,50	82,5
                              6CB02bis  	26-lug-21	12:50:00	Dissolved oxygen	µmol/l	229,10	80,5
                              6CB02bis  	10-set-21	11:52:17	Dissolved oxygen	µmol/l	243,40	80,5
                              6CB03     	26-feb-21	11:33:29	Dissolved oxygen	µmol/l	255,00	88,5
                              6CB03     	29-mar-21	11:51:00	Dissolved oxygen	µmol/l	196,30	85,5
                              6CB03     	17-giu-21	13:30:53	Dissolved oxygen	µmol/l	231,60	100,5
                              6CB03     	26-lug-21	11:55:00	Dissolved oxygen	µmol/l	247,20	100,5
                              6CB03     	10-set-21	11:21:26	Dissolved oxygen	µmol/l	244,70	100,5
                              6CB04     	26-feb-21	10:37:01	Dissolved oxygen	µmol/l	245,90	89,5
                              6CB04     	29-mar-21	10:00:00	Dissolved oxygen	µmol/l	205,90	100,5
                              6CB04     	17-giu-21	12:22:10	Dissolved oxygen	µmol/l	231,60	100,5
                              6CB04     	26-lug-21	10:50:00	Dissolved oxygen	µmol/l	233,80	100,5
                              6CB04     	10-set-21	10:32:40	Dissolved oxygen	µmol/l	239,10	99,5
                              
                              #44233 Score: 0 | Risposta

                              Raffaele53
                              Partecipante
                                23 pts

                                Secondo me, serve ordinare gg-mm-aaaa + stazione + ASS  ed estrare la prima riga (vedo se riesco domani)

                                #44250 Score: 0 | Risposta

                                Raffaele53
                                Partecipante
                                  23 pts

                                  Da provare (sempre che abbia ragione sul metodo), a me rimangono 115 righe.
                                  Sul Tuo allegato aggiungi un foglio=Foglio2, In un MODULO inserisci questo codice ed avvialo

                                  Ps.Sul mio PCm ci mette quasi due minuti

                                  `Option Explicit
                                  Sub Estrai()
                                  Dim sh1 As Worksheet: Set sh1 = Worksheets("Foglio1")
                                  Dim sh2 As Worksheet: Set sh2 = Worksheets("Foglio2")
                                  Dim X As Long, Ur As Long, N  As Long, dD As String
                                  Ur = sh1.Range("A" & Rows.Count).End(xlUp).Row
                                  Application.ScreenUpdating = False
                                  Application.Calculation = xlCalculationManual
                                  sh2.Cells.Clear
                                  sh1.Range("A1:Q1").Copy Destination:=sh2.Range("A1")
                                  sh2.Range("R1") = "DATA"
                                  sh2.Range("S1") = "N°Riga"
                                  N = 2
                                      For X = 2 To Ur
                                          If sh1.Range("L" & X) = "Dissolved oxygen" Then
                                              sh1.Range("A" & X & ":Q" & X).Copy Destination:=sh2.Cells(N, 1)
                                              dD = sh2.Range("I" & N) & "/" & sh2.Range("H" & N) & "/" & sh2.Range("G" & N)
                                              sh2.Range("R" & N) = CDate(dD)
                                              sh2.Range("R" & N) = X
                                              N = N + 1
                                          End If
                                      Next
                                      Ur = sh2.Range("A" & Rows.Count).End(xlUp).Row
                                      sh2.Sort.SortFields.Clear
                                      sh2.Sort.SortFields.Add Key:=Range("R2:R" & Ur), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                                      sh2.Sort.SortFields.Add Key:=Range("E2:E" & Ur), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                                      With sh2.Sort
                                          .SetRange Range("A1:S" & Ur)
                                          .Header = xlYes
                                          .MatchCase = False
                                          .Orientation = xlTopToBottom
                                          .SortMethod = xlPinYin
                                          .Apply
                                      End With
                                      For X = Ur To 2 Step -1
                                          If sh2.Range("E" & X) = sh2.Range("E" & X - 1) And sh2.Range("R" & X) = sh2.Range("R" & X - 1) Then
                                              sh2.Rows(X & ":" & X).Delete Shift:=xlUp
                                          ElseIf sh2.Range("S" & X) > 1 Then
                                              sh2.Rows(X & ":" & X).Delete Shift:=xlUp
                                          End If
                                      Next
                                  Application.ScreenUpdating = True
                                  Application.Calculation = xlCalculationAutomatic
                                  Set sh1 = Nothing
                                  Set sh2 = Nothing
                                  MsgBox "Fatto"
                                  End Sub
                                  `
                                  #44277 Score: 0 | Risposta

                                  Aldo Ercolini
                                  Partecipante
                                    19 pts

                                    Questa e' la mia versione, estrae 52 righe, a parita di ASS considera la prima trovata.

                                    Se ci deve essere un'altra discriminante dimmi quale.

                                    Allegati:
                                    You must be logged in to view attached files.
                                    #44282 Score: 0 | Risposta

                                    planera63
                                    Partecipante

                                      Ciao. Funziona benissimo, almeno da diversi controlli che ho fatto.

                                      Grazie mille davvero !!!

                                      Inserisco comunque questo che avevo preparato per illustrare un po' la natura dei dati e le condizioni che richiedevo per selezionare i dati che mi interessavano.

                                      Breve descrizione dell’acquisizione dei dati.

                                      Ad ogni stazione (NationalStationID) sono associate più date di campionamento nell'anno. Per ogni data di una determinata stazione (posizionata sempre nello stesso punto geografico) vengono acquisite mediante una sonda CTD alcuni parametri chimici e fisici dell’acqua di mare dalla superficie fino al fondo o fino ad una determinata profondità se il fondale in quel punto è troppo alto. Per questo motivo per una stazione (ITA06SMLG1), alla data (2021/1/12), esistono più record o righe corrispondenti alle diverse quote (SampleDepth) di misurazione; generalmente ogni 0,5 m. Nel campo ASS (campo calcolato) il valore è = SeaDepth (profondità del mare per quella stazione) – SampleDepth (profondità del mare nel punto di acquisizione).

                                      Condizioni per l’estrazione delle righe.

                                      Riferiamoci ad una stessa stazione campionata in quella stessa data. Nel caso che il valore ASS sia sempre positivo, va estratta una riga solo se 0≥ASS ≤1; nel caso non esista un valore di ASS che rispetti questa condizione allora non verrà selezionata nessuna riga per quella stazione e per quella data.

                                      Nel caso che il valore ASS assume anche valori negativi, va estratta la riga con il valore di ASS più negativo.

                                      Credo che l’algoritmo, per una stazione analizzata in una determinata data, debba cercare il valore minimo di ASS. Se questo valore è > 1 allora passa alla successiva campagna della stessa stazione oppure ad una nuova stazione, altrimenti estrae questa riga con il corrispondente valore di “Dissolved oxygen” associato alla SampleDepth.

                                       

                                       

                                      #44283 Score: 0 | Risposta

                                      scossa
                                      Partecipante
                                        37 pts

                                        planera63 ha scritto:

                                        Ciao. Funziona benissimo, almeno da diversi controlli che ho fatto.

                                        Citare o dire a chi stai rispondendo pare brutto?

                                        #44288 Score: 0 | Risposta

                                        Raffaele53
                                        Partecipante
                                          23 pts

                                          Ciao, quando ho ottenuto lo stesso risultato di scossa, ho allegato senza ricontrollare bene, ci sono due errori da correggere
                                          1)sh2.Range("R" & N) = X ---->sh2.Range("S" & N) = X
                                          2)ElseIf sh2.Range("S" & X) > 1 Then------>ElseIf sh2.Range("Q" & X) > 1 Then

                                          51 Record

                                          #44304 Score: 0 | Risposta

                                          scossa
                                          Partecipante
                                            37 pts

                                            planera63 ha scritto:

                                            va estratta una riga solo se 0≥ASS ≤1; nel caso non esista un valore di ASS che rispetti questa condizione allora non verrà selezionata nessuna riga per quella stazione e per quella data.

                                            Scusa, ma che senso ha andare a fare i rilievi in un mare profondo 1.100 con una sonda lunga 106,5 se poi i dati non li prendi nemmeno in considerazione??

                                            Aldo Ercolini ha scritto:

                                            Questa e' la mia versione, estrae 52 righe, a parita di ASS considera la prima trovata.

                                            Mi spieghi come fa ASS(SeaDepth - SampleDepth) a dare un numero negativo? E perché, tra le 52, ci sono righe che non rispettano la condizione 0≥ASS ≤1 ?

                                             

                                             

                                            #44308 Score: 0 | Risposta

                                            Aldo Ercolini
                                            Partecipante
                                              19 pts

                                              scossa ha scritto:

                                              Mi spieghi come fa ASS(SeaDepth - SampleDepth) a dare un numero negativo?

                                              Questo lo devi chiedere all'utente, ci sono dei casi, come ho fatto notare anche io, in cui la quota di misurazione "SEMBREREBBE" maggiore della profondita' del fondale, ma non e' il mio campo

                                              scossa ha scritto:

                                              perché, tra le 52, ci sono righe che non rispettano la condizione 0≥ASS ≤1 ?

                                              Io ho seguito le istruzioni date dall'utente:

                                              planera63 ha scritto:

                                              Condizioni per l’estrazione delle righe.

                                              Riferiamoci ad una stessa stazione campionata in quella stessa data. Nel caso che il valore ASS sia sempre positivo, va estratta una riga solo se 0≥ASS ≤1; nel caso non esista un valore di ASS che rispetti questa condizione allora non verrà selezionata nessuna riga per quella stazione e per quella data.

                                              Nel caso che il valore ASS assume anche valori negativi, va estratta la riga con il valore di ASS più negativo.

                                              planera63 ha scritto:

                                              Ad ogni stazione (NationalStationID) sono associate più date di campionamento nell'anno. Per ogni data di una determinata stazione sede essere selezionata una sola riga. Se il valore del campo ASS è positivo, allora va estratta quella riga con valore di ASS uguale a zero o più vicino allo zero. Se il valore del campo ASS è negativo, allora va estratta quella riga con il valore di ASS più negativo. 

                                              #44316 Score: 0 | Risposta

                                              scossa
                                              Partecipante
                                                37 pts

                                                Della serie idee poche ma ben confuse (intendo planera)! Vabbhè contento lui.

                                                #44317 Score: 0 | Risposta

                                                planera63
                                                Partecipante

                                                  Ciao

                                                  Allora rispondo a Scossa e Aldo Ercolini.

                                                  In questo monitoraggio effettuato in mare le stazioni sono collocate a 3, 6 e 12 miglia dalla costa; può quindi capitare che una ad stazione il fondale è molto profondo (500 o 1000 m) e la sonda che acquisisce i dati termina le acquisizioni prima del fondo. Il motivo non lo so; potrebbe darsi che il cavo d'acciaio per calare la sonda non sia lungo abbastanza oppure che le misurazioni vengono fatte fino alla quota dove arriva la luce. Visto che a me interessa conoscere il valore dell'ossigeno disciolto in prossimità del fondale perché un valore molto basso (condizione di ipossia o anossia) può essere un problema per gli organismi marini che vivono sul fondo; in alcune circostanze può provocare la morte di pesci e invertrebati marini (molluschi e crostacei). Questo fenomeno è stato osservato in passato nelle acque costiere del nord Adriatico influenzate dagli scarichi del fiume Po. Ritornando ai miei dati, in questo caso il valore di ASS è >> 1 e quindi, questo indica che l'ultimo valore di ossigeno disciolto misurato dalla sonda è comunque molto distante dal fondo e quindi non mi interessa che venga selezionato o estratto.

                                                  I valori negati di ASS sono dovuti al fatto che le quote di campionamento sono superiori alla profondità del fondale registrata per quella stazione. In realtà non dovrebbe mai accadere; purtroppo succede perché chi va ad eseguire il monitoraggio utilizzano sistemi di posizionamento non precisi oppure sbagliano in qualche modo l'individuazione della stazione e fanno le misurazioni in un punto stazione più profondo. In questo caso avremo anche valori di ASS negativi e supporremo che quello più negativo sia quello in prossimità del fondo.

                                                  Comunque ALDO, ho provato ad eseguire la tua macro su altri dati e mi sono accorto che salta alcuni valori di alcune stazioni in il valore di 0=<Ass<=1, che dovevano essere estratti.

                                                  Ora ti allego il tuo file in cui ho inserito tutti i dati della regione Abbruzzi. Ho creato anche una Tabella Pivot in cui puoi vedere per ciascuna stazione e per ciascuna data il valore massimo di SampleDeath e il valore minimo di ASS così sai per quali stazioni e date devi aspettarti che venga estratto la riga con il valore di fondo dell'ossigeno disciolto. Nel foglio dati estratti troverai solo 11 record. Scusami per sbaglio ho eliminato il bottone per eseguire la macro, ma io lo eseguita lo stesso da "Visualizza macro". Per esempio per la stazione 1_ABR_GU04 sarebbero dovuti essere estratti i valori dell'ossigeno di fondo per tutte e sei le date di rilevamento, e invece la Macro ne ha estratti solo 4; per la stazione 1_ABR_GU06 sarebbe essere estratti 5 record, e invece ne è stato estratto solo uno.

                                                   

                                                  Se non è possibile estrarre i dati perché qualche problema nella struttura dei dati, non ti preoccupare; fammi sapere qual'è il problema.   

                                                  Allegati:
                                                  You must be logged in to view attached files.
                                                  #44320 Score: 0 | Risposta

                                                  scossa
                                                  Partecipante
                                                    37 pts

                                                    planera63 ha scritto:

                                                    In questo caso avremo anche valori di ASS negativi e supporremo che quello più negativo sia quello in prossimità del fondo.

                                                    Matematicamente è impossibile:

                                                    In matematica, il valore assoluto o modulo di un numero reale x è una funzione che associa a x  un numero reale non negativo secondo la seguente definizione: se x è non negativo, il suo valore assoluto è x stesso; se x è negativo, il suo valore assoluto è −x . Ad esempio, il valore assoluto sia di 3  che di −3  è 3 . Il valore assoluto di un numero x  si indica con |x| .

                                                    #44322 Score: 0 | Risposta

                                                    Raffaele53
                                                    Partecipante
                                                      23 pts

                                                      >>>>>Per esempio per la stazione 1CA03 ci sono due valori di ASS equidistanti dallo 0 (che manca), 0,5 e -0,5. In questo caso basta eliminare i valori negativi e risolviamo.<<<<

                                                      Non desidero entrare nei Vostri ragionamenti, perchè non ci capisco un cavolo. Solo per dirVi che le 51 righe estrate sono errate (non ci possono essere valori ASS -10, -15 ecc ecc). Tutto oggi che ci riprovo senza esito, facendo una semplice estrazione dei valori Ass <1 and Ass > -1 escono 92 record, dovrebbero essere eliminati altri 39 record mà non riesco eliminare riga82.
                                                      Modulo2 - Sub Estrai222222()

                                                      Allegati:
                                                      You must be logged in to view attached files.
                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 1 a 25 (di 40 totali)
                                                    Rispondi a: Filtrare dei in base ad una condizione
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: