› Sviluppare funzionalita su Microsoft Office con VBA › Ciclo Do while
-
AutoreArticoli
-
Ciao a tutti,
sto cercando di implementare un piccolo programmino, cerco di spiegare la mia esigenza:
in un foglio chiamato "Costi" , ho i costi di 10 prodotti ed io dovrei incrementare il costo del prodotto X fino a minimizzare la differenza di altri costi (chiamati Costi di risposta) riportati nel foglio "Risultati" del prodotto X rispetto al prodotto Y. In sostanza devo incrementare il costo di X e devo fermarmi prima di raggiungere la parità dei Costi di risposta tra X e Y. In questo modo potrei sapere il costo massimo di X che minimizza i costi di Risposta di X rispetto a Y.
Esempio:Costo X= €3200
Costo Risposta X= €17.000
Costo Risposta Y= € 19.000
Devo aumentare Costo X fino ad ottenere Costo Risposta X = Costo Risposta Y-1..
Ho provato con il ciclo Do While ma non funziona..
Grazie a chi vorrà darmi una mano,
Giuseppe
Ciao
Siccome hai provato e dici che non funziona, posta il tuo codice, magari inserito nel foglio da dove attingi i dati così
a) aiuti chi ti aiuta
b) partiamo da ciò che hai fatto per aiutarti.
Ciao
Luca
Ciao Luca,
Grazie per la risposta. Premetto che sono proprio agli inizi. Di seguito il codice:
Dim num As Integer, i As Integer
# cella dei costi
num = shCosts.Cells.Range("F26")
Do For i = num To num + 1
MsgBox "il valore soglia : " & i
#celle dei costi per risposta
Loop While shResults.Cells.Range("D20") < shResults.Cells.Range("D18")
End Sub
Ho provato con il ciclo Do While ma non funziona
Do For i = num To num + 1
Perchè non funziona? ti compare qualche errore o non espone il risultato che ti aspetti?
C'è un pulsantino fatto così: {;} e serve per formattare bene il proprio codice.
Ciao
Hai mischiato un ciclo Do While con un ciclo For...Next
Il ciclo Do While segue una formulazione così
Indice=0 Do funzioni indice=indice+1 While Condizione
Il Ciclo For
For Indice=1 to 100 funzioni if condizione then exit for end if next Indice
Ciao
Luca
Ciao a tutti,
scusate per il ritardo con cui rispondo. Ho provato a seguire i suggerimenti di Luca ma la macro continua a non funzionare.
Vi allego il foglio excel con la macro che ho scritto. Vi sarei grato se qualcuno riusciste a correggerla o a spiegarmi come emendarla.
Grazie,
Giuseppe
Allegati:
You must be logged in to view attached files.Prima di tutto non devi unire le celle, per il resto dovresti spiegare la logica del programma scrivendo istruzioni in pseudo codice del tipo:
prendo la cella x del foglio y e la incremento di 1 fino ad arrrivare a .....
nel modulo vba del tuo file ho trovato questo codice
Sub Cost() Dim i As interger, num As Integer i = i shCosts.Activate shResults.Activate Do num = shCost.Range("c26") + i i = i + 1 MsgBox "il valore soglia : " & i Loop Until shResults.Cells("c21") > shResults.Cells("c17") End Sub
ho riscontrato i=i
Domanda; che vuole significare? forse volevi assegnare alla variabile i il valore 1.
shCosts.Activate .
per attivare un foglio la sintassi è worksheets("nomefoglio").activate nel tuo caso
Worksheets("Costs").Activate
non puoi attivare contemporistantaneamente due fogli.
modifica queste righe e come ti ha fatto notare Patel(saluto) spiega la logica del programma
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 )Ciao a tutti,
ho modificato le due righe. Spiego la logica della macro:
1. Vorrei incrementare la cella o26 del foglio Cost , che è impostata a € 3200, fino a quando l'importo della cella d20 del foglio Results (che fa riferimento ad una divisione) è pari alla cella r20 meno una unità (sempre del foglio Results). Considerate che i valori del foglio Results derivano dal rapporto tra i valori contenuti nel foglio Cost e i valori presenti nel foglio PASI. Inoltre i valori del foglio Cost utilizzati nel foglio Results dipendono dai valori riportati nella colonna D del foglio Cost.
In sostanza vorrei trovare il valore massimo che la cella o26 del foglio Cost può assumere prima che d20 eguagli r20 del foglio Results.
Grazie ancora
mi sembra che tu faccia molta confusione, nell'ultimo post hai citato celle completamente diverse da quelle riportate nella tua macro.
Ciao
A parte la confusione a cui ha fatto riferimento Patel, se le formule sono nel foglio allora per ottenere un risultato devi cambiare i valori nel foglio, altrimenti devi costruire le formule nella macro.
io penso che tu volessi fare qualcosa tipo formule nel foglio allora devi pensare a qualcosa del genere.
Sub Cost() Dim valIniz as long i = 1 valiniz=sheets("Cost").Range("c26") Do sheets("Cost").Range("c26").value=sheets("Cost").Range("c26").value+1 Loop Until sheets("Results").Cells("c21") > sheets("Results").Cells("c17") MsgBox "il valore soglia : " & i ' poi se ti interessa ritornare al valore iniziale sheets("Cost").Range("c26").value=valiniz End Sub
Ciao a tutti,
scusate la confusione che ho fatto nel mio ultimo post (non consideratelo proprio e come riferimenti di cella considerate quelli presenti nella macro che trovate in allegato). Ho provato anche come ha detto Luca73 ma mi da errore di compilazione. La logica è quella di incrementare il valore della cella c26 del foglio Cost fino a quando la cella c2o del foglio Result (celle della colonna C che comunque vanno riferimento ad una divisione, dove il numeratore è calcolato sul valore della cella c26 del foglio Cost) raggiunga la quasi parità (parity-1) con la cella c17 del foglio Result.
Grazie,
Giuseppe
Allegati:
You must be logged in to view attached files. -
AutoreArticoli