Risultati da 1 a 8 di 8

Discussione: Come cambiare il codice per tenere conto di uno spostamento dalla colonna A alla colonna B



  1. #1
    ProgrammD69
    Ospite L'avatar di ProgrammD69

    Come cambiare il codice per tenere conto di uno spostamento dalla colonna A alla colonna B

    Proseguo il discorso di questa discussione

    http://www.forumexcel.it/forum/6-dom...di-una-tabella

    perchè avendo copiato il database su un altro foglio con una colonna di differenza rispetto a quanto scritto nel codice, il codice non funziona più.
    Ora il database parte dalla cella B3 e non da A1.
    Come posso modificare il codice riportato sotto ?

    Codice: 
     Sub Calcola_Avanti3()Dim Ur, X, Val1, Val2, Rim, Som As Double
    Ur = Range("A" & Rows.Count).End(xlUp).Row
    Val1 = Cells(Ur, 4) 'questa
    For X = 2 To Ur - 1
        If Cells(X, 1) = "ACQUISTO" Then 'questa
            If Val2 + Cells(X, 4) >= Val1 Then 'questa
                Rim = Val1 - Val2
                Som = Som + (Rim * Cells(X, 5)) 'questa
                Exit For
            Else
                Val2 = Val2 + Cells(X, 4) 'questa
                Som = Som + (Cells(X, 4) * Cells(X, 5)) 'questa
            End If
        End If
    Next X
    Cells(Ur, 6) = Som 'questa
    End Sub
    
    
    
    Sub Calcola_ritroso3()
    Dim Ur, X, Val1, Val2, Rim, Som As Double
    Ur = Range("A" & Rows.Count).End(xlUp).Row
    Val1 = Cells(Ur, 4) 'questa
    For X = Ur - 1 To 2 Step -1
        If Cells(X, 1) = "ACQUISTO" Then 'questa
            If Val2 + Cells(X, 4) >= Val1 Then 'questa
                Rim = Val1 - Val2
                Som = Som + (Rim * Cells(X, 5)) 'questa
                Exit For
            Else
                Val2 = Val2 + Cells(X, 4) 'questa
                Som = Som + (Cells(X, 4) * Cells(X, 5)) 'questa
            End If
        End If
    Next X
    Cells(Ur, 6) = Som 'questa
    End Sub
    Saluti a tutti.
    Ultima modifica fatta da:cromagno; 22/07/16 alle 18:02 Motivo: Inserito correttamente collegamento a link discussione...

  2. #2

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7124
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2063
    Likes dati
    1298

    Re: Come cambiare il codice per tenere conto di uno spostamento dalla colonna A alla colonna B

    Citazione Originariamente Scritto da ProgrammD69 Visualizza Messaggio
    ...
    .. avendo copiato il database su un altro foglio con una colonna di differenza rispetto a quanto scritto nel codice, il codice non funziona più.
    Ora il database parte dalla cella B3 e non da A1.
    ...
    e ti pare poco???

    L'ideale sarebbe avere la struttura del nuovo file, così "ad occhio" se TUTTO il dababase si sposta una colonna basta aumentare un valore al numero delle colonne e far partire il ciclo da 3 invece che da 2:
    Codice: 
    Sub Calcola_Avanti3()Dim Ur, X, Val1, Val2, Rim, Som As Double
    Ur = Range("B" & Rows.Count).End(xlUp).Row
    Val1 = Cells(Ur, 5) 'questa
    For X = 3 To Ur - 1
    If Cells(X, 2) = "ACQUISTO" Then 'questa
    If Val2 + Cells(X, 5) >= Val1 Then 'questa
    Rim = Val1 - Val2
    Som = Som + (Rim * Cells(X, 6)) 'questa
    Exit For
    Else
    Val2 = Val2 + Cells(X, 5) 'questa
    Som = Som + (Cells(X, 5) * Cells(X, 6)) 'questa
    End If
    End If
    Next X
    Cells(Ur, 7) = Som 'questa
    End Sub
    
    
    
    Sub Calcola_ritroso3()
    Dim Ur, X, Val1, Val2, Rim, Som As Double
    Ur = Range("B" & Rows.Count).End(xlUp).Row
    Val1 = Cells(Ur, 5) 'questa
    For X = Ur - 1 To 3 Step -1
    If Cells(X, 2) = "ACQUISTO" Then 'questa
    If Val2 + Cells(X, 5) >= Val1 Then 'questa
    Rim = Val1 - Val2
    Som = Som + (Rim * Cells(X, 5)) 'questa
    Exit For
    Else

    Prova così, nel caso allega la nuova struttura del file.
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  3. #3
    ProgrammD69
    Ospite L'avatar di ProgrammD69

    Re: Come cambiare il codice per tenere conto di uno spostamento dalla colonna A alla colonna B

    Dato che questa richiesta, e forse altre che potrebbero seguire, riguardano pochi aspetti del codice, potreste darmi una spiegazione del come si procede a variare un codice VBA ?
    Ho anche trovato libri specifici sul VBA, uno specifico su Access, uno specifico su Excel ed un altro generico che spiega alcune cose.
    I codici che ho trovato su quei libri li ho anche utilizzati, alcuni imparati, ma ogni volta che devo cambiare un codice per adattarlo a fogli di lavoro con righe e colonne differenti, escono fuori i problemi.
    Per cui, sarebbe possibile da parte Vostra una spiegazione del codice VBA ?
    Grazie.
    Saluti.

    ----------Post unito in automatico----------

    Citazione Originariamente Scritto da ges Visualizza Messaggio
    e ti pare poco???

    L'ideale sarebbe avere la struttura del nuovo file, così "ad occhio" se TUTTO il dababase si sposta una colonna basta aumentare un valore al numero delle colonne e far partire il ciclo da 3 invece che da 2:
    Codice: 
    Sub Calcola_Avanti3()Dim Ur, X, Val1, Val2, Rim, Som As Double
    Ur = Range("B" & Rows.Count).End(xlUp).Row
    Val1 = Cells(Ur, 5) 'questa
    For X = 3 To Ur - 1
    If Cells(X, 2) = "ACQUISTO" Then 'questa
    If Val2 + Cells(X, 5) >= Val1 Then 'questa
    Rim = Val1 - Val2
    Som = Som + (Rim * Cells(X, 6)) 'questa
    Exit For
    Else
    Val2 = Val2 + Cells(X, 5) 'questa
    Som = Som + (Cells(X, 5) * Cells(X, 6)) 'questa
    End If
    End If
    Next X
    Cells(Ur, 7) = Som 'questa
    End Sub
    
    
    
    Sub Calcola_ritroso3()
    Dim Ur, X, Val1, Val2, Rim, Som As Double
    Ur = Range("B" & Rows.Count).End(xlUp).Row
    Val1 = Cells(Ur, 5) 'questa
    For X = Ur - 1 To 3 Step -1
    If Cells(X, 2) = "ACQUISTO" Then 'questa
    If Val2 + Cells(X, 5) >= Val1 Then 'questa
    Rim = Val1 - Val2
    Som = Som + (Rim * Cells(X, 5)) 'questa
    Exit For
    Else

    Prova così, nel caso allega la nuova struttura del file.
    I codici non funzionano.
    Allego file con due fogli.
    Il primo il FIFO vuole il codice Calcolo_avanti, il secondo il LIFO vuole il codice Calcolo_ritroso.
    Saluti.
    File Allegati File Allegati

  4. #4

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7124
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2063
    Likes dati
    1298

    Re: Come cambiare il codice per tenere conto di uno spostamento dalla colonna A alla colonna B

    Citazione Originariamente Scritto da ProgrammD69 Visualizza Messaggio
    .... potreste darmi una spiegazione del come si procede a variare un codice VBA ?
    ..
    ..
    Non è semplice perchè non esiste un codice univoco per ogni scelta in quanto ognuno di noi ha una sua modalità soggettiva per scriverlo, quindi per ogni soluzione possono esistere svariate forme di codice, allo stesso modo (lato formule) esistono diverse formule per ottenere lo stesso risultato.

    Vedo però di darti delle indicazioni generali:

    Prima scelta il modo di indicare la cella o l'intervallo di riferimento:

    Esempio:

    Range("A1")
    Cells(1,1)
    [A1]
    Cells(1,"A")

    indicano tutte la cella A1, con una particolarità:

    - se si usa Range il primo dato è la colonna il secondo la riga Range("A1") = cella A1

    - se si usa Cells va indicata prima la riga e poi la colonna Cells(2,3) = cella C2

    Dunque nel tuo caso dovendo adattare il codice ad un nuovo database spostato di una colonna dovrai cambiare i riferimenti come sopra indicato.

    I cicli.

    Vi sono vari cicli, ti parlo del più semplice e forse il più comune .. il ciclo For

    Quando si scrive

    For y = 1 to 100

    il primo valore (1) è la riga o la colonna di partenza il 100 quella finale

    Se per esempio bisogna ciclare i valori nell'intervallo B4:B150 si scriverà:

    For y= 4 to 150

    Nel tuo caso viso che il nuovo database non parte da A1 ma da B3 il ciclo For va modificato

    da For X = 1 to Ur

    a For X = 3 to Ur (uR è l'ultima riga piena)

    Per ora mi fermo qui, se hai dei dubbi chiedi pure.
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  5. #5
    ProgrammD69
    Ospite L'avatar di ProgrammD69

    Re: Come cambiare il codice per tenere conto di uno spostamento dalla colonna A alla colonna B

    Ho fatto delle modifiche al codice che riporto:
    Codice: 
     
    Sub Calcola_Avanti3()Dim Ur, X, Val1, Val2, Rim, Som As Double
    Ur = Range("B" & Rows.Count).End(xlUp).Row
    Val1 = Cells(Ur, 4)    'questa è la colonna della quantità, la 4
    For X = 4 To Ur - 1
        If Cells(X, 3) = "ACQUISTO" Then   'qui la colonna è la terza, dove si trova ACQUISTO
            If Val2 + Cells(X, 5) >= Val1 Then 'qui va indicato il prezzo
                Rim = Val1 - Val2
                Som = Som + (Rim * Cells(X, 5))
                Exit For
            Else
                Val2 = Val2 + Cells(X, 5) 'la colonna prezzo sta in colonna 5
                Som = Som + (Cells(X, 4) * Cells(X, 5)) 
            End If
        End If
    Next X
    Cells(Ur, 6) = Som 'questa
    End Sub
    Ottengo un valore sballato. Dovrebbe essere €.11975 invece esce €.39650.

  6. #6

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7124
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2063
    Likes dati
    1298

    Re: Come cambiare il codice per tenere conto di uno spostamento dalla colonna A alla colonna B

    Aspettiamo Raffaele che ha scritto il codice, io non ho seguito la discussione quindi non so neanche cosa vuoi ottenere.
    Quando si scartano tutte le ipotesi possibili, quella che resta, anche se può sembrare improbabile, non può che essere quella giusta!

  7. #7
    L'avatar di Raffaele_53
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Binasco
    Età
    64
    Messaggi
    506
    Versione Office
    2007
    Likes ricevuti
    85
    Likes dati
    7

    Re: Come cambiare il codice per tenere conto di uno spostamento dalla colonna A alla colonna B

    Prova cosi

    Codice: 
    Sub Calcola_Avanti3()
    Dim Ur, X, Val1, Val2, Rim, Som As Double
    Ur = Range("D" & Rows.Count).End(xlUp).Row
    Val1 = Cells(Ur, 4)
    For X = 4 To Ur - 1
        If Cells(X, 3) = "ACQUISTO" Then
            If Val2 + Cells(X, 4) >= Val1 Then
                Rim = Val1 - Val2
                Som = Som + (Rim * Cells(X, 5))
                Exit For
            Else
                Val2 = Val2 + Cells(X, 4)
                Som = Som + (Cells(X, 4) * Cells(X, 5))
            End If
        End If
    Next X
    Cells(Ur, 6) = Som
    End Sub
    Codice: 
    Sub Calcola_ritroso3()
    Dim Ur, X, Val1, Val2, Rim, Som As Double
    Ur = Range("D" & Rows.Count).End(xlUp).Row
    Val1 = Cells(Ur, 4)
    For X = Ur - 1 To 2 Step -1
        If Cells(X, 3) = "ACQUISTO" Then
            If Val2 + Cells(X, 4) >= Val1 Then
                Rim = Val1 - Val2
                Som = Som + (Rim * Cells(X, 5))
                Exit For
            Else
                Val2 = Val2 + Cells(X, 4)
                Som = Som + (Cells(X, 4) * Cells(X, 5))
            End If
        End If
    Next X
    Cells(Ur, 6) = Som
    End Sub

  8. #8
    ProgrammD69
    Ospite L'avatar di ProgrammD69

    Re: Come cambiare il codice per tenere conto di uno spostamento dalla colonna A alla colonna B

    I codici funzionano.
    Grazie mille.

Discussioni Simili

  1. [Risolto] sommare dati tenendo conto della colonna precedente
    Di AndreaLago nel forum Domande su Excel in generale
    Risposte: 25
    Ultimo Messaggio: 21/01/17, 16:49
  2. [Risolto] cambiare valore in colonna in base ad un'altra
    Di bopo57 nel forum Domande su Excel in generale
    Risposte: 5
    Ultimo Messaggio: 25/10/16, 20:43
  3. Cambiare colore a riga/colonna di celle se una cella uguale ad un testo
    Di Cavier80 nel forum Domande su Excel in generale
    Risposte: 12
    Ultimo Messaggio: 22/05/16, 13:23
  4. PIVOT ordinare le etichette di colonna in base alla prima
    Di framag nel forum Domande su Excel in generale
    Risposte: 4
    Ultimo Messaggio: 10/03/16, 17:22
  5. Unire 2 colonne in 1 alternando in base alla tipologia della prima colonna
    Di sassa nel forum Domande su Excel in generale
    Risposte: 11
    Ultimo Messaggio: 30/12/15, 12:13

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •