You are here:--rivedere piramidi
rivedere piramidi 2018-12-11T19:23:49+00:00

Home Forum Domande su Excel VBA e MACRO rivedere piramidi

  • Autore
    Articoli
  • giorgioantonio
    Partecipante
      Post totali: 207
      #7582 |

      Salve Sid,

      fino a quando ho usato 5 celle con 5 numeri
      ho avuto sempre il risulta poi volevo utilizzare
      l’UDF piramidi per 2 o più numeri oserei dire anche fino a 20
      ma almeno che la posso utilizzare per 2 e più numeri.
      Cortesemente potresti rivederla e adeguarla alla mia richiesta?

      Grazie

    • giorgioantonio
      Partecipante
        Post totali: 207

        l’udf

        Public Function PIRAMIDE(n1, n2, n3, n4, n5) As Integer
        Dim vArr As Variant
        Dim j As Long
        Dim s As String, sAppoggio As String
        Dim nDecina As Integer, nUnita As Integer
        vArr = Array(n1, n2, n3, n4, n5)

        For j = LBound(vArr) To UBound(vArr)
        nUnita = vArr(j) Mod 10 ‘unità
        nDecina = (vArr(j) – nUnita) / 10 ‘decina
        s = s & nDecina & nUnita
        Next j

        Do
        For j = 1 To Len(s) – 1
        If Val(Mid(s, j, 1)) + Val(Mid(s, j + 1, 1)) > 9 Then
        sAppoggio = sAppoggio & Val(Mid(s, j, 1)) + Val(Mid(s, j + 1, 1)) – 9
        Else
        sAppoggio = sAppoggio & Val(Mid(s, j, 1)) + Val(Mid(s, j + 1, 1))
        End If
        Next j
        s = sAppoggio
        sAppoggio = vbNullString
        Loop Until Len(s) = 2

        PIRAMIDE = Val(s)
        End Function

      • sidsid
        Moderatore
          Post totali: 525

          Devi rimandare il file di esempio.
          Spiega bene cosa vuoi ottenere.

        • giorgioantonio
          Partecipante
            Post totali: 207

            https://www.dropbox.com/s/jig6desn25drioh/Piramide_2.xlsb?dl=0

            Salve,

            su foglio uno ho rappresentato degli esempi,
            nella riga 11 il risultato è esatto con la formula
            della UDF,
            Dove la voce errato i dati non sono esatti perchè
            la UDF è prevista per soli cinque numeri.
            Se possibile ottenere i risultati partendo da 2 numeri
            (perchè la funziona sarà riportata in una formula per cui
            mi sarebbe utile) ed ho portato gli esempi fino a 8 numeri
            se si può la UDF nuova (ammesso si possa fare) portare il calcolo fino a 20.
            premesso non si creano problemi grossi per il calcolo.
            Quel che si può fare.
            Poi nella colonna che precede manuale i risultati corretti.
            Nel file allegato ho riportato nel modulo 1 di foglio 1 l’UDF

            • Questa risposta è stata modificata 1 mese, 1 settimana fa da  giorgioantonio. Ragione: aggiunto altri dati
          • sidsid
            Moderatore
              Post totali: 525

              Scusa ma per alcuni numeri a me vengono risultati differenti dai tuoi.
              I tuoi risultati sono quelli in colonna M, i miei in P.
              A me viene un risultato diverso (celle verde), rispetto ai tuoi (celle gialle)

              Puoi riprovare a fare i calcoli?

            • giorgioantonio
              Partecipante
                Post totali: 207

                hai ragione vanno bene i tuoi calcoli,
                solo che 92 deve essere = 02 oppure 2.
                Resto(92;9)=2.
                Poi va bene

                • Questa risposta è stata modificata 1 mese, 1 settimana fa da  giorgioantonio.
              • giorgioantonio
                Partecipante
                  Post totali: 207

                  Scusami volevo aggiungere una nota,
                  cioè se è 91, 92, 93 eccetera il 9 diventa ZERO
                  però se 90 resta tale.
                  Non so se in qualche calcolo è contemplato il 90
                  qualora rimane 90.

                • sidsid
                  Moderatore
                    Post totali: 525

                    Quindi qualsiasi numero superiore a 90, resta 90?

                  • giorgioantonio
                    Partecipante
                      Post totali: 207

                      mi sono spiegato male,
                      se 90 rimane 90,
                      91=1;92=2;93=3;94;4;95=5;96=6;97=7;98=8;99=9 e 90=90

                    • sidsid
                      Moderatore
                        Post totali: 525

                        Allora ti passo la udf modificata adattata da 2 a 20 numeri
                        Ammettendo che hai i tuoi numeri da colonna C a colonna V come da immagine sottostante; il risultato in colonna X.

                        La udf modificata con un solo argomento invece che 5

                        Public Function PIRAMIDE(rng) As Integer
                        Dim vArr As Variant
                        Dim j As Long
                        Dim s As String, sAppoggio As String
                        Dim nDecina As Integer, nUnita As Integer
                        vArr = rng.Value
                        
                        For j = LBound(vArr, 2) To UBound(vArr, 2)
                            nUnita = vArr(1, j) Mod 10 'unità
                            nDecina = (vArr(1, j) - nUnita) / 10 'decina
                            If nDecina = 0 And nUnita = 0 Then Exit For
                            s = s & nDecina & nUnita
                        Next j
                        
                        Do
                            For j = 1 To Len(s) - 1
                                If Val(Mid(s, j, 1)) + Val(Mid(s, j + 1, 1)) > 9 Then
                                    sAppoggio = sAppoggio & Val(Mid(s, j, 1)) + Val(Mid(s, j + 1, 1)) - 9
                                Else
                                    sAppoggio = sAppoggio & Val(Mid(s, j, 1)) + Val(Mid(s, j + 1, 1))
                                End If
                            Next j
                            s = sAppoggio
                            sAppoggio = vbNullString
                        Loop Until Len(s) = 2
                        
                        PIRAMIDE = IIf(Val(s) > 90, Val(s) - 90, Val(s))
                        End Function
                        

                        Nella cella che vuoi (io l’ho messa in colonna X19) inserisci
                        =piramide(C19:V19)
                        e trascini giù

                        Nelle celle in cui c’è la udf, per visualizzare lo zero davanti ai numeri singoli, le celle vanno formattate con formato personalizzato 00

                        Spero sia chiaro

                      • giorgioantonio
                        Partecipante
                          Post totali: 207

                          Salve Sid,

                          non c’è modo per velocizzaare i calcoli?

                          Preciso che il calcolo lo faccio fare per coppie
                          terne, ma nello sviluppo è lentissimo
                          Salve

                          • Questa risposta è stata modificata 1 mese, 1 settimana fa da  giorgioantonio.
                        • sidsid
                          Moderatore
                            Post totali: 525

                            Dipende sempre dalla grandezza del database.
                            Possibile vedere dove sfrutti la udf?

                          • giorgioantonio
                            Partecipante
                              Post totali: 207

                              Salve

                              https://www.dropbox.com/s/kwahietuixx2rik/Prova_Pir.xlsb?dl=0

                              questo il file,
                              possibilmente la colonna iniziale dovrei poterla sposstare
                              dove voglio mentre la riga iniziale sarà sempre 12.
                              Nella riga 4 chiedo se possibile piramidare le righe a saltello
                              perchè sono tentativi per vedere quale riga cadenzata rende di più.
                              Per esempio in b4 indico 7 vorrei
                              piramidi rigo 12, poi rigo 20 cioè 7 vuote tra un rigo e l’altro.
                              mq il problema è la lentezza di calcolo.
                              Salve

                            • sidsid
                              Moderatore
                                Post totali: 525

                                Tu hai messo la udf nel range AA12:AJ12
                                Io ho fatto questo test:
                                ho selezionato AA12:AJ12 e poi ho trascinato fino a riga 261. In meno di 5 secondi viene eseguita l’operazione; quindi non capisco la lentezza che trovi te

                              • giorgioantonio
                                Partecipante
                                  Post totali: 207

                                  Salve,

                                  l’UDF deve calcolare per coppie come scritto
                                  in AA1; AB12 ecc
                                  fai questa prova dei calcoli che fa la riga 12
                                  fai un copia ed incolla a rigo 20.
                                  Non trascinare a destra vedi come si comporta.
                                  L’UDF l’ho messa e modulo del foglio1:
                                  è corretto?
                                  salve

                                • sidsid
                                  Moderatore
                                    Post totali: 525

                                    Ho fatto questo:
                                    – copiato AA12_AJ12
                                    – incollato in AA20

                                    Il risultato è immediato

                                    Un mistero quello che riscontri tu

                                  Devi essere loggato per rispondere a questa discussione.

                                  Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

                                  Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o cliccando su "Accetta" permetti il loro utilizzo.

                                  Chiudi