Sviluppare funzionalita su Microsoft Office con VBA Confronto fra data inizio di due celle e loop con data fine.

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

    Julius
    Partecipante
      1 pt

      Buon giorno 

      Ho un problema che non riesco a risolvere e ci stò ragionando parecchio su come aggirare il problema ma attualmente non mi viene nulla in mente.

      Ho un foglio che fà da scheda dipendente, questo foglio si compone da A8 a A38 in formato data di un mese.

      La colonna che và da D8 a D38 potrebbe avere un valore "TT".

      Sullo stesso foglio, vi sono anche le colonne AA(id utente), AB(data inizio dove solitamente si trova TT), AC (data fine).

      In pratica stò cercando una macro che prende la cella su AB1, la confronta con quelle su A8 e A38  e trovando la data faccia un Loop di TT dalla data di inizio fino alla data di fine.

      Una volta finito il ciclo, passa a AB2 se non è vuoto.

      Non sò se mi sono spiegato bene e mi scuso in anticipo se non lo fosse, allego pure un foglio excel di esempio dove su foglio "1" trovate un foglio già compilato per come voglio che questi sia, e su foglio 2 e tre ci sono le pagine per provare la macro.

      Vi ringrazio in anticipo, se potete aiutarmi anche solo con delle indicazioni.

      #48672 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        Julius ha scritto:

        e trovando la data faccia un Loop di TT dalla data di inizio fino alla data di fine.

        Io capisco questo: a partire dalla data indicata in AB e fino alla data indicata in AC (stessa riga ovviamente, per esempio la 1 e poi a seguire le successive), inserire nello specchietto mensile la voce "TT" nella colonna D della causale.

        Secondo me non serve nemmeno inventare chissa' che per cercare la data iniziale, dal momento che il mensile parte sempre a riga 8 e quindi la data indicata in AB si trova nella riga di A data da 8+(giorno - 1). La data finale si trova alla riga data da 8+(giorno-1) + (< differenza in giorni tra data iniziale e data finale >).

        Cosi' per esempio se la data cercata e' il 9 maggio (esempio in AB del foglio 1), la riga in cui si trova il 9 maggio e' la numero 16, e la riga della data finale (indicata in AC cioe' 12 maggio) e' 16 + 3 = 19.

        Quindi una semplice istruzione come Range(Cells(rigainiziale, "D"), Cells(rigafinale, "D")).Value = "TT" risolve il problema.

        #48673 Score: 0 | Risposta

        vecchio frac
        Senior Moderator
          272 pts

          Prova quindi a stendere il ciclo For che scandisce il range in AA (ricordati che esiste il comodo range definito da CurrentRegion senza impazzire  a calcolare la profondita' del range da scandire) e che preleva i due valori di data iniziale e data finale per costruire riga iniziale e riga finale.

          #48674 Score: 0 | Risposta

          gianfranco55
          Partecipante
            91 pts

            che versione hai per favore

            #48675 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              272 pts

              gianfranco55 ha scritto:

              oppure tutte le date con la TT

              Io ho inteso che lui vuole riempire l'intervallo tra le due date con la sigla TT.

              #48676 Score: 0 | Risposta

              gianfranco55
              Partecipante
                91 pts

                ciao

                vecchio

                ho capito vuole le sequenze di TT

                inizio e fine

                #48677 Score: 0 | Risposta

                Julius
                Partecipante
                  1 pt

                  Grazie vecchio frac, quindi tu mi parli di fare la differenza fra data iniziale e data finale ed effettuare un conta con il ciclo for ?

                  Ciao gianfranco55 e grazie anche a te, io voglio che sulla colonna D8:D38 venga effettuato un ciclo che restituisce un valore chiamato TT fra data inizio e data fine che si trovano indicate rispettivamente sulla cella AB e AC.

                  Io attualmente riesco a trovare solo la data inizio, come puoi vedere dal foglio N.2, ma mi manca il ciclo fino alla fata fine. 

                  La mia versione è office 2016.

                  #48678 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    272 pts

                    Dal tuo post vedo che non ho capito bene cosa vuoi fare. Il mio "fare la differenza tra le due date" era semplicemente per ottenere le righe del foglio dove si trovano le date (iniziale e finale) dello specchietto in AB e AC.

                    Tu stai dicendo che inserisci manualmente il codice TT e vuoi ricavare le date in cui questi codici compaiono. Aveva ragione Gianfranco quindi, che purtroppo ha modificato il suo post 🙂

                    #48679 Score: 0 | Risposta

                    gianfranco55
                    Partecipante
                      91 pts

                      ciao

                      vecchio

                      con il 2016 meglio una macro comunque poi vedo con le formule

                      #48680 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        272 pts

                        Julius ha scritto:

                        In pratica stò cercando una macro che prende la cella su AB1, la confronta con quelle su A8 e A38  e trovando la data faccia un Loop di TT dalla data di inizio fino alla data di fine.

                        E' qui che non si capisce bene. Trovare la data indicata da AB1 e' facile (si trova alla riga 8 + giorno della data). Ma poi cosa vuol dire "fare un Loop di TT" ?

                        Julius ha scritto:

                        voglio che sulla colonna D8:D38 venga effettuato un ciclo che restituisce un valore chiamato TT fra data inizio e data fine che si trovano indicate rispettivamente sulla cella AB e AC

                        Cosa significa "restituire un valore chiamato TT" fra due date ?

                        #48681 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          272 pts

                          gianfranco55 ha scritto:

                          con il 2016 meglio una macro comunque poi vedo con le formule

                          E' meglio una macro sempre    il problema e' che io non ho capito proprio niente, temo   

                          #48682 Score: 0 | Risposta

                          gianfranco55
                          Partecipante
                            91 pts

                            ciao

                            hai un inizio e una fine  TT in data 2

                             

                            poi hai un inizio in data 9 e una fine in data 12

                            ecco le date

                            02/01/1900-------02/01/1900

                            09/01/1900-------12/01/1900

                            in pratica inizio e fine delle frequenze

                            #48683 Score: 0 | Risposta

                            Julius
                            Partecipante
                              1 pt

                              Ragazzi mi spiego malissimo io, a volte cerco di spiegare meglio mettendo più dettagli di quanto servono  .

                              C'è la data sulla riga AB1 e AC1 che sono data inizio e data fine. Queste devono essere data inizio e data fine di un ciclo che mi scrive il valore TT sulla colonna D8:D38.

                              Esempio...se data inizio (AB1) e il 09/05/24 e data fine (AC1) 13/05/2024.

                              Allora il ciclo scrive su D16,D17,D18,D19,D20 il valore "TT".

                              Finito il ciclo si passa a vedere se la cella AB2 è compilata, se è vuota il ciclo termina.

                               

                              Ti ho portato io fuori strada vecchio frac con la questione che avevo già il valore TT, in effetti me lo sono calcolato con una formula INDICE/CONFRONTA ma se una macro può fare tutto quello scritto sopra, tolgo la formula e faccio fare tutto alla macro.

                              #48684 Score: 0 | Risposta

                              Julius
                              Partecipante
                                1 pt

                                gianfranco55 ha scritto:

                                ecco le date

                                02/01/1900-------02/01/1900

                                09/01/1900-------12/01/1900

                                in pratica inizio e fine delle frequenze

                                Precisamente Gianfranco55

                                #48687 Score: 0 | Risposta

                                gianfranco55
                                Partecipante
                                  91 pts

                                  ciao

                                  ho usato formule vintage e una colonna d'appoggio

                                  in N8 da trascinare in basso

                                  =SE(E(D7<>"TT";D8="TT");MAX($N$7:N7)+1;SE(O(E(D8="TT";D9="TT");E(D8="TT";D9<>"TT"));N7;""))

                                  in P8

                                  =SE(Q8<>"";$F$5;"")

                                  In Q8 matriciale ctrl maiuscolo invio

                                  =SE.ERRORE(PICCOLO(SE(BRMGFR70S28G273Q[Colonna7]=RIF.RIGA(A1);BRMGFR70S28G273Q[GIORNO];"");1);"")

                                  in R8 sempre matriciale

                                  =SE.ERRORE(GRANDE(SE(BRMGFR70S28G273Q[Colonna7]=RIF.RIGA(A1);BRMGFR70S28G273Q[GIORNO];"");1);"")

                                   

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

                                  vecchio frac
                                  Senior Moderator
                                    272 pts

                                    Julius ha scritto:

                                    Queste devono essere data inizio e data fine di un ciclo che mi scrive il valore TT sulla colonna D8:D38.

                                    e anche

                                    ma se una macro può fare tutto quello scritto sopra, tolgo la formula e faccio fare tutto alla macro.

                                    Allora avevo capito bene io all'inizio.

                                    La macro puo' farlo e in modo semplice.

                                    Se accetti le formule vintage di Gianfranco ok, ma se ti interessa una soluzione VBA ecco qui la mia proposta:

                                    Option Explicit
                                    
                                    Sub causaleTT()
                                    Dim ce As Range
                                    Dim i As Integer
                                    Dim j As Integer
                                    Dim rng As Range
                                    
                                        Set rng = ActiveSheet.Range("AA1").CurrentRegion
                                        For Each ce In rng.Rows
                                            i = Day(ce.Cells(2)) + 8 - 1      'riga della data iniziale
                                            j = i + (ce.Cells(3) - ce.Cells(2))     'riga della data finale
                                            Range(Cells(i, "D"), Cells(j, "D")).Value = "TT"
                                        Next
                                    
                                    End Sub

                                    Da richiamare come vuoi sul foglio attivo (come vuoi = da pulsante, o lancio diretto, o da associare a un Change ecectera)

                                    #48691 Score: 0 | Risposta

                                    gianfranco55
                                    Partecipante
                                      91 pts

                                      ciao vecchio

                                      meglio la macro

                                      io ho capito il contrario cioè estrapolare le date o sbaglio?

                                      #48692 Score: 0 | Risposta

                                      vecchio frac
                                      Senior Moderator
                                        272 pts

                                        gianfranco55 ha scritto:

                                        le formule spero ti siano servite a capire il meccanismo

                                        Non proprio completamente. Ma io sono io che sono negato fin dai tempi del Fred di Framework III.

                                        A cosa serve il tuo codice fiscale nelle formule matriciali in Q e R? A parte ovviamente farci sapere la tua data di nascita?   

                                        #48693 Score: 0 | Risposta

                                        gianfranco55
                                        Partecipante
                                          91 pts

                                          ciao

                                          il codice fiscale non è mio è il nome della tabella

                                          ma alla fine bisogna mettere le T in colonna D o estrapolare le date

                                          mi sono perso

                                          =SE(O(A8=MEDIANA(A8;$AA$1;$AB$1);A8=MEDIANA(A8;$AA$2;$AB$2));"TT";0)

                                          #48695 Score: 0 | Risposta

                                          vecchio frac
                                          Senior Moderator
                                            272 pts

                                            gianfranco55 ha scritto:

                                            ma alla fine bisogna mettere le T in colonna D o estrapolare le date

                                            mi sono perso

                                            Anch'io credo. Mi sembra di aver capito che bisogna mettere le TT tra la data iniziale e quella finale specificata in AB-AC.

                                            #48696 Score: 0 | Risposta

                                            Julius
                                            Partecipante
                                              1 pt

                                              Ragazzi siete miracolosi, ho provato entrambe le tecniche, sia le macro che le formule, entrambe danno il risultato sperato.

                                              La formula è perfetta fà quello che viene chiesto, la macro anche questa elabora benissimo, però nella scheda dipendente dove NON c'è niente, la N.3 ad esempio (quindi niente su AB e AC), mi scrive il 28 TT.

                                              Provo a mettere 

                                              if range("AB1")<>"" then
                                                  'MACRO DI VECCHIO FRAC
                                              
                                              else
                                                  exit Sub
                                              
                                              end if
                                              
                                              #48697 Score: 1 | Risposta

                                              Julius
                                              Partecipante
                                                1 pt

                                                Ragazzi perfetto funziona benissimo, siete stati immensi, grazie grazie grazie, ora posso integrare la macro al mio progetto!!!

                                                Grazie Vecchio e Grazie Giò

                                                Riporto di nuovo tutta la formula per aiutare gli altri utenti che incapperanno nel problema

                                                Sub causaleTT()
                                                Dim ce As Range
                                                Dim i As Integer
                                                Dim j As Integer
                                                Dim rng As Range
                                                
                                                If Range("AB1") <> "" Then
                                                      Set rng = ActiveSheet.Range("AA1").CurrentRegion
                                                    For Each ce In rng.Rows
                                                        i = Day(ce.Cells(2)) + 8 - 1      'riga della data iniziale
                                                        j = i + (ce.Cells(3) - ce.Cells(2))     'riga della data finale
                                                        Range(Cells(i, "D"), Cells(j, "D")).Value = "TT"
                                                    Next
                                                
                                                Else
                                                    Exit Sub
                                                
                                                End If
                                                
                                                
                                                
                                                
                                                End Sub
                                              Login Registrati
                                              Stai vedendo 22 articoli - dal 1 a 22 (di 22 totali)
                                              Rispondi a: Confronto fra data inizio di due celle e loop con data fine.
                                              Gli allegati sono permessi solo ad utenti REGISTRATI
                                              Le tue informazioni: