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

    Salve a tutti,

    per quanto sto chiedendo ho cercato come farlo in formula

    ma non sono riuscito a trovare la formula adatta.

    Evidentemente ci vorrebbe un aiuto con VBA.

    allego il file per aprire la discussione

    con la premessa che in ogni colonna occorre fare dei conteggi

    in base a quanto scritto in cella c3 che ora è = 3 ma che può essere cambiato 

    con 2 oppure 4, 5

     

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

    vecchio frac
    Senior Moderator
      238 pts

      Non ho capito niente nè del problema, delle difficoltà che hai incontrato, nè del risultato atteso. Fai un esempi concreto.

      #18764 Score: 0 | Risposta

      Salve Frac,

      cerco di spiegare:

      1)-la colonna D3 dovrò inserire in numero che può essere 1 oppure 2 quindi 3 eccetera fino

      ad un massimo di 6;

      2)-del numero indicato in D3 si deve fare la conta dei numeri 1 in modo consecutivo;

      3)-quindi contare dalla cella D6  i tre uno come indicato in D3;

      4)-il risultato di quando trova i tre uno va messo in colonna E a fianco al terzo uno 

      e mi sono reso conto che i dati della colonna G sostituiscono i dati di colonna E 

      e si deve contare dal primo uno che conta in quante celle ha trovato i tre uno,

      per esempio a rigo 14 del foglio trova i tre uno da rigo 8 fino a rigo 14 e segnala 

      in rigo E14 sette;

      quando ha trovato i primi tre uno ricomincia il conteggio e segnala sempre in colonna

      E quando trova l'altro gruppo di tre uno in quante celle cioè tre;

      NB quindi mettendo questi dati in colonna E la colonna G non serve;

      5)-la colonna F invece conta tra un gruppo e l'altro quante celle vuote partendo sempre da rigo 6

      quindi 6-7 F7 = 2; poi tra il primo gruppo e l'altro D15-D16 conta 2 celle vuote e in 

      F16 = 2 eccetera ecc

      Ripeto che la colonna G viene assorbita dalla colonna E.

      ....

      #18765 Score: 0 | Risposta

      riporto l'allegato

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

      Marius44
      Moderatore
        51 pts

        Ciao

        Se ho capito bene cosa vuoi fare, ti suggerisco questa macro (da allegare ad un Controllo Modulo - non ActiveX - oppure all'evento WorkSheet_Change del Foglio interessato)

        Option Explicit
        
        Sub conta()
        Dim ur As Long, i As Long, j As Long, x As Long
        Dim nn As Integer, a As Integer, b As Integer, v As Integer
        
        ur = Cells(Rows.Count, 4).End(xlUp).Row
        nn = Cells(3, 4).Value
        For i = 6 To ur
          If a = 0 And Cells(i, 4) = "" Then v = v + 1
          If Cells(i, 4) = 1 Then a = a + 1
          If a = nn Then
            For j = i To 6 Step -1
              If Cells(j, 4) = 1 Then
                b = b + 1
                If b = 3 Then
                  x = i - j + 1
                  Cells(i, 5) = x
                  Cells(i - x, 6) = v
                  a = 0: b = 0: x = 0: v = 0
                  Exit For
                End If
              End If
            Next j
          End If
        Next i
        End Sub
        

        Prova e fai sapere. Ciao,

        Mario

        #18795 Score: 0 | Risposta

        Salve Marius,

        una comunicazione:

        NB c'è stata una assenza del sito per 30-40 minuti circa .

        Riguardo al mio quesito:

        la macro funziona bene solo per il gruppo di 3 in 3

        mentre è da rivedere quella con gruppo di 2 e gruppo di 4

        questo vale anche per la colonna F gruppi a 2 e a 4

        Salve

         

        #18799 Score: 0 | Risposta

        Marius44
        Moderatore
          51 pts

          Ciao

          Hai ragione. E' colpa delle tante prove.

          Aggiusta questa riga If b = 3 Then così

          If b = nn Then

          Dovrebbe andar bene.

          Ciao,

          Mario

          #18800 Score: 0 | Risposta

             

          quindi da quello che fanno le 3 emoticons significa che va benissimo.

          un altro dato che la macro deve lavorare per più colonne,

          cioè la colonna D quella di ora poi la colonna G poi ancora La J eccetera

          fino a ad un tot colonne il cui valore della VARIABILE la prende da C3;

          l'altra variabile di D3 ora 3 sempre di rigo 3 sarà messa manualmente

          anche in G3 poi J3 eccetera.

          e poi basta.

           

           

           

          #18814 Score: 0 | Risposta

          Salve Marius,

          senza pretesa, chiedo se hai letto  il messaggio n 18800

          e se è chiaro quanto chiedo.

          giorgioantonio1

           

          #18815 Score: 0 | Risposta

          Marius44
          Moderatore
            51 pts

            Ciao

            No, non l'avevo letto. Lo leggo adesso.

            Se, come dici, la macro va bene, dovrebbe essere sufficiente inserire in una cella - come fatto per D3, cioè cells(3,4) - ed impostare un ciclo per "spazzolare" le colonne interessate.

             

            Al caso allega un file indicando quali sono le colonne che interessano.

            Ciao,

            Mario 

            #18816 Score: 0 | Risposta

            Salve, 

            non ho saputo mettere mano inserendo un ciclo for

            in quanto non mi ci trovo coll'usare celle (come spostare di colonna in colonna) con i dati mentre

            l'avrei fatto con range.

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

            Marius44
            Moderatore
              51 pts

              Ciao

              Stavolta non lo faccio!   

              Non per fare il duro ma per darti modo di ragionare e capire cosa deve fare il ciclo.

              Intanto ti dico che eri partito bene inserendo il ciclo per le colonne PRIMA del ciclo delle righe, però ...

              Andiamo con ordine.

              Hai detto che non sai a priori quante saranno le colonne. Quindi dobbiamo trovare il modo per sapere fin dove dobbiamo eseguire il ciclo. Questa riga di codice te la dò (è di un amico che l'ha messa a disposizione):

              LC = Cells(3, Cells.Columns.Count).End(xlToLeft).Column

              Cosa vuol dire?

              LC è la variabile alla quale assegneremo il risultato

              Cells fa riferimento a tutto il Foglio ma limita la ricerca alla riga 3 (il primo termine) della conta delle colonne partendo dalla fine (end) e procedendo verso sinistra. Il risultato sarà l'ultima colonna della riga 3 occupata.

              Adesso potremmo partire col ciclo ma ... non basta. Perchè? Perchè non dobbiamo verificare tutte le colonne dalla 3 fino alla fine perchè alcune colonne sono vuote, quindi dobbiamo dare uno step. Il codice è così:

              For y = 4 to LC step 3

              In tal modo passerà dalla colonna 3 alla 6, ecc.

              Adesso prosegui da solo badando al fatto che la verifica della cella deve tener conto della colonna che cambia (non ci può più stare 4!) e anche del valore che prima era solo in D3 ma che adesso è nelle altre colonne.

              Non temere. Sembra difficile (anche a spiegarlo) ma se ci ragioni ci riuscirai.

              Tenta. Al caso sai cosa devi fare . Ciao,

              Mario

              #18820 Score: 0 | Risposta

              Marius44
              Moderatore
                51 pts

                Ciao

                Ho notato che ci sono altre cose da tenere presenti (tu cancelli, giustamente, le colonne dove mettere i risultati ma le colonne cambiano; inoltre cambiando colonna alcune variabile devono essere azzerate).

                Quand'ero piccolo facevo i "fioretti" (una cosa buona per scontare una monelleria   . Ecco, questo è un fioretto!

                Option Explicit
                
                Sub conta()
                Dim ur As Long, i As Long, j As Long, x As Long
                Dim nn As Integer, a As Integer, b As Integer, v As Integer, y As Integer
                Dim LC As Long
                ur = Cells(Rows.Count, 4).End(xlUp).Row
                LC = Cells(3, Cells.Columns.Count).End(xlToLeft).Column
                For y = 4 To LC Step 3
                  Range(Cells(6, y + 1), Cells(100, y + 2)).ClearContents
                  nn = Cells(3, y).Value
                  For i = 6 To ur
                    If a = 0 And Cells(i, y) = "" Then v = v + 1
                    If Cells(i, y) = 1 Then a = a + 1
                    If a = nn Then
                      For j = i To 6 Step -1
                        If Cells(j, y) = 1 Then
                          b = b + 1
                          If b = nn Then
                            x = i - j + 1
                            Cells(i, y + 1) = x
                            Cells(i - x, y + 2) = v
                            a = 0: b = 0: x = 0: v = 0
                            Exit For
                          End If
                        End If
                      Next j
                    End If
                  Next i
                  a = 0: b = 0: x = 0: v = 0
                Next y
                ActiveCell.Offset(0, 3).Range("A1").Select
                End Sub

                Prima tenta da solo (come ti ho suggerito) e poi prova la mia macro e dimmi se va bene.

                Ciao,

                Mario

                #18828 Score: 0 | Risposta

                Salve Marius,

                dire che ci sarei arrivato da solo per me sarebbe stato un sogno,

                intanto la variabile LC la consideravo o Integer poi Double mentre vedo che è Long.

                Senza farti perdere tempo la tua macro la sto osservando e prendendo nota solo 

                che non ho capito che i dati li deve scrivere in colonna E cioè cells(5, y+1 ) a cells(100,y+2)

                per clear poi in fondo alla macro 

                ActiveCell.Offset(0, 3).Range("A1").Select fa il saltello 

                come fa a capire che deve cominciare a cancellare e scrivere da colonna 5? cioè E.

                2 parole se hai tempo.

                Buona giornata

                #18832 Score: 0 | Risposta

                Marius44
                Moderatore
                  51 pts

                  giorgioantonio1 ha scritto:

                  i dati li deve scrivere in colonna E cioè cells(5, y+1 ) a cells(100,y+2)

                  per clear poi in fondo alla macro 

                  ActiveCell.Offset(0, 3).Range("A1").Select fa il saltello 

                  Ciao

                  Non ho capito cosa intendi.

                  Dal file che hai allegato io ho immaginato che tu volessi (ogni tre colonne):

                  a) leggere il dato che che nella riga 3 per sapere quanti "1" deve contare

                  b) scrivere nella colonna "adiacente" quante sono le celle (vuote o piene) dove l' "1" raggiunge il numero di volte indicato nella riga 3

                  c) scrivere nella colonna "successiva" alla adiacente anzidetta quante sono le celle vuote.

                  Se quanto ho detto sopra è corretto, questo la macro esegue.

                  Se no, spiegami meglio cosa intendi oppure se vuoi dei commenti alle righe di codice.

                  Ciao,

                  Mario

                  #18833 Score: 0 | Risposta

                   

                  " scrivere nella colonna "adiacente""

                  adiacente cioè la colonna E

                  dove si capisce che la colonna adiacente la D è  la E? 

                  Marius tutto perfetto la macro fa quello richiesto 

                  No Problem

                  #18838 Score: 0 | Risposta

                  Marius44
                  Moderatore
                    51 pts

                    Ciao

                    Scusa ma voglio capire meglio.

                    La colonna adiacente a quella dove sono i dati è, di volta in volta, la E, la H, la K e così via fino alla AC (con le relative F, I, L fino alla AD)

                    Non solo la E.

                    Ciao,

                    Mario

                    #18959 Score: 0 | Risposta

                    Salve Marius,

                    non sono fuggito, ma dove vado?

                    Cortesemente sarebbe da completare il lavoro che da me nel modo

                    più assoluto potrei portare a termine.

                    Per esempio le colonne da conteggiare sono 90;

                    credevo di esserci riuscito ma poi con i controlli mi sono accorto che

                    per i primi 9 il conteggio (colonna E ed F) lo fa, mentre per il restante il secondo dato  

                    fino a 90 non ne tiene conto  dico quello tipo in colonna F non lo calcola;

                    poi siccome i calcoli che deve fare vertono su 90 colonne  x  2 e 3-4 mila righe

                    e impiega 1, 30.

                    Domanda non ci sarebbe un codice che sia più veloce di questo?

                    e ci sarebbe un'altro calcolo che si dovrebbe mettere una riga sotto cioè la prima riga

                    vuota dopo l'ultimo dato.

                    Intanto potresti modificare tenendo conto che il calcolo da colonna D va fatto per 90 volte'

                    poi non saprei sul velocizzare, il poi dopo ne va della tua pazienza

                    Saluti

                    Giorgioantonio

                    #18976 Score: 0 | Risposta

                    Salve Marius,

                    nel precedente post ho detto una grandissima fesseria,

                    la macro l'ho riportata nuovamente dal sito e lanciata

                    funziona al 100%.

                    E anche come tempo di esecuzione non credo di fare in tempo a prendere il 

                    caffè che la macro in 18-19 SECONDI fa quel che deve fare.

                    Quindi ti chiedo di accettare le mi scuse.

                    Allego un nuovo file perchè è la continua di quanto hai fatto prima.

                    Volendo puoi creare una macro a se che portandosi al primo rigo vuoto 

                    della elaborazione fare quanto spiegato in allegato.

                    Se puoi - grazie

                    Giorgioantonio1

                     

                     

                     

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

                    Salve Marcus,

                    forse fra i tanti messaggi ti sarà sfuggito un ulteriore mio S.O.S.

                    Se e quando puoi intervenire al 18976 dove ho allegato

                    anche il file e in fondo ultima riga ci sono degli esempi 

                    per ciò che vorrei.

                    La macro la potresti fare anche separata o se vuoi  collegarla 

                    all'altra

                    Giorgioantonio

                     

                    #19047 Score: 0 | Risposta

                    Marius44
                    Moderatore
                      51 pts

                      Ciao

                      Ho visto l'allegato ma non ci ho capito nulla!

                      Perchè nel file non c'è la macro che t'avevo suggerita (e che dici funziona)?

                      Cosa vorresti che facesse la macro? Spiegalo qui e non nel foglio facendo riferimento alle celle.

                      Ciao,

                      Mario

                      #19102 Score: 0 | Risposta

                      Salve Marcus,
                      avevo scritto che la macro non funzionava bene
                      e nello stesso tempo ci impiegava H 1, 30
                      questo perchè avevo combinato dei pasticci,
                      ho ripreso tale e quale la TUA macro e
                       funziona bene e ci impiega appena 19 secondi.

                      L'aiuto che vorrei cioè la macro se la si vuole accodare alla precedente
                      altrimenti la si può ritenere funzinante da sola.

                      Stando all'allegato la colonna A parte da rigo 6 e vengono alimentati
                      nel caso la riga dopo l'ultima piena è la riga 2306 riga vuota;

                      -ottenere il conteggio 2 risultati da mettere in E2306 ed F2306;
                      -scrivo cosa farei con i tasti:(cortesemente usa i tasti come indicato sotto, questa è la migliore spiegazione)
                      seleziono E2305 CTRL+MAIU+FRECCIA IN SU e scendo di una cella che trova il numero (16)
                      in questo caso ho selezionato E2305:E2303 con questa selezione
                      seleziono anche D cioè la colonna D2305:E2303 e conto quanti 1 presenti se zero 1 =0;
                      e scrivo questo dato in E2306;
                      da questa selezione ritorno in, freccia a sx e ho riselezionato E2305:E2303 e conto quante
                      celle vuote di questa selezione e scrivo il dato in F2306.

                      Mi scuso di questa spiegazione ma se lo scrivevo non credo mi sarei spiegato.
                      Ti è sufficiente rispettare la tastiera per capire ciò che desidero.
                      Idem con le altre colonne.
                      Giorgioantoni1

                      #19149 Score: 0 | Risposta

                      Salve Mario,

                      se hai letto il post, la spiegazione ti è chiara?

                      giorgioantonio

                      #19150 Score: 0 | Risposta

                      Marius44
                      Moderatore
                        51 pts

                        Ciao GiorgioAntonio

                        Con la premessa che non ho capito bene cosa vuoi fare,

                        seguo i tuoi suggerimenti e m'è venuta fuori questa macro

                        Sub finale()
                        'individuo l'ultima cella piena della colonna A
                        ur = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
                        For i = ur To 1 Step -1         'ciclo a ritroso
                          If Cells(i, 4) <> "" Then     'se una cella NON è vuota
                            For j = i To ur             'ciclo da quella cella alla fine
                              If Cells(j, 4) = 1 Then a = a + 1   'conto gli 1
                              If Cells(j, 4) = "" Then b = b + 1  'conto le vuote
                            Next j
                            'scrivo i dati ed esco
                            Cells(ur + 2, 5) = a
                            Cells(ur + 2, 6) = b
                            Exit For
                          End If
                        Next i
                        End Sub

                        Credo che faccia quello che chiedi (SOLO per la colonna D) ma porto a tua conoscenza che il risultato che hai indicato per le celle vuote mi sembra errato in quanto NON va contata la cella 2306; in questa riga ci va il totale.

                        Io ho indicato il risultato nella riga 2307 per farti notare la differenza (per mettere il risultato nella riga 2306 nelle due righe di codice prima di Exit For invece di +2 metti +1).

                        Fai sapere. Ciao,

                        Mario

                        #19151 Score: 0 | Risposta

                        c'è una cella in meno che conta le vuote.

                        Cioè partendo da 2305 a 2303  farebbe 

                        2305-2304-2303,

                        il fatto che il calcolo lo fa alla seconda riga vuota non ha importanza

                        e comunque il 2 si porta a 1.

                        Però c'è da vedere come si comporta alla colonna successiva

                        e se ripete il conteggio di una cella in meno basterebbe fare alla fine +1

                        e poi perchè non fa il conteggio alle altre colonne?

                        il passo è sempre di 3 in 3.

                        Mi pare che ci sia la variabile LC che potresti inserire.

                        Non te ne volere ma non chiedermi di farlo da solo,

                        nell'altra macro nel mettere mano avevo combinato

                        dei grossi pasticci e come innanzi detto oltre a non funzionare bene

                        ci impiegava un'ora e mezza.

                        vedi un pò.

                        ciao

                      Login Registrati
                      Stai vedendo 25 articoli - dal 1 a 25 (di 34 totali)
                      Rispondi a: calcolare in colonna
                      Gli allegati sono permessi solo ad utenti REGISTRATI
                      Le tue informazioni: