Excel e gli applicativi Microsoft Office Concatena con 2 condizioni

Login Registrati
Stai vedendo 25 articoli - dal 26 a 50 (di 84 totali)
  • Autore
    Articoli
  • #38989 Score: 0 | Risposta

    vecchio frac
    Senior Moderator
      272 pts

      Avevo già previsto questo problema. Togli l'intera riga perchè è ininfluente.

      Il resto dovrebbe prevedere range già qualificati.

      #38990 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        Dodi ha scritto:

        .AutoFilter field:=2, Criteria1:=CStr(ce) in .AutoFilter field:=2, Criteria1:=CDate(ce)

        Questa è corretta. Con CDate a me funziona 🙂

        #38991 Score: 0 | Risposta

        GiuseppeMN
        Partecipante
          19 pts

          Buon pomeriggio @vecchio frac;

          Posta pure la tua soluzione!

          Come dicevo sono entrato solo ora in questa Discussione, quindi per la soluzione mi servirà qualche tempo.
          In sintesi, volevo calcolare quante date sono previste nel Foglio di lavoro "Giornale_Lavori", e utilizzare una matrice che contenga tutte le date.
          Fatto ciò attivo il Foglio di lavoro "ARCHIVIO", calcolo quanti Record sono attivi e, tramite la Funzione "Select case", vado a valutare il Campo "GRUPPO" in funzione del Campo "Data".
          Il risultato sarà il Campo "NOME"; tutti i Nominativi del GRUPPO "1" saranno separati da Chr(10).
          Analogamente per il Campo "3".

          Purtroppo al vecchietto Giuseppe servirà diverso tempo, e diverse birre, per postare il Codice opportunamente testato; domani inizio a scrivere il Codice.
          Abbiate Fede!

          Giuseppe

          #38992 Score: 0 | Risposta

          Dodi
          Partecipante
            2 pts

            ok. funziona 

            perfetto, 

            lascio aperta la discussione non la metto come risolto, perchè son curioso di vedere anche la soluzione di Giuseppe, 

            che saluto e ringrazio ancora per avermi dato una mano anche lui in un'altra discussione. 

            cerco di apprendere ma rispetto a voi mi diletto a creare piccoli gestionali che mi alleviano il duro lavoro e di essere sempre in linea con le richieste da parte dell'azienda e dei committenti. 

            intanto B.W.

            sto alla finestra a vedere e curiosare anche per la soluzione di Giuseppe. 

            #38993 Score: 0 | Risposta

            GiuseppeMN
            Partecipante
              19 pts

              Buon pomeriggio @vecchio frac;
              non è perfetto, bisogna togliere Chr(10) dal primo Record calcolato ma ... ho finito le birre, quindi, operazione rimandata.

              Per attivare il Codice VBA, click sul "semaforo in F1".

               

              Giuseppe

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

              vecchio frac
              Senior Moderator
                272 pts

                GiuseppeMN ha scritto:

                quindi per la soluzione mi servirà qualche tempo

                Non c'è una data di scadenza, e tutte le idee sono interessanti, non ci sono soluzioni univoche e comunque si impara sempre qualcosa.

                GiuseppeMN ha scritto:

                In sintesi

                Si tratta di un approccio che coinvolge solo i metodi built in di VBA, mentre io ho mescolato funzionalità proprie di Excel (l'uso dei filtri, la gestione dirette delle Areas cioè di porzioni di intervallo). Il vantaggio di quell'approccio è che svincola il programmatore dal pensare agli oggetti dell'applicazione che ha sottomano: la conseguenza è che il metodo utilizzato potrebbe essere proposto, senza eccessive modifiche, anche per altri applicativi come per esempio Word.  Lo svantaggio è che il codice diventa più lungo (ma non meno performante, se è scritto bene).

                GiuseppeMN ha scritto:

                al vecchietto Giuseppe servirà diverso tempo, e diverse birre

                Il vecchietto Giuseppe ha tutto il tempo che vuole. Sulle birre, se possibile, mi accodo     

                #38996 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  272 pts

                  GiuseppeMN ha scritto:

                  Per attivare il Codice VBA, click sul "semaforo in F1".

                  Neanche il tempo di scrivere il post precedente e tu hai già finito     

                  #38999 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    272 pts

                    GiuseppeMN ha scritto:

                    bisogna togliere Chr(10) dal primo Record

                    Il codice è perfetto ed, essendo svincolato dagli oggetti di Excel, funzionerà perfettamente in qualsiasi condizione.
                    Per risolvere questo, propongo un sistema semplice prima dell'immissione in cella:

                    Cells(x + 1, 6).Value = Mid$(Opz(1, x), 2)

                    #39000 Score: 0 | Risposta

                    Dodi
                    Partecipante
                      2 pts

                      Ben fatto Giuseppe, 

                      una domanda, e possibile estendere il concatena anche sulla colonna Subappalti?

                       

                      a questo punto chiedo, e sono in debito con Vecchio Frac per una birra al chiosco sulle rive dell'Adige.

                      poi per Giuseppe cosa dire, grazie mille di cuore, aspettando anche l'estensione sulla colonna Subappalti

                       

                       

                       

                      #39001 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        272 pts

                        Comunque butto lì una sfidettina, il Select Case è superfluo, come può essere rimpiazzato? solo VBA, niente trucchi Excel.   

                        #39002 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          272 pts

                          Dodi ha scritto:

                          e possibile estendere il concatena anche sulla colonna Subappalti?

                          Il codice di Giuseppe è sufficientemente flessibile da accettare fino a 8 codici gruppo.
                          Non è per niente difficile estendere la resa dei gruppi superiori al codice 3. Prova a mettere qualche codice 4 nella colonna del gruppo e poi aggiungi una riga come questa nel ciclo finale che si occupa di valorizzare il foglio:

                          Cells(x + 1, 9).Value = Opz(4, x)

                          Ecco, in colonna subappaltatori avrai le righe il cui gruppo è identificato dal 4.

                          Sul mio codice non ho ancora fatto alcuna modifica   

                           

                          #39003 Score: 0 | Risposta

                          vecchio frac
                          Senior Moderator
                            272 pts

                            Il mio progetto ha un altro difetto , si inchioda se non ci sono corrispondenze nell'elenco filtrato.

                            Allego la revisione del file, in cui ho esteso a un fantomatico gruppo 4 il recupero dei dati (il gruppo 4 viene inserito nella colonna del subappaltatore). Basta aggiungere il codice nell'array della variabile g nel suo For Each.

                             

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

                            Dodi
                            Partecipante
                              2 pts

                              ho dovuto aggiungere anche 

                              Case 4
                              For x = 1 To NrD
                              If Cells(y, 2) = DtX(x) Then
                              Opz(4, x) = Opz(4, x) & Chr(10) & Cells(y, 4).Value
                              End If
                              Next x

                               

                              saluti, 

                              mi e chiaro e semplice, il codice di Giuseppe, 

                              il tuo,  buon vecchio Frac. ancora devo finire di interpretarlo per adeguarlo ad altre eventuali soluzioni. 

                               

                               

                              #39006 Score: 0 | Risposta

                              vecchio frac
                              Senior Moderator
                                272 pts

                                Ah ok, stavi ancora esaminando il codice con Select Case. Io l'ho eliminato e appena tutti pronti vi illustro la semplice modifica 🙂

                                #39007 Score: 0 | Risposta

                                gianfranco55
                                Partecipante
                                  91 pts

                                  ciao

                                  quando avete finito io sono pronto eh!

                                  #39008 Score: 0 | Risposta

                                  vecchio frac
                                  Senior Moderator
                                    272 pts

                                    gianfranco55 ha scritto:

                                    quando avete finito io sono pronto

                                    Hai pagato il biglietto?     

                                    #39009 Score: 0 | Risposta

                                    GiuseppeMN
                                    Partecipante
                                      19 pts

                                      Buona sera @vecchio frac;
                                      rieccomi.

                                      Comunque butto lì una sfidettina, il Select Case è superfluo, come può essere rimpiazzato?

                                      Sono d'accordo con Te, e ci mancherebbe altro, domani provo a togliere "Select case", che mi era servito per testare il Codice VBA sostituendolo con il valore del Campo "GRUPPO".

                                      Voglio dire, molto probabilmente il riferimento in "Select case".
                                      Cells(y, 3).Value
                                      potrebbe essere tranquillamente sostituendo i vari "Case" con il Valore del "GRUPPO".

                                      Voglio dire anziché scrivere:

                                      Case 1
                                      For x = 1 To NrD
                                      If Cells(y, 2).Value = DtX(x) Then
                                      Opz(1, x) = Opz(1, x) & Chr(10) & Cells(y, 4).Value
                                      End If
                                      Next x

                                      credo si potrebbe scrivere:

                                      For x = 1 To NrD
                                      If Cells(y, 2).Value = DtX(x) Then
                                      Opz(Cells(y, 3), x).Value = Opz(Cells(y, 3).Value, x) & Chr(10) & Cells(y, 4).Value
                                      End If
                                      Next x
                                      o qualche cosa di questo tipo.

                                      Ma, gran premio Moto GP permettendo, preferisco testare questa ipotesi e aggiornarVi.

                                      Buona serata.

                                      Giuseppe

                                       

                                      #39010 Score: 0 | Risposta

                                      Dodi
                                      Partecipante
                                        2 pts

                                        Ecco prima che finisce la sfida volevo sollevare un problema che mi è sorto usando le vostre soluzioni sul file originale con la userform.

                                        Quando faccio la registrazione e richiamo il comando concatena(vostra soluzione)

                                        Ci mette un eternità perché tutte le volte rielabora il foglio, 

                                        Quello che chiedevo, è possibile farlo funzionare solo sui dati inseriti nell'ultima registrazione senza che va a rielaborare il tutto e ricopiare i dati nel foglio giornale lavori? 

                                        Spero di aver spiegato bene. 

                                         

                                        #39011 Score: 0 | Risposta

                                        Dodi
                                        Partecipante
                                          2 pts

                                          Mmmmm spero che capite cosa volevo dire.   

                                          #39012 Score: 0 | Risposta

                                          vecchio frac
                                          Senior Moderator
                                            272 pts

                                            Premesso che comunque la soluzione di Giuseppe ha il vantaggio di essere molto chiara e comprensibile ma è probabilmente più lenta della mia, che sfrutta il filtro e esegue pochi cicli di confronto (mi piacerebbe fare un test su qualche centinaio di migliaio di righe, per curiosità), in entrambi i casi tuttavia il codice riparte da zero e spazzola il range di dati come fosse la prima volta.

                                            Si potrebbe aggiungere un campo finale di controllo nel foglio di Archivio, da marcare con una "x" quando la relativa riga è stata processata (cioè al termine dell'esecuzione della macro di concatenaggio) ed evitare così, durante l'esecuzione del codice, di considerarla. 

                                            #39013 Score: 0 | Risposta

                                            vecchio frac
                                            Senior Moderator
                                              272 pts

                                              Ti allego la mia revisione del file che tiene conto di questa nuova possibilità.
                                              Se in colonna O di Archivio c'è una x, quella riga non verrà processata.

                                              Non ho messo mano al codice di Giuseppe ma tieni presente che qualunque soluzione adotti, devi essere consapevole di come funziona per poterla modificare e adattare alle tue esigenze.

                                               

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

                                              vecchio frac
                                              Senior Moderator
                                                272 pts

                                                GiuseppeMN ha scritto:

                                                potrebbe essere tranquillamente sostituendo i vari "Case" con il Valore del "GRUPPO".

                                                Sì: con un semplice ciclo For.

                                                GiuseppeMN ha scritto:

                                                credo si potrebbe scrivere:

                                                Più semplice:

                                                    For y = 2 To NrC
                                                        i = Cells(y, 3).Value
                                                        For x = 1 To NrD
                                                            If Cells(y, 2) = DtX(x) Then
                                                                Opz(i, x) = Opz(i, x) & Chr(10) & Cells(y, 4).Value
                                                            End If
                                                        Next
                                                    Next
                                                

                                                E quindi, per recuperare i valori, allo stesso modo:

                                                    Worksheets("Giornale_lavori").Select
                                                    For x = 1 To NrD
                                                        If Cells(x + 1, 2) = DtX(x) Then
                                                            For i = 1 To 4
                                                                Cells(x + 1, i + 5).Value = Mid$(Opz(i, x), 2)
                                                            Next
                                                        End If
                                                    Next

                                                Nota anche come, elegantemente, si risolve in un colpo solo il problema de ritorno a capo all'inizio di cella.
                                                Riallego il tuo file modificato.
                                                Nota: non ho implementato in questo file l'ultima richiesta di Dodi.

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

                                                GiuseppeMN
                                                Partecipante
                                                  19 pts

                                                  Buona sera @vecchio frac;

                                                  ... mi piacerebbe fare un test su qualche centinaio di migliaio di righe, per curiosità ...

                                                  Dopo i 1.500 2.000 record, non ho dubbi:
                                                  ACCESS

                                                  A mio modesto parere Excel non è un Database relazionare come ACCESS che richiede una programmazione più impegnativa ma poi ripaga sia in tempo di esecuzione che in possibilità di utilizzo delle "Relazioni".
                                                  Ma questa è solo una mia modesta opinione.

                                                  A margine di quanto sopra, a meno di richieste di chiarimento, credo di aver concluso il mio contributo a questa Discussione; tanto è dovuto per consentire all'Ottimo @gianfranco55 che, giustamente, "scalpita"

                                                  quando avete finito io sono pronto eh!

                                                  per rientrare nella Discussione oppure ...

                                                  per una birra al chiosco sulle rive dell'Adige

                                                  Buona serata.

                                                  Giuseppe

                                                  #39018 Score: 0 | Risposta

                                                  Dodi
                                                  Partecipante
                                                    2 pts

                                                    per Vecchio Frac, 

                                                    la soluzione con la X a fine ciclo mi piace, 

                                                    e devo dire che il tuo codice concatena sembra che gira meglio, 

                                                    mentre il codice di Giuseppe 

                                                    per me è più comprensibile per il mio livello,

                                                    e mi è più facile da adattare alle mie esigenze future, 

                                                    se mi posta anche la soluzione per risolvere il problema della rielaborazione di tutti i dati, per il mio livello di comprensione penso di capirlo meglio,

                                                    cmq terrò anche conto della formula di Gianfranco , che a mali estremi la uso manualmente,  

                                                    grazie per la pazienza. 

                                                     

                                                     

                                                     

                                                    gainfranco

                                                    #39019 Score: 0 | Risposta

                                                    vecchio frac
                                                    Senior Moderator
                                                      272 pts

                                                      GiuseppeMN ha scritto:

                                                      Dopo i 1.500 2.000 record, non ho dubbi: ACCESS

                                                      Finalmente qualcuno che la pensa come me!... Anch'io sono un Accessista convinto!   

                                                       

                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 26 a 50 (di 84 totali)
                                                    Rispondi a: Concatena con 2 condizioni
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: