Excel e gli applicativi Microsoft Office condizione IF vera ma risultato falso

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

    muccapazza
    Partecipante
      #644 Score: 0 | Risposta

      Luca73
      Partecipante
        58 pts
        Qual'è la domanda?
        Ciao
        Luca
        #661 Score: 0 | Risposta

        muccapazza
        Partecipante
          ops...e' successo casino...rimedio adesso...avevo aperto la discussione ma ho chiuso il browser..
          Ciao a tutti, 
          ho un problema con la condizione IF, il risultato della condizione e' sbagliato.
          E' un po di tempo che spulcio internet a destra e a sinistra per trovare spunti e soluzioni.
          Qui ho trovate tante risposte utili come in forum americani quindi ho deciso di chiedervi aiuto.
          La mia necessità è quella di eseguire una ricerca di orario, uno di inizio e uno di fine.
          l'orario di ricerca sono io a costruirlo.
          Da A prendo ore e minuti, da B prendo solo i secondi, li unisco insieme e ottengo l'orario che devo cercare sulla colonna B.
          Tutto il castello che ho creato funziona correttamente, il primo ciclo FOR - IF che uso per verificare l'orario 'inizio' funziona mentre il secondo ciclo 'fine'(che non e' altro che la copia del primo come logica ed adattato all'uso) mi riporta un FALSO anche se e' vero.
          Premetto che prima ho tentato di usare cells.find ma vedendo che non ottenevo il risultato voluto ho optato per il ciclo for.
          Qui riporto il pezzo di macro che fa il controllo...
          
          le variabili in uso sono dichiarate come DATE
          
          'primo ciclo for per la comparazione inizio orario da cercare
          For i = 2 To riga2
          cerca = Sheets("temperature").Cells(i, 3)
          If cerca = oracompleta Then GoTo proxchk 'se vero passa al secondo controllo altrimenti errore e stop
          Next i
          GoTo errore
          proxchk:
          'secondo ciclo for per la comparazione fine orario da cercare
          For ii = i To riga2
          cerca1 = Sheets("temperature").Cells(ii, 3)
          'questa condizione la maggior parte delle volte anche se vera mi passa il falso
          If cerca1 = oracompleta2 Then GoTo ok1 'se vero procede fino alla fine della macro altrimenti errore e stop
          Next ii
          GoTo errore
          ok1:
          
          In allegato ho anche messo tutto il documento, la macro e' la numero 15 che si chiama GetChartValues2()
          Per vederla funzionare occorre andare sul foglio "analisi" selezionare il grafico nel mezzo (orario 18:00:03 - 18:05:03) e cliccare sul pulsante verde.
          La macro copia il range dell'orario del grafico nel foglio P, qui prelevo la prima ed ultima cella, ne estraggo ora e minuti e tolgo i secondi.
          Prelevo dal foglio "temperature" la prima cella con l'orario, tolgo ore e minuti, i secondi li sommo all'orario precedentemente trovato.
          Questi 2 orari li devo cercare nel foglio "temperature", tutto sto casino perchè voglio far in modo che attivando la macro dal foglio "analisi" il grafico si aggiorni
          con lo stesso orario anche nel foglio "temperature".
          I 2 orari non possono essere sincronizzati al secondo, sono 2 strumenti di acquisizione dati ed ognuno opera per conto suo, quindi voglio "utilizzando un termine moderno" sincronizzare
          i 2 orari simili ma differenti solo nei secondi.
          Il problema nasce al secondo ciclo di controllo per l'orario di fine, la condizione IF mi da FALSO anche se l'orario c'è! sia l'una che l'altra variabile sono uguali.
          A volte funziona a volte no! Sembra che in base all'orario cambia il risultato.
          Mi sono dilungato ma ho voluto spiegare come funziona, sperando di esserci riuscito...
          Perdonate la serie infinita di strafalcioni che trovate nelle macro, non c'è un ordino logico, è da poco che mi sono buttato nell'utilizzo delle macro.
          La macro 15 l'ho riempita di commenti per far capire meglio...spero.
          Allegati:
          You must be logged in to view attached files.
          #663 Score: 0 | Risposta

          muccapazza
          Partecipante
             Aggiungo...se non fosse proprio chiaro quello che ho spiegato...aprite il documento, andate sul foglio analisi, selezionate con un click il terzo grafico e cliccate sul tasto rosso. la pagina verrà aggiornata ricreandola con il grafico e l'orario selezionato, il codice non e' ancora completo quindi il tasto verde non viene cancellato.
            • Questa risposta è stata modificata 8 anni, 2 mesi fa da  muccapazza.
            #667 Score: 0 | Risposta

            Marius44
            Moderatore
              58 pts
              Ciao
              Penso sia necessario rivedere con attenzione il codice che compone gli orari.
              Coi dati presenti nel foglio, quando lancio la macro (non col pulsante verde - non funziona) mi dà come oracompleta 15:46:08, orario che non esiste nel Foglio "temperature" e, pertanto, mi caccia fuori.
              Seguendo il tuo suggerimento la risposta: è ritenta, sarai più fortunato!
              Puoi confermare? Puoi indicare più dettagliatamente?
              Ciao,
              Mario
              • Questa risposta è stata modificata 8 anni, 2 mesi fa da  Marius44.
              #669 Score: 0 | Risposta

              Luca73
              Partecipante
                58 pts
                Ciao
                Qualche informazione in più non sarebbe male. Cosa voui fare con la macro?
                tanto per cominciare avresti potuto dire a quale macro fa riferimento il pulsante osso e questa macro in quale modulo si trova (ce ne sono un sacco!!!!)
                Ora il primo errore viene dall'istruzione
                NumberOfRows = UBound(ActiveChart.SeriesCollection(1).Values)
                Penso che sia dovuto al fatto che non vi è alcun Grafico attivo.
                Evita di usare gli elementi attivi ma chiama gli oggetti con il loro nome.
                Ora ho notato altre cose:
                1) usi tantissimo i Goto. Evitali il più possibile, incasinano la lettura e ti portano a fare errori di costruzione codice.
                Io li uso solo per la gestione errori.
                2) esiste Exit Sub che ti fa terminare la macro in qualsiasi punto (al posto di fare un goto finex)
                3) Ho visto nel pezzo che hai postato sopra che fai riferimento ad un indice di ciclo fuori dal ciclo.
                Che io sappia sono strutture da evitare anche perchè con una verifica veloce il valore potrebbe essere diverso se il ciclo finisce oppure se lo interrompi
                4) Per uscire da un ciclo esiste Exit For
                5) Usa un OPTION explicit all'inizio che ti aiuta a dichiarare le variabili.
                A disposizione per ulteriori chiarimenti.
                Ciao
                Luca
                #702 Score: 0 | Risposta

                muccapazza
                Partecipante
                  Ciao a tutti e grazie per il vostro interessamento....
                  vedo che c'è un po di confusione...
                  Marius44 la macro per funzionare bisogna selezionare un grafico, come ho suggerito nel post precedente bisogna usare il secondo o il terzo non il primo...l'errore è più che giusto.
                  Luca73 ti rispondo passo passo...
                  La macro, cito il testo del post precedente.... la macro e’ la numero 15 che si chiama GetChartValues2(), quindi il tasto verde fa riferimento a quella, scusate ma pensavo fosse abbastanza chiaro il riferimento.
                  L'errore da te citato in riferimento a number of rows eccetera...si, da errore se non si seleziona il grafico, occorre selezionarlo, altrimenti con 5/6 grafici a video non sa quale prendere. cito testo...Per vederla funzionare occorre andare sul foglio “analisi” selezionare il grafico nel mezzo (orario 18:00:03 – 18:05:03) e cliccare sul pulsante verde.
                  Buono il consiglio di usare nomi fissi ma io uso una macro per creare ogni volta i grafici, ho posto un limite di 10 ma nulla mi vieta di andare avanti ad oltranza, scarto a priori il fatto di dare un nome fisso ad un grafico.
                  1) i goto son bellissimi heheehe, capisco quello che dici, inizialmente non c'erano ma allargando le esigenze  a volte mi son necessari per non stare a riscrivere tutta la macro, li uso per saltare porzioni di codici in modo anche da poter renderla più flessibile alle mie esigenze.
                  2) giusta osservazione exit sub...ma ho fatto in quel modo per non star a scrivere 2 o 3 volte lo stesso messaggio, è più corto goto finex: risultato il medesimo, meno memoria e meno ciclo clock per eseguirlo ahahahha
                  3)se intendi la variabile I del primo ciclo, be mi e' parso giusto usarla dato che riprendo da quel punto per iniziare il secondo ciclo piuttosto che iniziarlo da 1, non ho riscontrato problemi nel fare così
                  4) ai tempi del commodore 64 non esisteva exit for, l'abitudine è rimasta tale, però dai, excel non si offende per questa mancanza 🙂
                  5) su option mi devo documentare, non conosco, è già tanto se le dichiaro le variabili
                  Luca73 mi chiedi altre info...ero sicuro di aver spiegato bene...sinceramente ho bisogno che tu mi dica cosa non è chiaro.
                  Nel posto dopo la macro ho spiegato cosa voglio, cosa fa la macro, ho cercato di essere sintetico perchè, credimi, farei prima a spiegarlo al video che a scriverlo.
                  #706 Score: 0 | Risposta

                  muccapazza
                  Partecipante
                    La macro, nella sua bruttezza funziona perfettamente se il secondo ciclo for non padella.
                    Il problema non e' nel codice, ho passato quasi 6 ore per trovare la soluzione alla mia esigenza, mi ci sono rincoglionito, i calcoli son giusti, il taglia cuci incolla delle ore e secondi è corretto....a volte il solo cambiare un orario fa funzionare la macro...per esempio..18:00:08  e 18:30:08 non funziona....invece 18:00:08 e 18:31:08 funziona! Ovviamente 18:30:08 esiste ma quando viene comparata, anche se giusta risulta falsa!.
                    Mi viene da pensare che excel mi mostri una cosa che non è...magari esegue un arrotondamento di un decimale che non mi fa vedere e quindi per lui è falso.
                    Ho provate anche a gestire le variabili come numeri invece di DATE ma il risultato è il medesimo.
                    Se volete posso provare con cells.find ma dovete, gentilmente, guidarmi nel mettere le opzioni più giuste, anche se ciò già provato con i medesimi risultati.
                    #794 Score: 0 | Risposta

                    muccapazza
                    Partecipante
                      ho risolto...la risposta l'ho trovata in un'altro post qui.
                    Login Registrati
                    Stai vedendo 9 articoli - dal 1 a 9 (di 9 totali)
                    Rispondi a: condizione IF vera ma risultato falso
                    Gli allegati sono permessi solo ad utenti REGISTRATI
                    Le tue informazioni: