Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Selezionare celle secondo un intervallo di tempo

Ultimo Aggiornamento: 13/09/2015 12:00
Post: 1
Registrato il: 07/05/2012
Città: MILANO
Età: 43
Utente Junior
OFFLINE
07/05/2012 00:05

Salve ho un insieme di dati elencati per orario più precisamente per secondo. Devo selezionare le celle secondo intervalli da me stabiliti. Come posso fare?
Post: 128
Registrato il: 24/04/2004
Città: TERAMO
Età: 63
Utente Junior
2010
OFFLINE
07/05/2012 01:54

Ciao, servirebbe vedere almeno come sono disposti i dati... un file di esempio sarebbe meglio.
__________________________
[Excel 2010]
-Condividere la conoscenza aumenta la ricchezza di tutti.
-Dai ad un uomo un pesce e lo avrai sfamato per un giorno; insegnagli a pescare e lo avrai sfamato per sempre. (Confucio)
-Il sonno della ragione genera mostri. (Francisco Goya)
Post: 1
Registrato il: 07/05/2012
Città: MILANO
Età: 43
Utente Junior
OFFLINE
07/05/2012 16:23

Scusa ma sono nuovo di questo forum e non so come postare un file di esempio.
Non credo però sia necessario:
Ho circa 30000 dati (rilevazioni in campo ottico) con inizio ore 8:15:00 e termine 17:15:00. (un dato ogni secondo).
Devo semplicemente selezionare un range di dati secondo un intervallo di tempo stabilito.
Più semplicemente come posso fare per selezionare da tutte le rilevazioni solo quelle celle che a partire dalle 8:15:00 hanno un intervallo di tempo di 10 secondi l'una dall'altra?
Esempio:
cella 1 - 8:15:00
cella 2 - 8:15:10
cella 3 - 8:15:20
cella 4 - 8:15:30
...
...
Questo è il risultato che devo ottenere.
Spero di essere stato chiaro.
Grazie
Post: 130
Registrato il: 24/04/2004
Città: TERAMO
Età: 63
Utente Junior
2010
OFFLINE
07/05/2012 18:06

Non so se sia possibile farlo con formule, usando VBA non è difficile; basta sapere come intendi inserire l'intervallo, se l'intervallo deve essere variabile (10 s., 20 s.), come sono formattate le celle e cosa vuoi che accada al range ottenuto (evidenziare, copiare o altro).
__________________________
[Excel 2010]
-Condividere la conoscenza aumenta la ricchezza di tutti.
-Dai ad un uomo un pesce e lo avrai sfamato per un giorno; insegnagli a pescare e lo avrai sfamato per sempre. (Confucio)
-Il sonno della ragione genera mostri. (Francisco Goya)
Post: 2
Registrato il: 07/05/2012
Città: MILANO
Età: 43
Utente Junior
OFFLINE
07/05/2012 18:17

Ciao e grazie per l'aiuto ma puoi dirmi la procedura da seguire perchè non so cosa voglia dire VBA.
L'intervallo da inserire è variabile cioè devo studiare più casi e se inizialmente considererò 10 secondi nei successivi studi aumenterò il tempo fino ad un minuto.
Il risultato che devo ottenere è evidenziare le celle che corrispondono al requisitpo richiesto o più semplicemente creare un altro foglio con l'elenco ottenuto.
Post: 131
Registrato il: 24/04/2004
Città: TERAMO
Età: 63
Utente Junior
2010
OFFLINE
07/05/2012 21:04

Da quanto mi dici mi sembra di capire che non sei esperto di macro e VBA (Visual Basic for Application), quindi cercherò di semplificare la cosa il più possibile, ti posto un file di esempio:

formatta intervallo.xls - 56.0 KB
Il funzionamento dal "lato utente" è estremamente semplice: in colonna A ci sono i valori da evidenziare; occorre inserire un orario di partenza in E1 e l'intervallo in secondi in E2.
Quando uno dei due valori cambia viene eseguita automaticamente una macro che evidenzia i valori in colonna A che ricadono in quell'intervallo.
Il file serve solo a dimostrare come si potrebbe fare; il funzionamento può (da parte di chi ha conoscenze di VBA) essere modificato facilmente.
Dai un occhiata e poi decidiamo il da farsi...
[SM=x423018] Ciao!
__________________________
[Excel 2010]
-Condividere la conoscenza aumenta la ricchezza di tutti.
-Dai ad un uomo un pesce e lo avrai sfamato per un giorno; insegnagli a pescare e lo avrai sfamato per sempre. (Confucio)
-Il sonno della ragione genera mostri. (Francisco Goya)
Post: 713
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Senior
2013
OFFLINE
07/05/2012 22:47

un saluto a Voi
L'ho fatto, più che altro per imparare (vedi Tu)
[Modificato da raffaele1953 07/05/2012 22:48]
Excel 2013
Post: 3
Registrato il: 07/05/2012
Città: MILANO
Età: 43
Utente Junior
OFFLINE
07/05/2012 23:37

Grazie per l'aiuto l'esempio di raffaele1953 è perfetto.
Adesso ho solo un piccolo problema...come posso ricreare lo stesso esempio sul mio documento?
Scusate ma come potete capire non conosco molto excel.
Post: 132
Registrato il: 24/04/2004
Città: TERAMO
Età: 63
Utente Junior
2010
OFFLINE
08/05/2012 00:18

Ciao a tutti.
Mi sono appena reso conto che avevo interpretato male il quesito, al contrario di raffaele.
Per raffaele: la soluzione in realtà è molto più semplice di quella che hai ideato (che comunque funziona!):
Sub comprimi()
Dim riga As Long, intervallo As Long
    intervallo = InputBox("Ogni riga distanziata da Quanti secondi?")
    For riga = 1 To Range("A:A").End(xlDown).Row
        Rows(riga).Hidden = riga Mod intervallo <> 1
    Next riga
End Sub

Sub espandi()
Dim riga As Long, intervallo As Long
    For riga = 1 To Range("A:A").End(xlDown).Row
        Rows(riga).Hidden = False
    Next riga
End Sub

...eh! con l'età mi sto rimbambendo... [SM=x423021]
__________________________
[Excel 2010]
-Condividere la conoscenza aumenta la ricchezza di tutti.
-Dai ad un uomo un pesce e lo avrai sfamato per un giorno; insegnagli a pescare e lo avrai sfamato per sempre. (Confucio)
-Il sonno della ragione genera mostri. (Francisco Goya)
Post: 4
Registrato il: 07/05/2012
Città: MILANO
Età: 43
Utente Junior
OFFLINE
08/05/2012 00:29

Avete per caso msn o skype per comunicare meglio?
In questo modo non so come risolvere il problema.
Post: 5
Registrato il: 07/05/2012
Città: MILANO
Età: 43
Utente Junior
OFFLINE
08/05/2012 00:41

Ok ci sono riuscito anche se non è stato semplice. Vi ringrazio davvero molto perchè mi avete risolto un grosso problema. Grazie ancora e spero di poter ricambiare in futuro il vostro favore. Valerio
Post: 1.043
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
08/05/2012 01:03

ciao

visto che Raffaele e Zer0Kelvin,che saluto, ti hanno passato soluzioni con macro
ti passo anche la mia soluzione senza ausilio di macro, ma con funzioni di excel fai attenzione alla prima riga e alla seconda riga di come sono inserite le formule



Ciao da locate
excel 2007 / 13
Post: 716
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Senior
2013
OFFLINE
08/05/2012 01:13

Non sono bravo, ho provato a vedere solo cosa combinavo.
Comunque Raffaele batte Zer0kelvin
Diff = ""
Iniz = Time
Cells(1, 2) = ""
.....
.....
Fine = Time
Diff = Format(Fine - Iniz, "hh:mm:ss")
Cells(1, 2) = Diff
Tempo Ricerca Raffaele ogni 100 righe = 00:00:08
Tempo Ricerca Zer0kelvin ogni 100 righe = 00:04:26
Excel 2013
Post: 135
Registrato il: 24/04/2004
Città: TERAMO
Età: 63
Utente Junior
2010
OFFLINE
08/05/2012 12:09

Ciao Raffaele.
Premesso che:
- non è una gara e non siamo allo stadio.
- non ho detto che la mia soluzione era migliore, ma più semplice...
- non mi ero posto il problema della velocità
- la tua macro è piu veloce
- la mia macro sul mio PC impiega circa 1,8 secondi per 100 righe (???) non 4 minuti
ci sono alcune considerazioni da fare.
Le due macro non possono essere paragonate perchè la mia compie un numero di iterazioni che dipende solo dal numero di righe, mentre la tua compie sempre meno iterazioni man mano che lo step aumenta...
Se le righe non sono tutte uguali la tua macro non và bene perchè le riporta tutte alla stessa altezza.
Entrambe possono essere ottimizzate un pò:

Sub comprimi2() 'by Raffaele
Dim y As Long
salta = InputBox("Ogni riga distanziata da Quanti secondi?")
For y = 1 To Range("A" & Rows.Count).End(xlUp).Row Step salta
    Rows(y + 1 & ":" & y + salta - 1).RowHeight = 0
Next
End Sub

Sub comprimi3() 'by Zer0Kelvin
Dim riga As Long, tm As Double
    salta = InputBox("Ogni riga distanziata da Quanti secondi?")
    For riga = 1 To Range("A:A").End(xlDown).Row
        If riga Mod salta <> 1 Then Rows(riga).Hidden = True
    Next riga
End Sub


Occorrerebbe poi aggiungere un controllo sul valore inserito nella textbox (deve essere un numero > 1).
E' possibile inserire lo step direttamente in una cella come ho fatto nel mio file di esempio.
Ciao!

PS: siamo tutti qui per imparare...
[Modificato da Zer0kelvin 08/05/2012 12:21]
__________________________
[Excel 2010]
-Condividere la conoscenza aumenta la ricchezza di tutti.
-Dai ad un uomo un pesce e lo avrai sfamato per un giorno; insegnagli a pescare e lo avrai sfamato per sempre. (Confucio)
-Il sonno della ragione genera mostri. (Francisco Goya)
Post: 658
Registrato il: 27/07/2010
Utente Senior
OFFLINE
08/05/2012 12:41

Re:
Zer0kelvin, 08/05/2012 00.18:

Sub espandi()
Dim riga As Long, intervallo As Long
    For riga = 1 To Range("A:A").End(xlDown).Row
        Rows(riga).Hidden = False
    Next riga
End Sub

...eh! con l'età mi sto rimbambendo... [SM=x423021]



ehmm ....... ouch...ouch [SM=x423032]

Sub espandi()
    Range("A:A").EntireRow.Hidden = False
End Sub



P.S.: ops... a veder bene ... siamo coetanei [SM=x423030]
[Modificato da scossa 08/05/2012 12:42]

Bye!
scossa

scossa's web site
___
Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Post: 717
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Senior
2013
OFFLINE
08/05/2012 12:53

>>>per 100 righe (???)
Intendevo inserendo 100 secondi

Come detto non sono bravo, i tempi scritti sopra sul mio PC sono reali.
La Tua macro (personalmente da principiante), "sembra ... sembra" che impalli il PC. Anche la seconda fà lo stesso scherzo, mà alla fine tutte due finiscono. La seconda "annulla" ci mette meno di 1 secondo, la Tua non l'ho misurata.
Hai ragione siamo qui solo per imparare, proprio per questo ho spostato quello che ero riuscito a combinare, l'unica cosa rivedendo il tutto che avrei dovuto mettere le due righe che bloccavano lo schermo durante l'operazione.

Ps. 100 secondi = 00:00:08
Invece se inserisco 10 secondi e lunga anche la mia, dopotutto credo che faccia all'incirca 34.000/10=3400 operazioni.
Excel 2013
Post: 1.044
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
08/05/2012 13:19

ciao a tutti

visto che vi state cimentando con i tempi di elaborazione mediante macro in base a richiesta di rossivalerio


o più semplicemente creare un altro foglio con l'elenco ottenuto.



ho fatto anch'io un file con macro dove posto condizioni e attivata la macro il tempo di elaborazione di 33000 record e stato di 1 secondo
allego il file


Ciao da locate
excel 2007 / 13
Post: 659
Registrato il: 27/07/2010
Utente Senior
OFFLINE
08/05/2012 15:44

Re:
locatevaresino, 08/05/2012 13.19:

ciao a tutti

visto che vi state cimentando con i tempi di elaborazione mediante macro in base a richiesta di rossivalerio


o più semplicemente creare un altro foglio con l'elenco ottenuto.



ho fatto anch'io un file con macro dove posto condizioni e attivata la macro il tempo di elaborazione di 33000 record e stato di 1 secondo
allego il file



Ciao locate,

visto che stiamo giocando e quando il gioco si fa duro ........ (J. Belushi) questo codice fa la stessa cosa del tuo ed è 12 volte (92%) più veloce (0,072 secondi contro 0,922 della tua ottimizzata disattivando lo screenupdating) [SM=x423038] :

Sub comprimi()
  Dim riga As Long, intervallo As Long
  Dim aRng() As Variant
  Dim aRVis() As Variant
  Dim nStart As Single
  Dim nVis As Long
  
    intervallo = 10 'Application.InputBox("Ogni riga distanziata da Quanti secondi?", Type:=1)
    nStart = Timer
    Range("F:G").ClearContents
    If intervallo = False Then
      MsgBox "operazione annullata", vbCritical
    Else
      Application.ScreenUpdating = False
      aRng = Range("A1").CurrentRegion '.Resize(, 1)
      
      For riga = 1 To UBound(aRng) Step intervallo
           nVis = nVis + 1
      Next
      ReDim aRVis(1 To nVis, 1 To 2)
      nVis = 0
      For riga = 1 To UBound(aRng) Step intervallo
                      nVis = nVis + 1
            aRVis(nVis, 1) = aRng(riga, 1)
            aRVis(nVis, 2) = aRng(riga, 2)
      Next riga
      Range("F1:G" & UBound(aRVis)).Value = aRVis
      Range("F1:F" & UBound(aRVis)).NumberFormat = "h:mm:ss"
      Worksheets("Foglio2").Range("A1:B" & UBound(aRVis)).Value = aRVis
      Worksheets("Foglio2").Range("A1:A" & UBound(aRVis)).NumberFormat = "h:mm:ss"
      
      Application.ScreenUpdating = True
      
      MsgBox Timer - nStart, vbExclamation
    End If
  End Sub


Togliendo la scrittura sul foglio2 il tempo si riduce a 0,046 secondi

[Modificato da scossa 08/05/2012 18:08]

Bye!
scossa

scossa's web site
___
Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Post: 1.045
Registrato il: 21/03/2008
Città: LOCATE VARESINO
Età: 76
Utente Veteran
2007 / 13
OFFLINE
08/05/2012 19:15

ciao scossa

mi devo [SM=x423026] e [SM=x423057]

provata la tua soluzione sul mio UBSOLETO PC e rilevati i tempi
mia soluzione con aggiunta di Application.ScreenUpdating = False da te suggerita =sec 1,935
tua soluzione =sec 0,068


vale sempre il detto, nella vita non si e' mai finito di imparare
ed e' proprio vero, quando pensi di sapere non sai proprio niente



alla prossima



Ciao da locate
excel 2007 / 13
Post: 719
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Senior
2013
OFFLINE
08/05/2012 20:25

Complimenti a Tutti.
Sicuramente "gara finita per me", comunque non si dovrebbe perdere l'obbiettivo.
Almeno per quanto io abbia capito, non si doveva estrarre solo dei numeri e Date, mà anche visualizzare i Dati delle celle adiacenti.
Certo ha preferito evitare di fornirli "Non credo però sia necessario", mà sicuramente per me ci dovevano essere. Oppure era una richiesta nulla.

Ps. Solo per dire che il foglio di dati sarà già stato esistente (sicuramente oltre i MB) e dovendo solo fare prove di ricerca con tempi differenti. Ho pensato che nella colonna "A" ci fossero le date e ho lavorato solo su quello, evitando appositamente di copiarlo in altri fogli per evitare "di farlo pesare di più" e in teoria anche per rifare subito un'altra prova.
[Modificato da raffaele1953 08/05/2012 20:27]
Excel 2013
Post: 143
Registrato il: 24/04/2004
Città: TERAMO
Età: 63
Utente Junior
2010
OFFLINE
09/05/2012 01:01

WOW!
Meglio di un Gran Premio di F1...
[SM=x423030] [SM=x423038] [SM=x423030]
[Modificato da Zer0kelvin 09/05/2012 01:02]
__________________________
[Excel 2010]
-Condividere la conoscenza aumenta la ricchezza di tutti.
-Dai ad un uomo un pesce e lo avrai sfamato per un giorno; insegnagli a pescare e lo avrai sfamato per sempre. (Confucio)
-Il sonno della ragione genera mostri. (Francisco Goya)
Post: 664
Registrato il: 27/07/2010
Utente Senior
OFFLINE
09/05/2012 08:52

Re:
Zer0kelvin, 09/05/2012 01.01:

WOW!
Meglio di un Gran Premio di F1...
[SM=x423030] [SM=x423038] [SM=x423030]



LOL,

quasi come uno di MotoGP [SM=x423038]

Bye!
scossa

scossa's web site
___
Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Post: 0
Registrato il: 13/09/2015
Età: 37
Utente Junior
OFFLINE
13/09/2015 12:00

seguo
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 16:11. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com