Domanda

Sto creando un "solo periodo" modello finanziario in Excel, ovvero un modello in cui le formule sono coerenti in ciascuna colonna, quindi è possibile copiarle / incollarle / estenderle come desiderato.

Sto suddividendo le ipotesi del modello in un foglio separato. Ad esempio, ho una cella chiamata Monthly_sales ; ecco quanti nuovi clienti aggiungo ogni mese. Le formule quindi appaiono così:

Foglio delle ipotesi 1.0

      A             B                  
1 | Monthly sales | 6                 |

Foglio proiezioni 1.0

     A               B     C                   D                   E                  
1 |               |     | August 2009       | September 2009    | October 2009
2 | # Customers   |     | =B2+monthly_sales | =C2+monthly_sales | =D2+monthly_sales

Quindi ad agosto avrò 6 clienti; a settembre, 12 clienti; nel mese di ottobre, 18 clienti. Fin qui tutto bene. Ma i miei primi clienti avranno bisogno di più risorse di sviluppo, giusto? Meglio aggiungere alcuni limiti.

Foglio delle ipotesi 2.0

      A                       B                  
1 | Monthly sales           | 6                 |
2 | Early customers         | 3                 |
3 | Early dev cycle, months | 2                 |

In inglese: i primi 3 clienti impiegheranno ciascuno 2 mesi di tempo di sviluppo. Da agosto a novembre, ho 1 cliente. A dicembre aggiungo un secondo cliente e ad aprile un terzo. Entro agosto 2010, ho superato il early_customers e quindi posso iniziare a crescere di 6 al mese.

So come farlo con VBA; Posso scrivere una funzione definita dall'utente che controlla i mesi precedenti e cambio la formula # Clienti in qualcosa del tipo

=B2+min(max_customers_this_month(),monthly_sales)

Ma sospetto che ci sia un modo per rappresentare questo concetto in modo dichiarativo in una formula Excel corretta. C'è?

È stato utile?

Soluzione

Probabilmente c'è un modo più conciso per farlo, ma ecco una soluzione. Inserisci 1 in B2 e quanto segue in C2 (e copia nelle seguenti colonne):

=IF(
    B2 > Early_customers,
    B2 + Monthly_sales,
    IF(
       OR(
          C1 - $B1 < Early_dev_cycle,
          OFFSET(B2, 0, MAX(-Early_dev_cycle + 1, $B1 - B1)) <> B2 
         ),
       B2,
       B2 + IF(
               B2 < Early_customers,
               1,
               Monthly_sales
              )
      )
   )

Si noti che questa soluzione presuppone che la riga 1 sia popolata con numeri per i mesi anziché con le date. Per usare le date, dovrai usare qualcosa di più sofisticato della semplice sottrazione per le due sottrazioni nella clausola OR che coinvolgono $ B1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top