Condividi:        

cerca.vert() in ordine cronologico

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

cerca.vert() in ordine cronologico

Postdi biancocandido55 » 23/04/09 12:44

Ciao ragazzi,
ho un nuovo problema da proporvi, e cerco di spiegami con l'esempio semplificato postato qui:
Immagine,
in una tabella ho 2 colonne di valori, nella prima una serie di numeri, nella seconda colonna la data,
premesso che la 1 colonna è precompilata, la seconda la compilo man mano che opero con il lavoro ed inserisco la data che è quella di lavorazione, in un'altra cella di un'altro foglio vado a inserire la funzione
Codice: Seleziona tutto
cerca.vert()
, che mi dovrebbe trovare l'ultimo dato numerico inserito in ordine di tempo, ma se in un giorno capitano 2 o + lavorazioni come faccio???
Se il lavoro era in progressione con i numeri o cerca.vert() od inserimento righe non avevo problemi, ma così è tutta un'altra cosa.
rimango in attesa di un vostro aiuto.
grazie
biancocandido
biancocandido55
Utente Senior
 
Post: 305
Iscritto il: 03/03/06 10:15

Sponsor
 

Re: cerca.vert() in ordine cronologico

Postdi pietrol » 23/04/09 13:23

Ciao biancocandido
così com'è non c'è soluzione, la cosa più semplice è che tu utilizzi il formato gg/mm/aa hh.mm, così che il valore più grande sia sempre unico e in ogni caso devi arrivare ad avere un ordinamento univoco.
Potresti per esempio registrare una macro che inserisca nella cella selezionata la funzione =ADESSO() e poi copia-incolla_valori, abbinandola ad una combinazione di tasti qualsiasi sarebbe perfino più comodo che inserire la data a mano.
A questo punto individui il valore maggiore con SCARTO (non CERCA.VERT), MAX e CONFRONTA.
Codice: Seleziona tutto
Ponendo che i dati siano in B2:C100
=SCARTO(B2;CONFRONTA(MAX(B2:C100);B2:C100;0)-1;-1)


Fai sapere se può andare.

Ciao
pietrol
il lupo ululà, il castello ululì
pietrol
Utente Senior
 
Post: 270
Iscritto il: 07/01/09 14:34

Re: cerca.vert() in ordine cronologico

Postdi Flash30005 » 23/04/09 14:37

biancocandido55 ha scritto:in una tabella ho 2 colonne di valori, nella prima una serie di numeri, nella seconda colonna la data,
premesso che la 1 colonna è precompilata, la seconda la compilo man mano che opero con il lavoro ed inserisco la data che è quella di lavorazione, in un'altra cella di un'altro foglio vado a inserire la funzione
Codice: Seleziona tutto
cerca.vert()
, che mi dovrebbe trovare l'ultimo dato numerico inserito in ordine di tempo, ma se in un giorno capitano 2 o + lavorazioni come faccio???
...
biancocandido

Il consiglio di Pietrol è valido
oppure se puoi usare una numerazione progressiva automatica in una colonna a fianco...
man mano che digiti la data in C5 avrai in D5 il numero 3 (es.) quando digiti C6 avrai in D6 il valore 4 etc

Fai sapere

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: cerca.vert() in ordine cronologico

Postdi biancocandido55 » 23/04/09 16:02

Ciao ragazzi,
vi ringrazio come sempre per le soluzioni, di sicuro una delle due la metterò in uso , ma dell'altra ne faccio comunque tesoro. :D (non vi dico quale) :lol:. Vanno bene tutte e due.
Vi ringrazio
ciao, a prè
biancocandido Immagine
biancocandido55
Utente Senior
 
Post: 305
Iscritto il: 03/03/06 10:15

Re: cerca.vert() in ordine cronologico

Postdi stirner » 24/04/09 06:51

Vuoi la massima data inserita o l'ultima data inserita qualsiasi essa sia?

Ciao
Stirner
--------
Stirner
stirner
Utente Junior
 
Post: 79
Iscritto il: 14/02/09 15:13

Re: cerca.vert() in ordine cronologico

Postdi biancocandido55 » 24/04/09 08:11

Ciao Stirner,
dalla tua domanda, possone essere valutati diversi aspetti, ma quello che interessava me, come da titolo, era in ordine cronologico sulla linea temporale, perchè la data di lavorazione nella colonna delle date non la inserisco nell'ultima riga della colonna delle date, ma capita nel mezzo:
- se la ricerca la effettuo sulla numerazione delle pratiche non potevo, in quanto nella colonna, la numerazione è fissa e di varia natura, non in ordine crescente o decrescente;
- se valuto la colonna delle date prendendo l'ultima data inserita sarebbe andato bene se operavo una pratica al giorno,("magari") :lol: :lol: , ma non è così;
quindi l'unica altenativa che rimaneva era cercare nella tabella, l'ultima pratica inserita nello stesso momento in cui la lavoro (non volevo specificare quale soluzione fornita dai nostri amici, mi rimane più congeniale nell'uso), anche se credo che tu abbia già capito quale possa essere.
Se tu hai un'ulteriore soluzione, ti chiedo di esporla comunque, anche perchè va ad incrementare il bagaglio di conoscenza di tutti gli amici del forum.
Ti ringrazio.
ciao biancocandido
biancocandido55
Utente Senior
 
Post: 305
Iscritto il: 03/03/06 10:15

Re: cerca.vert() in ordine cronologico

Postdi stirner » 24/04/09 09:41

Dunque vuoi cercare l'ultimo dato inserito (doppioni o non) e trovare il corrispodente nella colonna prececedente?
Io ho capito così.
Nel caso così non fosse puoi specificre in maniera sintetica?
Grazie

Ciao
stirner
--------
Stirner
stirner
Utente Junior
 
Post: 79
Iscritto il: 14/02/09 15:13

Re: cerca.vert() in ordine cronologico

Postdi biancocandido55 » 24/04/09 09:54

Ciao stirner,
si, in parole semplici, questa era la mia richiesta, già espressa sul 1° thread.
Ciao
biancocandido
biancocandido55
Utente Senior
 
Post: 305
Iscritto il: 03/03/06 10:15

Re: cerca.vert() in ordine cronologico

Postdi Flash30005 » 24/04/09 17:31

Ciao Biancocandido

Se la sequenza è verso il basso e consecutiva puoi utilizzare questi codici
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C2:C100")) Is Nothing Then Exit Sub
Target.Offset(0, 1).Value = Target.Offset(-1, 1).Value + 1
End Sub

Vanno messi sul foglio di lavoro (e non sul modulo)
C2:C100 è il range che ho previsto e puoi cambiarlo,
ogni volta che scriverai in una cella di queste avrai nella cella adiacente (col D) il valore della cella precedente + 1
Se invece scrivi saltando celle allora di quel range bisogna trovare il valore massimo e aggiungere 1

ora scappo
ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: cerca.vert() in ordine cronologico

Postdi biancocandido55 » 24/04/09 21:09

Ciao ragazzi,

allora Flash30005,
l'ultima soluzione che proponi è ottima, come contatore ma tu stesso dici che io la dovrei usare verso il basso in tabella e quindi in progressione lineare, (se rivedi il primo thread, ho indicato con una freccia l'ultimo dato lavorato in 3ª posizione ) ne consegue che purtroppo non si adatta a questo caso;

paolox,
la tua soluzione come già detto in precedenza è ("bella, ottima, gagliarda, mi piace, va benissimo"), ma per questa volta non la posso usare per questo programma perchè dovrei fare tutto quello che hai scritto, ed è semplice, si ma, il programma non è per me e rimarrebbe difficile da spiegare a persone che sono già avanti con gli anni in età e nel loro lavoro, fanno tutto alla perfezione, ma solo che se gli aggiungo una "virgola" in più, sò dolori;

stirner,
stirner dice:
Dunque vuoi cercare l'ultimo dato inserito (doppioni o non) e trovare il corrispodente nella colonna prececedente?

la risposta è SI ma come già detto nel primo thread l'ultimo dato inserito si trova il 3ª posizione.

Ho usato il primo suggerimento di Flash30005,
Flash30005 dice:
oppure se puoi usare una numerazione progressiva automatica in una colonna a fianco...

inserendo 3 colonne a fianco dei dati come in quest'altro esempio da immagine:

Immagine

nella colonna E la "L" stà per lavorato
nella colonna F la formula (credo di aver fatto un po' di casino :lol: ), ma fà quello che a me serviva, mettere 1 se in E c'è la "L" o 0 se vuota

nella colonna G la formula conta quanti 1 ci sono nella colonna F
quando ho iniziato a lavorare la 1ª pratica metto la "L" in colonna E e mi da 1 in colonna G dopo sostituisco la formula con il numero 1
e così via con le successive, quindi metto "L" sulla 2ª pratica e il contatore mi da 2 in colonna G che sostituisco con numero 2

ecc. ecc.

sicuramente è un lavoro molto spartano ma fà il lavoro che mi serviva.

Ragazzi vi ringrazio per il vostro aiuto come sempre e ripeto le soluzioni fornitemi non andranno perse affatto.
un abbraccio
biancocandido Immagine

se potete correggere comunque le formule che ho usato, vi sono sempre debitore
grazie
biancocandido55
Utente Senior
 
Post: 305
Iscritto il: 03/03/06 10:15

Re: cerca.vert() in ordine cronologico

Postdi Flash30005 » 24/04/09 22:52

Bene allora visto che opteresti per l'idea di Paolox ti ho creato questo macro che inserisce automaticamente la data nel range indicato dalla macro (e che puoi cambiare).
Oltre alla data in formato gg/mm/aaaa hh:mm:ss
copia il valore e lo incolla direttamente nella cella selezionata
è di una semplicità unica, non devi digitare più alcuna data basta che clicchi in una qualsiasi cella del range previsto.
Ti consiglio di provarla

Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("G2:G100")) Is Nothing Then Exit Sub
    ActiveCell.FormulaR1C1 = "=NOW()"
    Selection.NumberFormat = "dd/mm/yyyy hh:mm:ss"
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
End Sub


Dovrai inserirla nel foglio di lavoro e cambiare solo il Range G2-G100

Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: cerca.vert() in ordine cronologico

Postdi Anthony47 » 24/04/09 23:14

Mi pare che ci siano gia' piu' soluzioni disponibili; aggiungo la mia.
Inserisci una data in una riga di col D e vuoi riportare in una cella il valore di col C, stessa riga.
Metti questa macro sul modulo codice del foglio su cui lavori:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 4 Then Exit Sub
If Application.WorksheetFunction.Max(Range("D:D")) <> Target.Value Then Exit Sub  '<***
Application.EnableEvents = False
Sheets("Foglio2").Range("A5").Value = Target.Offset(0, -1).Value     '<<< DESTINAZIONE??
Application.EnableEvents = True
End Sub
Modifica l' indirizzo di destinazione nell' istruzione marcata <<<<.
Questa, man mano che inserisci date, controlla che la data inserita sia la piu' alta tra quelle di col D e se Si compila la cella di destinazione col valore di col C.
La logica di controllare se quanto inserito e' la data piu' alta l' ho inserita anche se non ho capito se e' giusta, sbagliata o indifferente; per eliminarla basta cancellare la riga marcata <***

TUTTAVIA io sono convinto che il metodo "pietrol" (non paolox) sia il piu' semplice da realizzare; basta che inserisca questa macro invece della precedente:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 4 Then Exit Sub
Application.EnableEvents = False
Target.Value = Now()
Application.EnableEvents = True
End Sub
In questo caso la data inserita sara' sempre "Adesso", quindi data corrente + ora corrente, con l' ulteriore vantaggio di poter anche ricreare la sequenza di compilazione. Non potrai pero' editare un valore gia' inserito (cioe' se ci provi ti mettera' comunque data/ora corrente); ma questo potresti girarlo a tuo favore per impedire che un dato gia' inserito venga modificato o modificato accidentalmente (per questo ti serviranno piccole modifiche alla macro, valide anche se scegli la prima macro).

Spero di averti dato qualche spunto utile...

PS: nella macro di Flash e' errato inserire "=Adesso()" in cella, perche' cosi' il valore cambierebbe in continuazione. Ho immaginato che le date siano in col D, mi pare che Flash invece parla di col G; non dovrebbe essere difficile correggere il mio codice..

Ciao a tutti.
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: cerca.vert() in ordine cronologico

Postdi biancocandido55 » 24/04/09 23:58

Ciao Flsh30005,
credo che vista l'ora tarda, devo aver fatto un pò di confusione (non me ne vogliano, lapsus froidiano),
ma leggevo pietrol e ho scritto paolox. :lol: :lol:

Flash30005, ti ringrazio per la macro e la elaborerò nel programma, poi ti farò sapere.
L'idea di Pietrol è ottima ma mi sembrava poco pratica, il perchè l'ho spiegato prima, spero che non me ne voglia.
Se ho impostato bene i range nella formula di pietrol, mi da errore N/D.
Nel frattempo però avevo elaborato e messo in opera la tua idea del contatore, che mi è sembrata quella più semplice da usare.
L'ho elaborata come spiegato nel thread precedente.
ciao
biancocandido55
biancocandido55
Utente Senior
 
Post: 305
Iscritto il: 03/03/06 10:15

Re: cerca.vert() in ordine cronologico

Postdi biancocandido55 » 25/04/09 00:01

Ciao Anthony, mentre scrivevo a Flash, ho intravisto i tuoi suggerimenti, cercherò di rivedere il tutto e vi farò sapere al più presto.
ciao
biancocandido55
biancocandido55
Utente Senior
 
Post: 305
Iscritto il: 03/03/06 10:15

Re: cerca.vert() in ordine cronologico

Postdi Flash30005 » 25/04/09 10:31

Anthony47 ha scritto:PS: nella macro di Flash e' errato inserire "=Adesso()" in cella, perche' cosi' il valore cambierebbe in continuazione...


Scusa Anthony la macro da me postata funziona in questa maniera:
al momento che si clicca in una cella del Range (col G) inserisce data e ora ma subito dopo copia/incolla valori quindi non rimane più la formula Adesso() ;)
Per quanto riguarda la sicurezza di salvaguardare l'inserimento accidentale ho pensato di aggiungere una riga
Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("G2:G100")) Is Nothing Then Exit Sub
If ActiveCell.Value <> "" Then Exit Sub                '<<<< Riga aggiunta
    ActiveCell.FormulaR1C1 = "=NOW()"
    Selection.NumberFormat = "dd/mm/yyyy hh:mm:ss"
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
End Sub

Evita di sovrascrivere accidentalmente una data già scritta
Allego il file per il test


Ciao
Allegati

[L’estensione rar è stata disattivata e non puó essere visualizzata.]

Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: cerca.vert() in ordine cronologico

Postdi Flash30005 » 25/04/09 12:13

E se proprio ti piace il contatore allora....
scarica questo file.
Cliccando sulla colonna C e se in B ci sono dati verrà trascritta la data (solo data) e in D il numero più alto (+1) di questa colonna.

Vedi tu
Fai sapere
Ciao
Allegati

[L’estensione rar è stata disattivata e non puó essere visualizzata.]

Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: cerca.vert() in ordine cronologico

Postdi biancocandido55 » 25/04/09 13:23

Ciao Anthony, ciao Flash30005,
io non sò mai come potervi ringraziare per il vostro aiuto, ogni volta che proponete una formula, uno spunto o una macro non posso fare altro che farne tesoro, perchè come si sà "impara l'arte e mettila da parte",dopo averle inserite singolarmente in un foglio e provate mi è venuta un' :idea: , ho seguito un ulteriore detto che mi è stato insegnato tanti anni fà che è "l'unione fà la forza", così le ho inserite entrambe e il risultato e stato spettacolare-oso-issimo per il non plus ultra finale, e qui lascio a voi la scelta (non litigate :lol: :lol: , un abbraccio), potete aggiungere alle macro il controllo "se range (C:C) è vuoto in range (D:D) non scrivere nulla.

Le macro eccole qui:
Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("D2:D100")) Is Nothing Then Exit Sub
If ActiveCell.Value <> "" Then Exit Sub '    [color=#FF0000]'<<<< Riga aggiunta [/color]
    ActiveCell.FormulaR1C1 = "=NOW()"
    Selection.NumberFormat = "dd/mm/yyyy hh:mm:ss"
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 4 Then Exit Sub
If Application.WorksheetFunction.Max(Range("D:D")) <> Target.Value Then Exit Sub  '<***
Application.EnableEvents = False
Sheets("Foglio2").Range("A5").Value = Target.Offset(0, -1).Value     '<<< DESTINAZIONE??
Application.EnableEvents = True
End Sub
.
Come sempre un abbraccio
biancocandidoImmagine
biancocandido55
Utente Senior
 
Post: 305
Iscritto il: 03/03/06 10:15

Re: cerca.vert() in ordine cronologico

Postdi Flash30005 » 25/04/09 17:04

Ciao Biancocandido
tu chiedi una cosa che già esiste nel foglio ContatoreAutomatico (post delle ore 13:13)
Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
UR = Range("B" & Rows.Count).End(xlUp).Row + 1
If Intersect(Target, Range("C2:C" & UR - 1)) Is Nothing Then Exit Sub
If ActiveCell.Value <> "" Then Exit Sub
If Target.Offset(0, -1).Value = "" Then Exit Sub
    ActiveCell.FormulaR1C1 = "=NOW()"
    Selection.NumberFormat = "dd/mm/yyyy"
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Target.Offset(0, 1).FormulaR1C1 = "=MAXA(R1C:R[-1]C,R[1]C:R" & UR & "C)+1"
     Target.Offset(0, 1).Select
        Selection.NumberFormat = "General"
     Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
   
End Sub

Questo non solo non scrive nulla se non c'è nulla in C ma non scrive nulla se non c'è nulla nemmeno in B.
Funziona così:
Se in B non c'è nulla e si clicca in C non avviene nulla se in B c'è un valore e si clicca in C automaticamente mette in ci la sola data nel formato gg/mm/aaaa e in D mette il valore più alto della colonna D + 1.
Ma l'hai provato il file ContatoreAutomatico?
Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: cerca.vert() in ordine cronologico

Postdi biancocandido55 » 25/04/09 18:04

Ciao Flash30005,
ieri notte quando stavo rispondendo avevo provato solo la macro dataautomatica, e quando ho fatto un anteprima della risposta che stavo scrivendo ho intravisto la risposta di Anthony,
per il topic del contatore con l'allegato, ti chiedo SCUSA :oops: , per punizione scegli tu ,Immagine , Immagine , Immagine ,Immagine , Immagine

Spero che non te la sia presa, mi dispiacerebbe,voglio provare a fare io l'aggiunta del controllo, prima o poi devo imparare sto benedetto VBA.
Ciao e grazie
biancocandido Immagine
biancocandido55
Utente Senior
 
Post: 305
Iscritto il: 03/03/06 10:15

Re: cerca.vert() in ordine cronologico

Postdi Flash30005 » 25/04/09 22:19

Ciao Biancocandido,
Io ho scelto questo Immagine
:lol: :lol: :lol:
biancocandido55 ha scritto:voglio provare a fare io l'aggiunta del controllo, prima o poi devo imparare sto benedetto VBA.

Beh, anche io sto imparando... molti codici che ti ho postato me li ha suggeriti Anthony (è un grande!) per altre mie applicazioni e poi adattate, quindi penso che non c'è nulla di vergognoso a chiedere e avere la "pappa fatta" ma senza nulla non si crea nulla, l'esigenza è uno stimolo per impegnarsi a fare e le possibilità di risoluzione sono molteplici ma senza un input e un po' di conoscenza si rischia di perdere tantissimo tempo intorno ad un semplice codice.
Una volta che hai qualcosa di funzionate puoi capire bene ogni funzione e modificarla per adattarla secondo le tue esigenze come ho fatto io.

Aggiungo un'altra cosa se la data in automatico non ti interessa perché magari non deve essere il giorno di digitazione sul foglio di excel ma il giorno del "rapportino" (bolla o altro) disabiliti la funzione di scrittura di questa funzione vorrà dire che appena scriverai la tua data la macro scriverà in automatico solo il contatore.

Ciao

P.S. Excel ha una funzione non molto conosciuta:
per trascrivere la data attuale in una cella basta premere contemporaneamente questi tre tasti:
Maiuscolo+Ctrl+; (punto e virgola)
se invece ti occorre l'ora attuale premi
Maiuscolo+Ctrl+: (due punti)
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "cerca.vert() in ordine cronologico":


Chi c’è in linea

Visitano il forum: Nessuno e 55 ospiti