Sviluppare funzionalita su Microsoft Office con VBA Trasformare una formula cerca vert da excel in vba

Login Registrati
Stai vedendo 23 articoli - dal 26 a 48 (di 48 totali)
  • Autore
    Articoli
  • #6482 Score: 0 | Risposta

    Luca73
    Partecipante
      58 pts

      Io non uso mai specialcells

      Io farei un ciclo del tipo

      Dim CellaW
      For Each CellaW in Range("L3", Range("L3").end(xltoright))
      ' qui la variabile CellaW diventa uno per uno tutte le celle da L3 fino all'ltima occupata alla sua destra
      Next CellaW
      #6483 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        Perché parli di Specialcells? Non ne vedo traccia in questo codice.

        Comunque: provaci e vediamo.

        Implementa un ciclo For Each per ogni cella del range che ti interessa, al cui interno infili il codice che deve essere eseguito ad ogni passaggio.

        #6484 Score: 0 | Risposta

        vecchio frac
        Senior Moderator
          272 pts

          Battuto da Luca sul tempo  😛 

          Cercavo di far ragionare il nostro amico.

          #6487 Score: 0 | Risposta

          Espresso90
          Partecipante

            <em class="bbp-the-quote-cite">Luca73 wrote:Io non uso mai specialcells

            Vero forse così è addirittura più smart rispetto al metodo specialcells.

            L' unica cosa è che mi viene restituito un unico valore invece io vorrei che mi vengano restituiti tutti i valori di ogni singola cella. Se non sono stato chiaro ditemi pure.

            #6491 Score: 0 | Risposta

            Luca73
            Partecipante
              58 pts

              Ciao

              punto 1) senza avere un file e sapre come è fatto, darti suggerimenti è come cercare di sparare ad un orso bendati....(bello l'esempio???)

              Punto 2) come è fatto il tuo range che vuoi esaminare? sono tutte celle piene? ci sono celle vuote? ci sono celle unite? ci sono numeri, ci sono formule,.....?

              Sapere quanto sopra fa modificare il codce con cui selezioni un intervallo:

              Puoi selezionare un intervallo dando la prima el'ultima cella, oppure la prima e andare a destra fino alla'ultima occupata oppure la prima cella e andare a cercare l'ultima della raga che non sia vuota, la prima cella e poi un numero fisso (o variabile di celle a detra),....

              Ogni range avrà il suo metodo migliore di selezione.

              Inoltre a seconda di quello che devi fare può convenire usare un for each e far "scorrere le celle" oppure usare una singola cella e un offset, oppure un ciclo do .... loop.

              Allega il tuo file o una copia semplificata che sia significativa di come è fatto e senza dati sensibili  e spiega in dettaglio cosa vuoi fare.

              Inoltre non ho capito qual'è il tuo livello con il VBA, non mi sembra di aver letto analisi legate al fatto che hai fatto un debug passo-passo dei codici proposti.

              Tu scrivi 

              L' unica cosa è che mi viene restituito un unico valore

              cosa vuol dire, come ti viene restituito?

              Ciao

              Luca

               

               

              #6494 Score: 0 | Risposta

              Espresso90
              Partecipante

                <em class="bbp-the-quote-cite">Luca73 wrote:Ciao

                1) bell' esempio ahah

                2) ti allego un file fac-simile

                 

                Anticipo il fatto che il risultato deve essere visualizzato in un' altro foglio excel e che le celle nel file test hanno soltanto il valore e non la formula(come nel file originale). Il codice vba deve andare a leggere cella per cella i valori che trova in questo file e copiarli nel file excel di output.

                Quando dico che mi viene restituito un unico valore vuol dire che quando lancio la macro nel foglio di output mi compare un unico valore (che può essere yes, no o n/a)

                Il mio livello di vba è molto basso, sono alle prime armi, ci lavoro da 4-5 giorni, chiedo scusa per errori e per "l' ignoranza" e ti ringrazio della disponibilità.

                 

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

                Luca73
                Partecipante
                  58 pts

                   

                  Ciao Nel file che hai allegato 

                  sulla riga 3 della colonna L venga fatta automaticamente per tutte le celle della colonna L.

                  C'è occupata solo ala cella AB3 cosa ti serve un ciclo?

                   

                  #6521 Score: 0 | Risposta

                  Espresso90
                  Partecipante

                    <em class="bbp-the-quote-cite">Luca73 wrote: 

                    Nel foglio di lavoro LV deve essere letta cella per cella tutta la colonna AB e i valori devono essere scritti uno ad uno in un altro foglio excel sempre in colonna.

                    #6522 Score: 0 | Risposta

                    Luca73
                    Partecipante
                      58 pts

                      Ma perche scrivi una cosa se poi ne vuoi un'altra?

                      Sub Prova2()
                      Dim CellaW
                      For each cellaW in Range(Range("AB1"), Range("AB1").Offset(Rows.Count - 1, 0).End(xlUp)).Select
                      'qui tue operazioni su cella W
                      Next
                      End Sub
                      
                      #6524 Score: 0 | Risposta

                      Espresso90
                      Partecipante

                        <em class="bbp-the-quote-cite">Luca73 wrote:Ma perche scrivi una cosa se poi ne vuoi un'altra?

                        Scusami quando avrei fatto una richiesta diversa?

                        Comunque mi viene segnalato un errore di Run-Time '13': Tipo non corrispondente. --->Riga : For Each CellaW In Range(Range("AB1"), Range("AB1").Offset(Rows.Count - 1, 0).End(xlUp)).Select

                         

                        #6525 Score: 0 | Risposta

                        Espresso90
                        Partecipante
                          Sub Macro4()
                          ' colonna AB test
                          
                              Dim l As String
                              Dim result3 As String
                              Const START_ROW = 2 ' Riga di inizio della tabella
                              
                              
                              Windows("ECA Layout Validation_v01- PAUL KPI CALCULATION.xlsx").Activate
                              Sheets("LV").Select
                              
                          	For intI = START_ROW + 2 To Sheets("LV").Cells.SpecialCells(xlLastCell).Row Step 1
                              
                                If l = "N/A" Then
                                  result3 = "N/A"
                                  ElseIf l <> "N/A" And l > "01/01/2017" Then
                                  'And p > #1/1/2017# Then
                                      result3 = "YES"
                                      ElseIf l <> "N/A" And l < "01/01/2017" Then
                                      result3 = "NO"
                                  End If
                              Next
                              
                              Windows("Layout Validation.xlsm").Activate
                          
                              Range("C5").Value = result3
                            
                          End Sub

                          Penso di essere riuscito nel mio intento, ho comunque ancora il problema che non riesco a scrivere tutti i risultati del ciclo for, in output ho solo un valore che mi viene visualizzato in C5.

                          #6526 Score: 0 | Risposta

                          albatros54
                          Moderatore
                            89 pts

                            Espresso90 wrote: di Run-Time '13': Tipo non corrispondente. --->Riga : For Each CellaW In Range(Range("AB1"), Range("AB1").Offset(Rows.Count - 1, 0).End(xlUp)).Select

                            il ciclo   "For each..." lavora su di una classe di oggetti,  "Range(Range("AB1"), Range("AB1").Offset(Rows.Count - 1, 0).End(xlUp)).Select" per VBA non è una classe object, prova a modificare il codice cosi

                            `Sub Prova2()
                            Dim CellaW
                            set rng = Range(Range("AB1"), Range("AB1").Offset(Rows.Count - 1, 0).End(xlUp)).Select
                            For each cellaW in rng
                            'qui tue operazioni su cella W
                            Next
                            End Sub`

                             

                            Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                            Sempre il mare, uomo libero, amerai!
                            ( Charles Baudelaire )
                            #6527 Score: 0 | Risposta

                            Espresso90
                            Partecipante

                              <em class="bbp-the-quote-cite">albatros54 wrote:

                              <em class="bbp-the-quote-cite">Espresso90 wrote: di Run-Time '13': Tipo non corrispondente. --->Riga : For Each CellaW In Range(Range("AB1"), Range("AB1").Offset(Rows.Count - 1, 0).End(xlUp)).Select

                              Sub Macro4()
                              ' colonna AB test
                              
                                  Dim l As String
                                  Dim result3 As String
                                  Const START_ROW = 2 ' Riga di inizio della tabella
                                  
                                  
                                  Windows("ECA Layout Validation_v01- PAUL KPI CALCULATION.xlsx").Activate
                                  Sheets("LV").Select
                                  
                              	For intI = START_ROW + 2 To Sheets("LV").Cells.SpecialCells(xlLastCell).Row Step 1
                                  
                                    If l = "N/A" Then
                                      result3 = "N/A"
                                      ElseIf l <> "N/A" And l > "01/01/2017" Then
                                      'And p > #1/1/2017# Then
                                          result3 = "YES"
                                          ElseIf l <> "N/A" And l < "01/01/2017" Then
                                          result3 = "NO"
                                      End If
                                  Next
                                  
                                  Windows("Layout Validation.xlsm").Activate
                              
                                  Range("C5").Value = result3
                                
                              End Sub

                              Scusami Albatros, con questo codice son riuscito a risolvere in parte il problema, quello che adesso non riesco a fare è quello di fargli stampare in colonna tutti i valori delle celle che va a leggere in AB

                              #6531 Score: 0 | Risposta

                              albatros54
                              Moderatore
                                89 pts

                                Ho cercato di capire il tuo algoritmo,e l'ho modificato cosi.Non avendo i vari file non l'ho potuto testare, provalo e testalo.

                                Sub Macro4()
                                ' colonna AB test
                                
                                    Dim l As String
                                    Dim result3 As String
                                    Const START_ROW = 2    ' Riga di inizio della tabella
                                    Dim wkeca As Workbook
                                    Dim shlv As Worksheet
                                    Dim wklayout As Workbook
                                
                                    Set wkeca = Windows("ECA Layout Validation_v01- PAUL KPI CALCULATION.xlsx").Activate
                                    Set whlv = wkeca.Sheets("LV")
                                    Set wklayout = Windows("Layout Validation.xlsm")
                                    Set Rng = whlv.Cells.SpecialCells(xlLastCell).Row
                                
                                    For Each cl In Rng
                                
                                        If cl = "N/A" Then
                                            result3 = "N/A"
                                        ElseIf cl <> "N/A" And cl > "01/01/2017" Then
                                            'And p > #1/1/2017# Then
                                            result3 = "YES"
                                        ElseIf cl <> "N/A" And cl < "01/01/2017" Then
                                            result3 = "NO"
                                        End If
                                        righacl = cl.Row
                                        colonnacl = cl.Column
                                        wklayout.Cells(righacl, colonnacl) = result3
                                    Next
                                
                                
                                
                                
                                End Sub
                                

                                 

                                Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                Sempre il mare, uomo libero, amerai!
                                ( Charles Baudelaire )
                                #6532 Score: 0 | Risposta

                                Espresso90
                                Partecipante

                                  <em class="bbp-the-quote-cite">albatros54 wrote:Ho cercato di capire il tuo algoritmo,e l'ho modificato cosi.Non avendo i vari file non l'ho potuto testare, provalo e testalo.

                                  Error 424 necessario un oggetto.

                                  #6533 Score: 0 | Risposta

                                  albatros54
                                  Moderatore
                                    89 pts

                                    Espresso90 wrote:Error 424 necessario un oggetto.

                                    in quale riga del codice.

                                     

                                     

                                    Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                    Sempre il mare, uomo libero, amerai!
                                    ( Charles Baudelaire )
                                    #6534 Score: 1 | Risposta

                                    vecchio frac
                                    Senior Moderator
                                      272 pts

                                      Probabilmente su "Set Rng = ...".

                                      Primo, abituatevi a utilizzare per default la direttiva Option Explicit. E' un salvagente 🙂

                                      Secondo, "Rng" è un attributo del metodo .Sort quindi è meglio non utilizzarlo come nome di variabile.

                                      Terzo, invece di xlLastCell intendevi scrivere xlCellTypeLastCell.

                                      #6535 Score: 0 | Risposta

                                      vecchio frac
                                      Senior Moderator
                                        272 pts

                                        Scusate, ho chiuso il post, ma va terminato:

                                        Set Rng = whlv.Cells.SpecialCells(xlLastCell).Row

                                        "Row" restituisce un numero lungo e quindi non va assegnato con un Set perchè un numero in VBA non è un oggetto (in senso tecnico).

                                        #6536 Score: 0 | Risposta

                                        albatros54
                                        Moderatore
                                          89 pts

                                          vecchio frac wrote:

                                          Set Rng = whlv.Cells.SpecialCells(xlLastCell).Row

                                          restituisce un numero lungo e quindi non va assegnato con un Set perchè un numero in VBA non è un oggetto (in senso tecnico).

                                          Mi sono lasciato prendere la mano, ma non avendo nessun file dove testare...ho bucato 😳 

                                           

                                           

                                          Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                          Sempre il mare, uomo libero, amerai!
                                          ( Charles Baudelaire )
                                          #6557 Score: 0 | Risposta

                                          Espresso90
                                          Partecipante

                                            Niente ragazzi non riesco a farlo funzionare  😥 

                                            Grazie comunque del supporto.

                                            #6560 Score: 0 | Risposta

                                            albatros54
                                            Moderatore
                                              89 pts

                                              Espresso90 wrote:Niente ragazzi non riesco a farlo funzionare  😥

                                              Secondo me , il problema lo possiamo risolvere , solo ci devi mettere nelle condizioni di avere lo scenario completo,con i file (senza dati sensibili),dove poter testare il codice, è sapere con certezza cosa tu vuoi ottenere.

                                               

                                              Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                              Sempre il mare, uomo libero, amerai!
                                              ( Charles Baudelaire )
                                              #6563 Score: 0 | Risposta

                                              Espresso90
                                              Partecipante

                                                <em class="bbp-the-quote-cite">albatros54 wrote:

                                                <em class="bbp-the-quote-cite">Espresso90 wrote:Niente ragazzi non riesco a farlo funzionare  😥

                                                Se vuoi l' unica cosa che mi viene in mente è di passarti il tutto tramite e-mail, compreso di dati e spiegarti bene tutto quello che la macro deve andare ad eseguire.

                                                #6588 Score: 0 | Risposta

                                                albatros54
                                                Moderatore
                                                  89 pts

                                                  Espresso90 wrote:Se vuoi l' unica cosa che mi viene in mente è di passarti il tutto tramite e-mail, compreso di dati e spiegarti bene tutto quello che la macro deve andare ad eseguire.

                                                  non funziona cosi, perchè il tuo problema verrebbe circoscritto solamente tra te e me, cerca invece di spiegare , magari allegando un file di word o txt, lo scenrio, è descrivere passo passo quello che la macro dovrebbe fare, come se lo dovessi spiegare tua nonna, perche se tu riesci a farla comprendere a tua nonna, il problema è risolto.Poi allega i due file dove la macro deve girare.Se i file superano i 4Mb cerca di zipparli, altrimenti li posti in un server,tipo dropbox, è alleghi il link dove scaricare.

                                                   

                                                  Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                                  Sempre il mare, uomo libero, amerai!
                                                  ( Charles Baudelaire )
                                                Login Registrati
                                                Stai vedendo 23 articoli - dal 26 a 48 (di 48 totali)
                                                Rispondi a: Trasformare una formula cerca vert da excel in vba
                                                Gli allegati sono permessi solo ad utenti REGISTRATI
                                                Le tue informazioni: