Visualizzazione dei risultati da 1 a 9 su 9

Discussione: problema excel

  1. #1

    problema excel

    buongiorno a tutti,
    è possibile escludere un valore da un calcolo se questo valore è già stato utilizzato, non potendo sapere a priori se e quando questo valore viene calcolato?

    grazie in anticipo

  2. #2
    Ciao e benvenuto,

    magari se ti spieghi un po' meglio ...

    Un esempio poi sarebbe il massimo.

    Voglio dire che senza sapere nulla di ciò che stai facendo e di come lo stai facendo diventa difficile capire di cosa hai bisogno. Diventa perfino difficile interpretare le singole parole.

    Ad esempio cosa intendi con calcolo? Una formula o un'espressione VBA?
    E il valore in questione da chi viene calcolato e da chi viene utilizzato?
    E con "è già stato utilizzato" stai parlando di priorità nella valutazione delle formule o di dati che arrivano progressivamente all'excel da collegamenti esterni ...

    Insomma ... non ho capito.


    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  3. #3
    ciao e grazie per l'attenzione.
    per lavoro sto creando un file in excel che permetta la gestione delle ore di straordinario del personale. le ore prodotte è possibile che si decida di tagliarle (quindi di non pagarle e farle prendere al personale come ferie o permesso). il prospetto che sto creando mi deve dare una visuale d'insieme (sono circa 100 persone) delle ore che sono state tagliate, di quelle recuperate e di quante ore devono ancora essere recuperate.
    il file è composto da 13 fogli (di cui ti allego 2 esempi): un riepilogo generale + da 12 fogli, uno per ogni mese.
    in ogni mese inserisco le ore tagliate e quelle recuperate per ogni persona. questi dati che scrivo (o che andrò a collegare ad un altro file, questo poi si vedrà) devono essere riportati nel riepilogo che deve effettuare dei calcoli in modo tale da poter sapere qual'è la situazione.
    Legenda:
    OT: ore tagliate;
    OR: ore recuperate (le ore recuperate non si riferiscono mai al mese in cui sono state tagliate;
    OM: ore recuperate in quel mese, ma che sono state tagliate nei mesi precedenti;
    DR: ore ancora da recuperare.

    spero di essere stato chiaro nella spiegazione.



    PS: non riesco ad allegare le immagini del file da farti vedere. come posso fare?

  4. #4
    Sì, comincia a essere più chiaro, se ho capito bene, i fogli dei mesi contengono sulle righe i nominativi e in quattro colonne le diverse tipologie di ore e poi ti serve un riepilogo. OK, chiaro, e qual è il dato da non utilizzare se è già stato utilizzato?

    Per condividere immagini ci sono vari servizi che offrono spazio gratuito su web, io mi trovo bene con http://imageshack.us/ ma ce ne sono anche altri. Basta creare l'account inserendo la mail, fare l'upload dei file e poi postare il lnk.

    Purtroppo però dall'ufficio non posso vederli quindi ne riparleremo domani sera.

    Ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  5. #5
    ciao, non proprio... il prospetto mensile ha solo il nome della persona, le ore tagliate e quelle recuperate, che però si riferiscono ad ore tagliate in mesi precedenti e sono dati che inserisco manualmente. poi il prospetto generale ha le 4 colonne dove inserire le formule.

    comunque questi sono i link delle immagini che non sono riuscito ad allegare:

    prospetto riepilogativo http://imageshack.us/photo/my-images...prospetto.jpg/

    prospetto del mese http://imageshack.us/photo/my-images...empiomese.jpg/

  6. #6
    Il tuo è un bel problema, sai, ci sto lavorando su ma non è tanto immediato, comunque dovrebbe essere risolubile con le sole formule.

    Però prima di andare avanti volevo chiederti una cosa: è proprio necessario che le ore recuperate non possano riferirsi al mese in corso?
    Questa è la cosa che complica enormemente tutto perché obbliga a fare n-mila ragionamenti su quali mesi sono stati già considerati nei calcoli e quali no, se invece si potessero recuperare anche nello stesso mese il tutto si ridurrebbe a un semplice saldo entrate/uscite e sarebbe banale.

    In altre parole mi chiedo quale sia il senso di dire a una persona: gli straordinari che io, azienda, decido di non pagarti li puoi recuperare ma solo dal mese seguente.

    Cioè l'impiegato o l'operaio non può decidere di lavorare oggi un'ora in più e domani una in meno che sarebbe la cosa più semplice ma deve aspettare il mese seguente per recuperare e intanto fa altri straordinari che non può recuperare nel mese in corso ma in quello seguente ecc.

    Mi sembra l'ufficio complicazione cose semplici
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  7. #7
    Ciao, ti ringrazio per l'aiuto...
    Il mio non é l'ufficio complicazione cose semplici , anche se potrebbe sembrarlo e spesso lo é.
    Quello che tu dici sul lavorare in più oggi e meno domani succede già e non ci crea alcun problema.
    Il fatto é che può succedere che se come ufficio facciamo, per qualunque motivo, troppe ore di straordinario e per qualche motivo non riusciamo, possiamo o vogliamo recuperarlo nel mese, le nostre ore vengono mandate comunque all'ufficio paga che ci dice se siamo comunque entro i limiti o sforiamo. in questo caso la comunicazione di taglio delle ore ci arriva intorno al 10 del mese successivo ed é per questo che c'é questa differenza.

  8. #8
    Eccomi qui,
    pensavi che mi fossi dimenticato, eh ?

    E invece no, è solo che mi ero incaponito a cercare di fare tutto con le formule ma alla fine mi son dovuto ricredere, con le sole formule non se ne esce, e così ti ho fatto un piccolo script in VBA.

    Se ho capito bene le colonne OT e OM le prendi direttamente dai fogli dei mesi, la DR non è altro che la differenza delle due quindi il problema riguarda solo la valorizzazione della colonna OR. E’ così?

    Se è così questo script dovrebbe risolvere:

    codice:
    Option Explicit
    Private Sub CommandButton1_Click()
    
       Dim Rng, Casella, Valore, Rimanente, Mese_OM, Mese_OT
       
       Set Rng = Range("B4:AW7")
       
       For Each Casella In Rng
          If Cells(3, Casella.Column) = "OR" Then
             Casella.Value = 0
          End If
       Next
       
       For Each Casella In Rng
          If Cells(3, Casella.Column) = "OM" And _
             Casella.Value <> 0 And _
             Casella.Value <> "" _
          Then
             Mese_OM = Left(Cells(2, Casella.Column - 2), InStr(Cells(2, Casella.Column - 2), " ") - 1)
             Rimanente = Casella.Value
             For Each Valore In Rows(Casella.Row).Cells
                If Valore.Column >= Casella.Column Or _
                   Rimanente = 0 _
                Then
                   Exit For
                End If
                If Not IsNull(Cells(3, Valore.Column)) And _
                   Cells(3, Valore.Column) = "OT" _
                Then
                   Mese_OT = Left(Cells(2, Valore.Column), InStr(Cells(2, Valore.Column), " ") - 1)
                   If Int(Mese_OT) < Int(Mese_OM) Then
                      If Valore > Valore.Offset(0, 1) Then
                         If Rimanente > Valore - Valore.Offset(0, 1) Then
                            Rimanente = Rimanente - (Valore - Valore.Offset(0, 1))
                            Valore.Offset(0, 1) = Valore
                         Else
                            Valore.Offset(0, 1) = Valore.Offset(0, 1) + Rimanente
                            Rimanente = 0
                         End If
                      End If
                   End If
                End If
             Next
          End If
       Next
       
    End Sub
    Ti do alcune indicazioni su come utilizzarlo, nel caso non sapessi farlo (indicazioni riferite a excel 2007).
    Mi raccomando, salva una copia del foglio prima di cominciare a modificarlo, non si sa mai.

    Per prima cosa devi cambiare le intestazioni dei mesi del foglio di riepilogo (poi ti spiego perché) inserendo il numero del mese e almeno uno spazio prima del nome (per evitare che excel interpreti male ciò che stai scrivendo dai a quelle celle il formato TESTO), per esempio così:

    codice:
    GEN      -->        1 – GEN
    FEB      -->        2 – FEB
    ...
    DIC      -->        12 – DIC
    Poi devi salvare il foglio come Cartella di lavoro con attivazione di macro (xlsm), che è una delle opzioni che trovi nel menu “Salva con nome”.

    Verifica poi di avere, nella barra in alto, la scheda Sviluppo (affianco a Visualizza), se non c’è attivala dalle opzioni di excel.

    Nella scheda Sviluppo clicca sulla freccetta sotto all’icona “Inserisci”, poi clicca sul primo controllo Active-X, cioè il pulsante di comando, e infine clicca in un punto qualsiasi del foglio per inserirlo.

    Fatto questo vedrai che c’è un’icona arancione attivata che indica che sei in modalità di progettazione e che quindi puoi intervenire sulle caratteristiche del pulsante senza eseguire il codice. Per ora lasciala attiva.

    Col tasto destro, selezionando proprietà, puoi personalizzare il pulsante come preferisci e puoi anche ridimensionarlo e spostarlo dove ti pare. Devi fare attenzione solo al (Name) che di default è CommandButton1: se lo cambi devi cambiare anche il nome della SUB. La Caption, cioè la scritta che compare sul pulsante puoi invece cambiarla liberamente.

    Clicca ora due volte sul pulsante e inserisci il codice che ti ho postato.

    Questo script viene attivato dal click sul pulsante e si occupa di valorizzare le caselle OR in base ai valori che trova nelle caselle OT e OM, senza modificare gli altri valori del foglio. Le caselle OT, OM e DR devi continuare a valorizzarle con le formule come già fai adesso (sempre che abbia capito bene ).

    Per prima cosa viene individuato il range su cui agire che nei miei test era B4:AW7. Al posto di quello devi indicare il range in cui sono contenuti i tuoi dati. Il primo valore dev’essere quello della prima cella OT, in alto a sinistra, il secondo quello dell’ultima cella DR, in basso a destra.

    La prima azione dello script è di azzerare tutti i valori OR del foglio per avere una situazione pulita su cui ragionare. Di questo si occupa il primo ciclo For Each.

    Come vedi la ricerca dell’intestazione “OR” viene fatta sulla riga 3 perché mi sono basato sull’immagine che hai postato.

    Finito l’azzeramento iniziale parte un nuovo ciclo che esplora tutte le caselle del range, una ad una, cercando le OM che contengano un valore significativo.

    Quando ne trova una esegue una serie di operazioni.

    La prima è di impostare nella variabile Mese_OM il numero del mese prelevato dalla seconda riga (ecco perché te li ho fatti inserire). E’ una variabile che verrà utilizzata nel seguito e per ora non te ne parlo.

    Poi memorizza il valore della cella OM in una variabile Rimanente da cui verranno sottratte via via le ore assegnate alle celle OR.

    Poi comincia ad esplorare tutta la riga in cui si trova alla ricerca delle celle OT. La condizione di uscita da questo ciclo (Exit For) è che sia stata superata la casella OM o che non ci siano più ore rimanenti.

    Quando trova una OT preleva il suo mese e lo confronta col Mese_OM in modo che le ore OM di un certo mese possano influire solo sulle OR dei mesi precedenti.

    Ricapitolando, a questo punto è stata individuata una OM significativa, ci sono ancora ore OM rimanenti da attribuire ed è stata individuata una OT di un mese precedente. Resta solo da chiedersi se bisogni attribuirle delle ore o no.

    Per farlo si confronta la OT con la casella spostata di un offset 1 verso destra (cioè la OR corrispondente): se la OT è maggiore della OR vuol dire che ci sono ancora ora da compensare in quel mese e allora si verifica se le ore rimanenti siano più o meno di quelle che quel mese può accogliere aggiornando di conseguenza la cella OR e il Rimanente.

    E poi i cicli continuano con le prossime OR e OM fino alla fine dei dati.

    Ora devi solo tornare al foglio excel, disattivare la modalità di progettazione e cliccare sul pulsante.

    Fammi sapere come va.
    Ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  9. #9
    per ora ti ringrazio. ora sono in ferie e torno tra una decina di giorni. appena torno lo provo e ti faccio sapere.

    ciao e a presto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.