Newsgroup: it.comp.lang.visual-basic
Titolo: sgrezzatura dati

Attualmente parte del mio lavoro consiste nell'immergere una sonda
multiparametrica nelle acque dell'Adriatico settentrionale in alcune
stazioni fisse per registrare i profili di alcuni parametri
chimico-fisici della colonna d'acqua.
Successivamente converto i dati dal formato nativo a quello ASCII ed
infine in quello di Excel.
A questo punto per ottenere delle isolinee (con il programma Surfer)
devo necessariamente "ripulire" i dati, perche' la sonda essendo appesa
ad un cavo oscilla con i movimenti della barca e questo implica che a
momenti si comporti come un pendolo restituendo i parametri misurati a
quote superiori rispetto alla quota interessata.
Sul foglio di lavoro i parametri vengono riportati in colonne e
all'inizio di ogni riga c'e' la relativa profondita' di misurazione. I
dati da ripulire si individuano perche' la profondita' decresce invece
di aumentare .
Quello che io faccio manualmente e' mediare i singoli parametri
corrispondenti a profondita' uguali ed eliminare i dati relativi a
profondita' minori rispetto le precedenti.
Io suppongo che per voi creare una macro in VBA che faccia
automaticamente quello che io faccio manualmente perdendo un sacco di
tempo sia una banalita' e spero che siate cosi' gentili da volermi
aiutare.
Saluti e grazie
Miki

Esistono ovviamente molte strade per fare quanto chiedi.
Una prima idea  è questa:
0) crea backup del file Excel
1) aggiugi una colonna con la differenza tra la profondità della riga e
della riga precedente
2) applica il filtro automatico su questa colonna
3) elimina le righe in cui la differenza è maggiore (minore) di 0
4) togli il filtro automatico
A questo punto dovresti aver tolto i dati che non ti interessano.
Utilizzando il registratore di macro è possibile automatizzare almeno i
punti 1 e 2.
Relativamente alle medie ti conviene esportare il foglio ripulito in Access
ed eseguire una query di raggruppamento sulla profondità mediando sui
parametri chimici.
Ciao, Giorgio

> Miki:

Cioe`, data una situazione simile a questa (indico la
profondita` come numero negativo ma se non e` corretto leggi
pure come numero positivo):
RIGA PROFONDITA PARAM1 PARAM2 ... PARAMn
  1  -3,2
  2  -3,3
  3  -3,3
  4  -3,4
  5  -3,3
  6  -3,2
  7  -3,3
  8  -3,4
  9  -3,5
Quali righe dovrebbero essere eliminate? Io ipotizzo le righe
3, 5, 6, 7 e 8. Giusto?
--
Ciao.
Maurizio

 Miki

Ciao,
questa macro dovrebbe andare bene, anche se avrai uno sfarfallamento pauroso
del video, .... ma non si puo' avere tutto nella vita :o))
Sub EliminaValoreMinore()
    Dim N As Integer
    Dim Risp As String
    Dim Colonna As String
    Dim Risposta As Integer
    Dim NomeFoglio As String
    Dim PosizioneRiga As Integer
    Dim PosizioneControllo As Integer
    Dim ValoreControllo As Integer
    Risp = InputBox("Controllo dalla riga", , "1")
    Risp1 = InputBox("alla riga           ", , "2")
    Colonna = InputBox("Colonna da valutare", , "A")
    Risposta = MsgBox("Controllo dalla Riga " & Risp & " alla Riga " & Risp1
& _
    " la colonna " & Chr(34) & Colonna & Chr(34) & " ??", vbYesNo)
    If Risposta = vbNo Then Exit Sub
    '//carico il nome del foglio
    NomeFoglio = ActiveSheet.Name
    '//aggiungo un foglio
    Set NuovoFoglio = Worksheets.Add
    NuovoFoglio.Name = "Foglio Corretto"
    '//seleziono il foglio di lavoro
    Sheets(NomeFoglio).Select
    '//inizializzo le variabili
    PosizioneControllo = Val(Risp)
    PosizioneRiga = 1
    For N = Val(Risp) To Val(Risp1)
        '//copio la prima riga
        If N = Val(Risp) Then GoTo Copia
        '//carico il valore da verificare
        Range(Trim(Colonna) & Trim(Str(PosizioneControllo))).Select
        ValoreControllo = Selection.Value
        '//carico il valore della riga successiva
        Range(Trim(Colonna) & Trim(Str(N))).Select
        If ValoreControllo < Selection.Value Then
            '//se il valore di controllo e' minore della riga selezionata
            PosizioneControllo = N
Copia:
            '//scrivo la riga nel nuovo foglio
            Rows(Trim(Str(N)) & ":" & Trim(Str(N))).Select
            Selection.Copy
            Sheets("Foglio Corretto").Select
            Rows(Trim(Str(PosizioneRiga)) & ":" &
Trim(Str(PosizioneRiga))).Select
            ActiveSheet.Paste
            '//incremento la posizione nel nuovo foglio
            PosizioneRiga = PosizioneRiga + 1
            Sheets(NomeFoglio).Select
        End If
    Next N
End Sub
beppe
--
-----------------------------------------------------------
Togliere <antispam> dall'indirizzo
-----------------------------------------------------------
E-mail : mg<antispam>@
comune.cento.fe.it
Visita 
http://comune.cento.fe.it/wwfaf
-----------------------------------------------------------