› Excel e gli applicativi Microsoft Office › Attribuire valore a testo e sommarlo
-
AutoreArticoli
-
Ciao a tutti!
Sto provando a creare una formula per attribuire un valore numerico a specifici contenuti di una cella, quindi sommare il valore ottenuto delle sovrastanti 7 celle (da lun a dom).
N.B.: la somma è sempre da lun a dom sovrastanti (per tutto il mese e per tutte le colonne che saranno presenti, al momento 2 per semplicità) ma le righe in cui effettuare la somma non saranno sempre le stesse (nel file di esempio sono evidenziate in giallo).In C10 ho inserito la formula che sto provando a utilizzare, ma che non funziona come vorrei. Soprattutto, non so come far attribuire il valore "2" qualora nella cella ci sia il segno "+" (prima e dopo il "+" il testo è variabile).
P.S. nel secondo foglio ci sono i valori da attribuire al testo.
P.P.S.: potrebbe essere necessario VBA, ma io non saprei come fare (ma non disdegnerei la soluzione).
Grazie!
Allegati:
You must be logged in to view attached files.Non è necessario VBA, se questo può consolarti, quello che vuoi fare è abbastanza chiaro, ho realizzato pochi mesi fa in ufficio una cosa simile per un problema analogo e adesso vedo se riesco a recuperare la logica di quel ragionamento.
In VBA peraltro sarebbe abbastanza più semplice, almeno per me, ma voglio provare a cimentarmi 🙂

Allego l'immagine del mio lavoro. Come vedi è simile ed è abbastanza autoesplicativa (sono turni di un infermiere variamente codificati e in base alla codifica attribuisco un numero). Se riesco ad applicarmi provo a riprodurlo sul tuo file, altrimenti prendi spunto e vediamo chi arriva prima 🙂
Sempre se qualcun altro non ha una bacchetta più magica della mia 😉
Allora forse ci siamo 🙂
Riallego il tuo file con le mie modifiche. Ho introdotto una colonna di appoggio per ogni colonna di dati, che avrai cura di nascondere alla fine, perché contiene la traduzione in numeri delle sigle che hai codificato. Ho fatto solo qualche test sommario... a te il piacere di scovare errori e:
1- cercare di correggerli
2- riportarmeli per curiosità
😀
Allegati:
You must be logged in to view attached files.Cioè, il tempo in cui stavo cercando di capire la formula dell'immagine allegata e già arriva la soluzione?!
Complimenti!
Ora la testo e ti aggiorno!
Grazie!
Bè in realtà la formula dell'immagine non è così pertinente al tuo caso, però è servita da spunto e sprone 😉
Quella formula considera solo le codifiche a una lettera che inizino con determinato simbolo, eliminandole comunque anche se valide, qualora siano seguite da una delle lettere (o delle cifre) indicate nella sequenza. Per esempio la codifica "4" deve restituire "10" ma "4m" viene ignorata; però "4r" è valida e restituisce sempre "10". Quella è stata una bella sfida anche per la trasposizione in formato riferimento dei valori tra cui scegliere.
Vecchio frac, a me sembra funzioni tutto!
Due cose:
1) vorrei capire come funziona la formula, soprattutto dove "legge" che, per esempio, "20--8" deve valere 2?
2) non è un gran problema usare le colonne d'appoggio, ma siccome saranno tante, non si potrebbe far girare la formula direttamente nella cella sotto ogni domenica (non so se sono stato chiaro)?
P.S.: ho dimenticato di codificare "sn" = 0.
=SE.ERRORE(INDICE(table;CONFRONTA(C3;table_col1;0);2);SE.ERRORE(SE(RICERCA("+";C3);2);SE(VAL.VUOTO(C3);0;1)))La formulaccia si capisce più facilmente se la spacchetti nei suoi parametri e, questi, negli argomenti.
In pratica si limita a codificare prima i valori noti, che trova nella tabella "table" e poi se non li trova (SE.ERRORE) cerca le eccezioni: il "+", poi la cella vuota, poi qualsiasi altra cosa, e vi associa il relativo codice numerico. Poi una banale SOMMA alla fine della settimana ti riporta il risultato desiderato.
La tabella di riferimento ("table") è definita nel Foglio2; è estensibile ma devi rinominare il nome definito altrimenti i nuovi valori aggiunti non vengono riconosciuti (lo so... potevo creare una tabella definita dinamicamente. Ma te lo lascio come esercizio 🙂 ). Occhio che la prima colonna della table è definito anch'esso ("table_col1") e serve alla formula stessa come parametro di CONFRONTA.
Se guardi il Foglio2 in corrispondenza di "20--8" c'è il 2 che è il valore da associare a questa codifica. Il resto segue la regola che hai imposto tu (per cui puoi provare ad aggiungere la nuova condizione).
Ho utilizzato il trucco della colonna di appoggio per semplificare la formula, altrimenti avrei dovuto inserire una SOMMA di sette formule identiche dentro la stessa cella. Fattibile ma brutto assai e più difficile da manutenere. Se non ti piace questo sistema puoi mettere queste colonne d'appoggio nel Foglio2, inserendo le formule per, poniamo, 50 colonne, e poi nel Foglio1 semplicemente puntare alla cella di sommatoria in fondo a ogni settimana. Se 50 colonne non sono sufficienti puoi metterne quante ne vuoi (il numero di colonne disponibili in Foglio2 è 16.384).
Se questo nuovo suggerimento non ti è chiaro nemmeno dopo aver provato, dimmelo che ti riallego l'esempio con il nuovo formato.
Ho giocato un po' col tuo file. Mi permetto di allegare una nuova versione, piuttosto diversa ma che forse da quello che ho intuito potrebbe servirti. Può essere che ho sbagliato tutto, ma è interessante l'interessante meccanismo di confezionamento. Sarei contento di discuterne con te. Allego la nuova revisione.
Allegati:
You must be logged in to view attached files.Buongiorno, vecchio frac!
Mi dai troppi compiti da fare tutti insieme e io non sono veloce come te, anzi...
Vedo che fa la somma totale; è un dato che attualmente non mi serve, ma non è neanche inutile in assoluto. Do un'occhiata e ti faccio sapere.
Grazie!
Mi dai troppi compiti da fare tutti insieme e io non sono veloce
Bè non credo che ci sia una gara di velocità in ballo 😀 ho cercato solo di rendermi utile. Naturalmente gli scenari si perfezionano solo parlandosi. Io non ho la minima fretta di un riscontro, devi prenderti qualsiasi tempo ritieni necessario. Mi basta che tu abbia gradito l'impegno che è stato messo 😉
Per il resto... ad maiora 🙂
Altro che gradito, molto di più!
In serata, vediamo cos'ho combinato.
P.S.: nel precedente messaggio ho saltato un'emoticon, non vorrei sia stato frainteso il mio tono che era assolutamente di ringraziamento (ci mancherebbe!).
Ciao, vecchio frac!
Ho testato la funzione e il bel confezionamento che hai creato (mi piace più della prima soluzione): tutto è ok!
Ho poi provato ad usare il tutto sul file definitivo e purtroppo non trovo maneggevole la situazione perché, come detto all'inizio del thread, devo fare una somma settimana per settimana.
Per come stanno ora le cose, per le mie minime capacità, il calcolo lo otterrei automaticamente ma le celle da selezionare (su cui fare la somma) dovrei inserirle manualmente in quanto la riga dove avviene la somma è diversa mese per mese.
Da ciò capisco che la cosa più comoda per me sarebbe: "per tutte le colonne, fai la somma delle 7 celle sovrastanti (lun-dom) ogni volta che sei nella riga 'Somma settimana'".
In questo modo, ovunque io vada a inserire la riga "Somma settimana" (e sarebbero sempre e solo 4-5 al mese) avrei la somma di cui necessito. Ovviamente applicando il valore come da tabella già creata (in cui ho inserito qualche altro valore sebbene non riesca a farla dinamica).
Come sempre, se e quando puoi dargli un'occhiata; io, già per com'è adesso la funzione, sarei a posto (ma l'appetito vien mangiando).
P.S.: in riga 2 -fissa- utilizzo un'altra formula per fare la somma di alcuni turni del fine settimana (con altre regole).
Allegati:
You must be logged in to view attached files.Sei passato a un file xlsm: c'è un motivo? Accetteresti qualche riga di codice ? 😀
Tolgo il flag "Risolto" dalla discussione perché non è ancora risolta.
Orribile come hai massacrato i giorni della settimana, li avevo impostati che in automatico in una cella figurasse numero e giorno della settimana, ed era funzionale ai calcoli... con due celle distinte, e per di più il giorno della settimana è inserito manualmente... un disastro
Orribile come hai massacrato i giorni della settimana, li avevo impostati che in automatico in una cella figurasse numero e giorno della settimana, ed era funzionale ai calcoli... con due celle distinte, e per di più il giorno della settimana è inserito manualmente... un disastro
Sì, scusa, ho dimenticato di impostare i giorni della settimana in automatico (l'ho fatto sotto e non l'ho ripetuto sopra fra le tante modifiche). Sei passato a un file xlsm: c'è un motivo? Accetteresti qualche riga di codice ?
Perché qualche riga di codice semplice-semplice (semplice...) la inserirò. Non sono però in grado di arrivare al risultato che vorrei ma se per te va bene, che codice sia!
Comunque ecco qui la mia nuovo proposta... una funzioncina al volo per calcolare le somme parziali.
Function somma_settimana(r As Range) As Integer Dim j As Long Dim iStart As Long Dim f As Range Dim ra As Range Dim d As Integer iStart = r.Row - 1 d = Day(Cells(iStart, "A")) Set f = Range("A50:A81").Find(d, LookIn:=xlValues, lookat:=xlWhole) If f Is Nothing Then 'caso anormale, settimana parziale iStart = r.Row - 2 d = Day(Cells(iStart, "A")) Set f = Range("A50:A81").Find(d, LookIn:=xlValues, lookat:=xlWhole) j = r.Row - 3 Else 'caso normale, settimana piena j = 7 End If Set ra = Cells(f.Row, r.Column).Offset(-6).Resize(7) somma_settimana = Application.Sum(ra) End FunctionDa testare, ovvio.
Allego anche il file modificato.
Allegati:
You must be logged in to view attached files.Naturalmente la fretta.
Errata corrige (riallego anche il file corretto):
Function somma_settimana(r As Range) As Integer Dim j As Long Dim iStart As Long Dim f As Range Dim ra As Range Dim d As Integer iStart = r.Row - 1 d = Day(Cells(iStart, "A")) Set f = Range("A50:A81").Find(d, LookIn:=xlValues, lookat:=xlWhole) If f Is Nothing Then 'caso anormale, settimana parziale iStart = r.Row - 2 d = Day(Cells(iStart, "A")) Set f = Range("A50:A81").Find(d, LookIn:=xlValues, lookat:=xlWhole) j = r.Row - 3 Else 'caso normale, settimana piena j = 7 End If Set ra = Cells(f.Row, r.Column).Offset(-6).Resize(j) somma_settimana = Application.Sum(ra) End FunctionAllegati:
You must be logged in to view attached files.La cosa che non funziona è che non conta ciò che è nelle righe della domenica.
Poi, servirebbero due cose che renderebbero tutto veramente fluido:
1) più importante, ogni volta che aggiungo/tolgo/cambio un valore in una cella, la somma (della settimana) relativa a quella colonna dovrebbe aggiornarsi automaticamente (come fa la funzione della somma totale), altrimenti ogni volta dovrei manualmente "aggiornare" la cella della somma.
2) se è possibile inserire una riga "somma settimana" dopo ogni domenica, con la "formula" applicata nelle seguenti celle, sarebbe un passaggio in meno che dovrei fare. Come dicevo, ogni mese la riga della domenica cambia, quindi non può essere un calendario con righe preconfezionate.
P.S.: ho già il codice per inserire una riga dopo ogni domenica (lo aggiungo qui se lo recupero), solo non saprei aggiungere il resto.Grazie!
non conta ciò che è nelle righe della domenica
ops...
Sul punto 1 penso che basti dichiarare la funzione come Volatile. Adesso ci lavoro.
Non ho bene compreso il punto 2, intendi forse il tabellone delle righe con la maxiformulaccia che dovrebbero stare nascoste? Sul fatto che ogni mese la domenica cambi, concordo. Il codice dovrebbe essere abbastanza furbo per capirlo.
Comunque stavo già facendo frullare il cervellino per tentare la somma parziale di settimana con formule native invece che con formule definite dall'utente. Così forse avresti anche tu più coraggio a metterci mano 🙂
Non ho bene compreso il punto 2, intendi forse il tabellone delle righe con la maxiformulaccia che dovrebbero stare nascoste? Sul fatto che ogni mese la domenica cambi, concordo. Il codice dovrebbe essere abbastanza furbo per capirlo.
No, intendo dire che inizialmente io ho il calendario con i giorni dal primo all'ultimo del mese, senza interruzioni.
In un secondo momento, io aggiungo una riga vuota dopo ogni domenica (con un piccolo codice che in questo momento non trovo, ma ce l'ho). Quindi do l'intestazione (Somma settimana), quindi aggiungerei il "codice" nella prima cella da ripetere per tutte le colonne.
Magari, una formuletta per fare tutto questo in automatico, dato che è ripetitivo, mi farebbe risparmiare qualcosina in termini di tempo.OK per il resto!
Ecco, questo il codice che uso per inserire una riga dopo ogni domenica:
`Sub Inserisci_riga_dopo_domenica() Dim c As Range Dim lRow As Long lRow = 1 Dim lRowLast As Long Dim bFound As Boolean With ActiveSheet lRowLast = .Cells(.Rows.Count, 1).End(xlUp).Row Do Set c = .Range("B" & lRow) If c.Value Like "*dom*" Then bFound = True ElseIf bFound Then bFound = False If c.Value <> "N. turni" Then c.EntireRow.Insert lRowLast = lRowLast + 1 c.Offset(-1, 0).Value = "N. turni" c.Offset(-1, 0).Font.Color = RGB(0, 0, 0) End If End If lRow = lRow + 1 Loop While lRow <= lRowLast + 1 End With End Sub`P.S.: non è aggiornato: N. turni da modificare in "Somma settimana" cambiando la colonna da B ad A.
Allego nuova versione. Ho corretto il bug della domenica. Ho corretto il funzionamento dell'auto aggiornamento.
Nota: non editare un tuo messaggio precedente perchè mi confondi... e rischio di non leggere le tue modifiche 🙂
Allegati:
You must be logged in to view attached files. -
AutoreArticoli
