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

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

    Espresso90
    Partecipante

      La formula in Excel è la seguente "=SE(AD52= Foglio1!$A$26;Foglio1!$A$26; CERCA.VERT(AD52;Foglio1!$A$14:$B$25;2;FALSO))"

      Tramite codice vba devo visualizzare in una cella (Esempio cella G5 del Foglio3) il risultato della formula sopra indicata.

      I valori sono da ricercarsi in un Excel esterno chiamato LV. Nella colonna AD del foglio LV dell' excel esterno ho dei valori numerici (Da 1 a 12) oppure una X, se la colonna AD ha come valore X nella cella visualizzo X.

      Se nella cella vi è però un numero da 1 a 12 nella cella AE devo visualizzare il mese corrispondente 1 -- > JAN; 2 --> FEB..... 12 --> DEC.

      Nel foglio di lavoro nel quale è contenuto il foglio LV ho un altro foglio: Foglio1 all' interno del quale ho una tabella nel range "A14:B25" dove da A14 ad A25 ho i numeri 1,2,3...,11,12 e in B14-B25 ho JAN,FEB...NOV,DEC.

       

      #6444 Score: 0 | Risposta

      Luca73
      Partecipante
        54 pts

        CIao

        Ho scritto la seguente function che dovrebbe fare quanto la tua formula.

        Function MioValore()
        DimCellaW
        
        If Range("AD2").Value = Sheets("Foglio1").Range("A26") Then
            MioValore = Sheets("Foglio1").Range("A26")
        Else
            MioValore = "Errore"
            For Each cellaW In Sheets("Foglio1").Range("A14", "B25")
                If cellaW.Value = Range("AD2").Value Then
                    MioValore = cellaW.Offset(0, 1).Value
                    Exit For
                End If
            Next
        End If
        
        End Function

        Fammi sapere

        Ciao

        Luca

        #6447 Score: 0 | Risposta

        Espresso90
        Partecipante

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

          Vorrei farlo con una macro senza usare le funzioni se si può.

          In questo caso mi da un errore perche CellaW non è definita

          #6448 Score: 0 | Risposta

          Luca73
          Partecipante
            54 pts

            DOve vuoi scrivere il valore?

             

            #6449 Score: 0 | Risposta

            Espresso90
            Partecipante

              <em class="bbp-the-quote-cite">Luca73 wrote:DOve vuoi scrivere il valore?

              In una cella qualsiasi di un foglio esterno ad esempio foglio3 cella "G5"

              #6450 Score: 0 | Risposta

              Luca73
              Partecipante
                54 pts

                Ecco

                la macro scrive il valore in A1

                Dim CellaW As Range
                Dim CellaVal As Range
                
                Set CellaVal = Range("A1")
                
                If Range("AD2").Value = Sheets("Foglio1").Range("A26") Then
                    CellaVal = Sheets("Foglio1").Range("A26")
                Else
                    CellaVal = "Errore"
                    For Each CellaW In Sheets("Foglio1").Range("A14", "B25")
                        If CellaW.Value = Range("AD2").Value Then
                            CellaVal = CellaW.Offset(0, 1).Value
                            Exit For
                        End If
                    Next
                End If
                
                End Sub
                #6451 Score: 0 | Risposta

                Espresso90
                Partecipante

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

                  Mi restituisce errore in A1

                  #6452 Score: 0 | Risposta

                  Espresso90
                  Partecipante

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

                    Dovrebbe restituire x se trova x e da JAN a DEC se trova 1,2,3 ecc

                    #6453 Score: 0 | Risposta

                    albatros54
                    Moderatore
                      81 pts

                      perchè non alleghi i file, semplificheresti la vita 😀 

                       

                      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 )
                      #6454 Score: 0 | Risposta

                      Luca73
                      Partecipante
                        54 pts

                        Forse ma ripeto forse così funziona 

                        come ti dice albatros (Ciao) no file = no test

                         

                        Dim CellaW As Range
                        Dim CellaVal As Range
                        
                        Set CellaVal = Range("A1")
                        
                        If Range("AD2").Value = Sheets("Foglio1").Range("A26") Then
                            CellaVal.Formula = Sheets("Foglio1").Range("A26")
                        Else
                            CellaVal.Formula = "Errore"
                            For Each CellaW In Sheets("Foglio1").Range("A14", "B25")
                                If CellaW.Value = Range("AD2").Value Then
                                    CellaVal.Formula = CellaW.Offset(0, 1).Value
                                    Exit For
                                End If
                            Next
                        End If
                        
                        End Sub

                         

                        #6456 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          238 pts

                          Espresso90 wrote:una macro senza usare le funzioni

                          E' un paradosso 🙂

                          Comunque non c'era già una discussione sullo stesso argomento?

                          #6458 Score: 0 | Risposta

                          Espresso90
                          Partecipante

                            Ecco in allegato un file di esempio.

                            I valori sono da ricercarsi nel foglio Excel chiamato LV. Nella colonna AD del foglio LV dell' excel ho dei valori numerici (Da 1 a 12) oppure una X, se la colonna AD ha come valore X nella cella visualizzo X.

                            Il risultato deve essere visualizzato in un altro workbook in un foglio esempio foglio3.

                            Se nella cella vi è un numero da 1 a 12 nella cella risultante devo visualizzare il mese corrispondente 1 -- > JAN; 2 --> FEB..... 12 --> DEC.

                            Nel foglio di lavoro nel quale è contenuto il foglio LV ho un altro foglio: Foglio1 all' interno del quale ho una tabella nel range "A14:B25" dove da A14 ad A25 ho i numeri 1,2,3...,11,12 e in B14-B25 ho JAN,FEB...NOV,DEC.

                            Io suppongo si debba fare con un ciclo for, oppure con tanti if.

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

                            albatros54
                            Moderatore
                              81 pts

                              vecchio frac wrote:Comunque non c'era già una discussione sullo stesso argomento?

                              che sembra si stata risolto 🙄 

                               

                              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 )
                              #6461 Score: 0 | Risposta

                              Espresso90
                              Partecipante

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

                                <em class="bbp-the-quote-cite">Espresso90 wrote:una macro senza usare le funzioni

                                Non penso, cioè avevo chiesto una cosa simile ma non questo, se non sbaglio l' altra macro doveva contare le volte che erano presenti Yes e Jan in una serie di intervalli, qua chiedo di fare una ricerca e nel caso si trovi un 1 venga restituito JAN 

                                #6462 Score: 0 | Risposta

                                albatros54
                                Moderatore
                                  81 pts

                                  Espresso90 wrote:Se nella cella vi è un numero da 1 a 12 nella cella risultante devo visualizzare il mese corrispondente 1 -- > JAN; 2 --> FEB..... 12 --> DEC.

                                  😯

                                   

                                  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 )
                                  #6463 Score: 0 | Risposta

                                  albatros54
                                  Moderatore
                                    81 pts

                                    Espresso90 wrote: venga restituito JAN

                                    Dove?

                                     

                                    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 )
                                    #6464 Score: 0 | Risposta

                                    Espresso90
                                    Partecipante

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

                                      <em class="bbp-the-quote-cite">Espresso90 wrote: venga restituito JAN

                                      In un foglio excel esterno già aperto. Esempio foglio3

                                      #6465 Score: 0 | Risposta

                                      Luca73
                                      Partecipante
                                        54 pts

                                        Ciao

                                        Dare tutte le informazioni subito no!!!

                                        Se il risultato è su un'altro workbook allora tutto diventa un po' più complesso.

                                        In quale workbook vuoi la macro? 

                                        Quali sono i percorsi?

                                        Perchè non usare una function?

                                        perche non usare una formula?

                                        Per Passare da 1,2,3.    a Jan, Feb,.... non scomoderei nè macro nè function ma solo formule banali tipo

                                        =MAIUSC(TESTO(DATA(2018;XX;1);"[$-en-EN]mmm"))

                                        dove XX è la tua cella contenente il numero del mase

                                        oppure un =SCEGLI,....

                                         

                                        #6466 Score: 0 | Risposta

                                        vecchio frac
                                        Senior Moderator
                                          238 pts

                                          Luca73 wrote:non scomoderei nè macro nè function ma solo formule banali

                                          Penso che lui abbia comunque bisogno di VBA per accedere (aprire, leggere) comodamente a file esterni, quindi comunque una cosa semplice con Choose fa al caso suo.

                                          choose(index, "JAN", "FEB","MAR", "etc.")

                                          Per il resto quoto le osservazioni di Luca  😀 

                                          Che tra parentesi la sintassi con [$-en-EN] non la sapevo e googlando ho trovato una miriade di formati di localizzazione che coprono praticamente ogni linguaggio.

                                          #6467 Score: 0 | Risposta

                                          Espresso90
                                          Partecipante

                                            vecchio frac wrote:

                                            Luca73 wrote:non scomoderei nè macro nè function ma solo formule banali

                                            Avete ragione entrambi però il problema è che questa è la punta dell' iceberg e dietro ce un lavoro molto più complesso, per questo chiedevo di utilizzare una macro in vba.

                                            Comunque dopo un po di tentativi ho risolto in questo modo:

                                            Sub Macro15()
                                            Dim ae As String
                                            Dim result1 As String
                                            
                                            Windows("ECA Layout Validation_v01- PAUL KPI CALCULATION.xlsx").Activate
                                            Sheets("LV").Select
                                            'Range("A1").SpecialCells(xlCellTypeLastCell).Select
                                            
                                            ae = Range("AD52").Value
                                            
                                            If ae = "X" Then
                                            result1 = "X"
                                            ElseIf ae = "1" Then
                                            result1 = "JAN"
                                            ElseIf ae = "2" Then
                                            result1 = "FEB"
                                            ElseIf ae = "3" Then
                                            result1 = "MAR"
                                            ElseIf ae = "4" Then
                                            result1 = "APR"
                                            ElseIf ae = "5" Then
                                            result1 = "MAY"
                                            ElseIf ae = "6" Then
                                            result1 = "JUN"
                                            ElseIf ae = "7" Then
                                            result1 = "JUL"
                                            ElseIf ae = "8" Then
                                            result1 = "AUG"
                                            ElseIf ae = "9" Then
                                            result1 = "SEP"
                                            ElseIf ae = "10" Then
                                            result1 = "OCT"
                                            ElseIf ae = "11" Then
                                            result1 = "NOV"
                                            Else
                                            ae = "12"
                                            result1 = "DEC"
                                            End If
                                            
                                            Windows("Layout Validation.xlsm").Activate
                                            Range("F5").Value = result1
                                            
                                            
                                            End Sub

                                            Per rispondere a Luca la macro mi serve nel workbook finale, non in quello da cui vado a leggere i dati.

                                            Se qualcuno ha idee su come rendere più smart il codice ben venga. Ho risolto questo ma adesso vorrei utilizzare le SpecialCells per poter leggere interamente il foglio dove vado a leggere i dati, sapresti indicarmi come si usa il metodo SpecialCells?

                                            #6468 Score: 0 | Risposta

                                            Luca73
                                            Partecipante
                                              54 pts

                                              Ciao VF

                                              mi commuovi...   :mrgreen: 

                                              #6469 Score: 0 | Risposta

                                              Luca73
                                              Partecipante
                                                54 pts

                                                Ciao invece di usare una serie di if ...

                                                in questo caso un SELECT CASE...

                                                (vedi L'help)

                                                oppure ti crei un array e ne selezioni con la variabile diretta...

                                                Ciao

                                                Luca

                                                #6470 Score: 0 | Risposta

                                                Luca73
                                                Partecipante
                                                  54 pts

                                                  Esempio con Array....

                                                   

                                                  Sub prova()
                                                  Dim Mese(1 To 12)
                                                  Mese = Array("JAN", "FEB", "MAR",....)
                                                  Range("F5").Value = Mese(Range("AD52").Value)
                                                  End Sub
                                                  #6472 Score: 0 | Risposta

                                                  Espresso90
                                                  Partecipante

                                                    <em class="bbp-the-quote-cite">Luca73 wrote:Esempio con Array....

                                                    Grazie Luca, questo è molto più smart del mio.

                                                    #6478 Score: 0 | Risposta

                                                    Espresso90
                                                    Partecipante

                                                      Scusate se disturbo nuovamente, ho questo codice:

                                                      Sub Macro4()
                                                      Dim l As String
                                                      Dim result3 As String

                                                      Windows("ECA Layout Validation_v01- PAUL KPI CALCULATION.xlsx").Activate
                                                      Sheets("LV").Select
                                                      l = Range("L3").Value
                                                      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

                                                      Windows("Layout Validation.xlsm").Activate
                                                      Range("C5").Value = result3

                                                      End Sub

                                                      vorrei utilizzare un ciclo for prima dell' if in modo da poter utilizzare il metodo specialcells, in modo tale che l' operazione che viene fatta sulla riga 3 della colonna L venga fatta automaticamente per tutte le celle della colonna L.

                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 1 a 25 (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: