PDA

View Full Version : [Excel] aiuto formula


kurikkino
06-04-2008, 21:05
ciao a tutti!

avrei bisogno di un aiuto per una formula di excel.

allora il punto è questo:

dato un prezzo di un'articolo scontabile al massimo del 50% vorrei sapere tramite una formula appunto il prezzo minimo di vendita per tot omaggi.

esempio l'articolo ha prezzo 10 e la confezione è composta da n. 12 pezzi io vorrei sapere il prezzo minimo di vendita di tale articolo nel caso in cui gli omaggi siano 1 pezzo oppure 2... e cosi via fino alla metà dei pezzi della confezione in questo caso 6.... tenendo conto del vincolo dello sconto max del 50% sul prezzo.... è fantascienza oppure si puo fare?

MarcoGG
07-04-2008, 08:08
dato un prezzo di un'articolo scontabile al massimo del 50% vorrei sapere tramite una formula appunto il prezzo minimo di vendita per tot omaggi.

esempio l'articolo ha prezzo 10 e la confezione è composta da n. 12 pezzi io vorrei sapere il prezzo minimo di vendita di tale articolo nel caso in cui gli omaggi siano 1 pezzo oppure 2... e cosi via fino alla metà dei pezzi della confezione in questo caso 6.... tenendo conto del vincolo dello sconto max del 50% sul prezzo....


Vediamo di capirci qualcosa... :D
Colonna A : prezzo totale articolo.
Colonna B : N° pezzi articolo.
Colonne C, D, E... ecc. : Prezzo articolo con 1, 2, 3 ... ecc. pezzi omaggio,
prezzo che in ogni caso non può essere inferiore al 50 % del prezzo iniziale.

Se è come ho scritto io, con una semplice formula non è possibile in quanto le celle da generare sono più di una e oltretutto di numero non determinato ( potresti avere un articolo con 30 pezzi... o più... ). Con VBA è facile. ;)

kurikkino
08-04-2008, 00:41
si infatti con excel ho rinunciato anche perchè per quello che mi ricordo (poco) di progammazione fatta a scuola credo ci voglia un ciclo che esca quando la variabile di controllo soddisfi una determinata condizione... solo che metterlo in linguaggio mi risulta praticamene impossibile... visto che in vba non ho mai fatto nulla... ho fatto un pò di java ma nn ciò mai capito una cippa.....

comunque ti ringrazio per la disponibilità ma un mio caro amico che studia ingegneria si è offerto di darmi una mano.... grazie ancora

MarcoGG
08-04-2008, 09:57
si infatti con excel ho rinunciato anche perchè per quello che mi ricordo (poco) di progammazione fatta a scuola credo ci voglia un ciclo che esca quando la variabile di controllo soddisfi una determinata condizione... solo che metterlo in linguaggio mi risulta praticamene impossibile...


Rinunciato ad Excel ?!
Excel è il numero 1 nella soluzione di problemi come questo.

E poi, era così semplice... :

Private Sub CommandButton1_Click()

'Colonna B : prezzo totale articolo.
'Colonna C : N° pezzi articolo.
'Colonne D, E, F,... ecc. : Prezzo articolo con 1, 2, 3 ... ecc. pezzi omaggio,
'prezzo che in ogni caso non può essere inferiore al 50 % del prezzo iniziale.

Dim prezzoTot As Double
prezzoTot = 0
Dim prezzoUnit As Double
prezzoUnit = 0
Dim i As Long
i = 0
Dim j As Long
j = 0
For i = 3 To 65536
If Cells(i, 1).Value = "" Then
Exit For
End If
prezzoTot = Cells(i, 2).Value
prezzoUnit = prezzoTot / Cells(i, 3).Value
For j = 4 To 256
If ((j - 3) * prezzoUnit) > (prezzoTot / 2) Then
Exit For
End If
Cells(i, j).Value = prezzoTot - ((j - 3) * prezzoUnit)
Next j
Next i

End Sub

:D ;) .

kurikkino
08-04-2008, 23:46
io personalemnte si.. poi nn so se questo mio amico deciderà di proseguire con quel poco che gia ho buttato giu o prendere tutta un'altra strada... cmq ho dato una letta a ciò che mi hai indicato (mille grazie) lo provo..magari riesco a buttarlo giu in maniera corretta... speriamo

MarcoGG
09-04-2008, 08:35
...magari riesco a buttarlo giu in maniera corretta... speriamo


Beh, se decidi di usare il mio codice, tutta la tua difficoltà si riduce ad un copia/incolla... :D
Ovvio che poi anche il Foglio deve essere organizzato in un certo modo :

http://img2.freeimagehosting.net/uploads/th.d6f6865a8b.jpg (http://img2.freeimagehosting.net/image.php?d6f6865a8b.jpg)

Al pulsante "CALCOLA" associ il mio codice e il gioco è fatto.
Occhio che se lo fai fare a uno studente, con le scuole che ci ritroviamo, magari te lo fa in C ( o in Pascal ) ! :doh: :D
Perchè metterci un pomeriggio intero quando con Excel lo fai in 2 minuti ?
E inoltre un foglio Excel è già pronto per la stampa/esportazione... ;)

gugoXX
09-04-2008, 08:37
A me sembra che si possa risolvere con Excel "normale", senza scomodare subroutine VBA. Sbaglio?

MarcoGG
09-04-2008, 09:46
A me sembra che si possa risolvere con Excel "normale", senza scomodare subroutine VBA. Sbaglio?


E come fai a riempire le celle "Omaggio 1", "Omaggio 2", ..., "Omaggio n" con una formula ? Dovresti mettere la stessa formula, con le opportune modifiche a seconda del numero-pezzi-omaggio, in ogni cella, su ogni record che "prevedi" di utilizzare...
Se hai una soluzione alternativa, postare ! :D

gugoXX
09-04-2008, 09:48
Dai, ci provo.
Ho anche insegnato all'ECDL... ma Excel non lo tocco davvero da 5 anni oramai, se non per la Business Intelligence.
Mmmmh...

gugoXX
09-04-2008, 10:20
Dai che si fa
http://img.photobucket.com/albums/v314/gugogugo/StudioExcel.png

Le celle gialle sono quelle di input
Le celle arancio sono interne, calcolate (unitario e Minprezzo)
Le celle rosa sono gli output (mannaggia a qualcosa, sono arancio pure loro. Sono le colonne Sconto da 0 a 8 pezzi)

La formula delle due colonne arancio e' banale, si tratta solo di trovare il prezzo unitario (B/C) e il prezzo minimo (B/2)

La formula della sezione sconto e' comunque semplice:
Riporto qui quella scritta dentro la cella F3
=MAX($D3*($C3-F$2),$E3)

Ovvero, per ciascuna cella prendo il massimo tra
- Il prezzo unitario moltiplicato per le le unita' effettive (che sono le originali meno le scontate)
- Il prezzo minimo

Grazie ai riferimenti fissi $ la formula puo' essere scopiazzata su tutto il foglio, aggiungendo quindi righe e colonne, se necessario.

kurikkino
09-04-2008, 12:29
ragazzi troppa grazia... stasera mi ci metto e vedo che tiro fuori... adesso mi sono intestardito lo voglio fare da solo.... anche se da fare da solo c'è rimasto ben poco... me lo aveta fatto tutto voi!!!! grazie mille!!!! vi tengo aggiornati!!!!

MarcoGG
09-04-2008, 13:32
Scusate, ma ho qualche problema con l'immagine del Foglio postata in precedenza ...

Rieccola ( Click per ingrandire ) :

http://thumbnails6.imagebam.com/481/d2231b4802947.gif (http://www.imagebam.com/image/d2231b4802947)

kurikkino
09-04-2008, 23:59
ragazzi sto provando entrambi i metodi... in riferimento a quello di MarcoGG ho fatto tutto uguale all'esempio che mi hai mostrato ma nn va...
perdonate la mia incompetenza...

MarcoGG
10-04-2008, 08:49
... in riferimento a quello di MarcoGG ho fatto tutto uguale all'esempio che mi hai mostrato ma nn va...
perdonate la mia incompetenza...


A me invece va che è una meraviglia... :mbe:
E questo ne è il risultato ( Click per ingrandire ) :

http://thumbnails5.imagebam.com/484/7353c14837164.gif (http://www.imagebam.com/image/7353c14837164)

Comunque, cosa intendi per "non va" ? Che errore ti ha dato ? Hai rispettato il layout del mio Foglio ?

gugoXX
10-04-2008, 08:51
Ma la mia non va bene?
Se andasse preferirei non avere subroutine VBA, non si conviene?

MarcoGG
10-04-2008, 09:07
Se andasse preferirei non avere subroutine VBA, non si conviene?


Beh, è una tua personale preferenza...
Nel mio caso è l'esatto opposto.
Chiaro che se l'utente non conosce VBA e non ha nessuna voglia di impararlo, userà Excel solo quel tanto ( poco ) che gli consentono formule e procedure prefabbricate...
Io spero tanto che nel prossimo Office ( post-2007 ) decidano di pensionare VBA 6.3 e magari scelgano una bella integrazione con Framework .NET... :cool:

kurikkino
10-04-2008, 10:53
ora vanno entrambi solo che nn avevo spiegato bene la mia esigenza nel primo post....
dunque:

un articolo ha un prezzo_minimo di x il suo prezzo_di_listino è 2x (che poi per l'elaborazione non serve a nulla ma mi occorre che venga visualizzato).

il numero di pezzi è n, il numero di omaggi massimo è n/2, il numero di pezzi venduti è pari al totale dei pezzi (n) meno gli omaggi.

e fin qui....

il ricavo è la differenza tra il ((prezzo_di_vendita - prezzo_minimo)/2)*il numero dei pezzi venduti

per ogni pezzo omaggiato io sostengo un costo pari alla metà del prezzo_minimo (questa variabile io l'ho chiamata rimessa). Quindi Rimessa=(prezzo_minimo/2)*num.omaggi

in pratica credo si tratti di fare un ciclo con un altro ciclo dentro (ciclo nidificato???)

il ciclo dentro implementa di un centesimo ad ogni giro la variabile vendita che assume come primo valore il prezzo_minimo e la fa uscire quando la variabile ricavo è maggiore di 1 centesimo rispetto della variabile rimessa.

Quello più esterno si occupa del numero di omaggi quindi parte con 0 ed esce quando la variabile di controllo è pari al numero max di omaggi....

dunque i dati in input sarebbero prezzo_minimo, n°pezzi totale e n°omaggi dopo di che tutto potrebbe essere calcolato in automatico.....

fatemi sapere... grazie grazie grazie e ancora grazie per la vostra attenzione.....

MarcoGG
10-04-2008, 11:42
Diciamo pure che questa seconda richiesta non ha nulla a che vedere con la prima... ;)
Se puoi posta un Layout ( ossia il modello del Foglio così come lo vorresti tu ) in cui evidenzi i dati iniziali per ogni articolo, e le celle destinate a contenere i risultati dell'elaborazione, così evitiamo ulteriori "equivoci"...

E magari cerca di essere un po' più chiaro sulle specifiche ( sarà che oggi sono un po' rinco, ma personalmente non ci ho capito una mazza :D )...

gugoXX
10-04-2008, 12:06
Non vorrei essere antipatico, ma secondo me sarebbe meglio che imparassi a pescare...
Ti abbiamo fatto vedere 2 modi diversi, uno con un linguaggio di programmazione, l'altro usando direttamente le opportunita' offerte da un foglio di calcolo.
Secondo me dovresti iniziare a pacioccare un po' con una delle 2 scelte, e quando incontri delle difficolta' possiamo aiutarti.
Altrimenti si chiama consulenza fino al prodotto finito, e un forum gratuito non penso sia il posto giusto, soprattutto per una cosa che sembra davvero molto commerciale.

kurikkino
10-04-2008, 12:13
si infatti... lo sto buttando giu in excel mi dici gentilmente come si posta un'immagine come hai fatto tu..

kurikkino
10-04-2008, 12:16
ma io ci sto pacioccando.... solo che evidentemente incontro delle difficoltà... e la seconda richiesta è nata dal fatto che avendoci pacioccato mi sono reso conto che ciò che avevo richiesto come consiglio non rispecchiava la mia esigenza.... cmq ora continuo a pacioccarci....

gugoXX
10-04-2008, 12:19
Puoi farlo avendo un account su uno dei servizi/siti che permettono la pubblicazione di foto online.
Io uso www.photobucket.com

Poi con Excel a video (o qualsiasi altra cosa, se mai ti servira') schiacci contemporaneamente i tasti
CTRL+PrintScreen
combinazione che serve per mettere sulla clipboard l'immagine a schermo.
Apri quindi PaintBrush (o altro), ritagli, salvi, pubblichi e infine usi.. Uffh...

kurikkino
10-04-2008, 13:05
grazie... ecco ti do il link cosi vedi cio che ho fatto io... ci sono anche dei commenti... ho cercato di essere il più chiaro possibile....

http://www.imagebam.com/image/e5a0ea4844437

MarcoGG
10-04-2008, 17:05
Ah, quindi non è una tabella con molti articoli,
ma un foglio in cui, nelle zone rosse, metti un articolo per volta, no ?
Quindi un foglio = un articolo...

kurikkino
11-04-2008, 13:31
si diciamo che non ho necessità di vedere grandi quantità di articoli tutti insieme.. al massimo tre... ma basterebbe ricopiare il tutto.... cmq io sto provando a fare la macro solo che nn conosco vb e nn trovo il comando per scrivere in una cella un valore ottenuto...

MarcoGG
11-04-2008, 13:59
si diciamo che non ho necessità di vedere grandi quantità di articoli tutti insieme.. al massimo tre... ma basterebbe ricopiare il tutto.... cmq io sto provando a fare la macro solo che nn conosco vb e nn trovo il comando per scrivere in una cella un valore ottenuto...


Perfetto allora.
Ecco la soluzione al tuo quesito :
- Foglio identico al tuo.
- Aggiungi 2 pulsanti : CALCOLA ( compila le celle ) e RESET ( resetta ).

Risultato ottenuto con il mio codice ( un paio di valori sono leggermente diversi, ma io ho fatto tutto con variabili Double, perciò OK. ;) ) :read: :

http://thumbnails6.imagebam.com/490/fdb7f24890010.gif (http://www.imagebam.com/image/fdb7f24890010)

CODICE per "CALCOLA" :

Private Sub CommandButton1_Click()

Dim numPezzi As Integer
numPezzi = Range("C4").Value
Dim prezzoMin As Double
prezzoMin = Range("A4").Value
Dim prezzoList As Double
prezzoList = prezzoMin * 2
Range("B4").FormulaR1C1 = prezzoList
Dim fine As Integer
fine = 0

Dim i As Integer
i = 0
For i = 4 To 256
If (i - 3) > (numPezzi / 2) Then
fine = i - 1
Exit For
Else
Cells(6, i).FormulaR1C1 = numPezzi - Cells(3, i).Value
Cells(8, i).FormulaR1C1 = prezzoMin / 2 * Cells(3, i).Value
End If
Next i

Dim prezzo As Double
prezzo = prezzoMin
Dim diffRicVend As Double
diffRicVend = 0
Dim ricavo As Double
ricavo = 0
For i = 4 To fine
Do
prezzo = prezzo + 0.01
ricavo = (prezzo - prezzoMin) / 2 * Cells(6, i).Value
diffRicVend = ricavo - Cells(8, i).Value
If diffRicVend >= 0 Then
Cells(4, i).FormulaR1C1 = prezzo
Cells(7, i).FormulaR1C1 = ricavo
Cells(9, i).FormulaR1C1 = diffRicVend
Exit Do
End If
Loop
Next i

End Sub
CODICE PER "RESET" :

Private Sub CommandButton2_Click()

Range("B4").ClearContents
Range("D4:IV9").ClearContents

End Sub
Provare... :D

kurikkino
12-04-2008, 01:35
Grandissimo!!!! va alla grande complimentoni!!!!

non so veramente come ringraziarti!!!

ora continuo a sviluppare un'altra parte prendendo spunto da cio che mi hai fornito tu..... grazie mille ancora