celle automaticamente negative
Hai un problema con Excel? 
celle automaticamente negative
di Filippo_72 (utente non iscritto) data: 08/02/2013 17:15:21
Buongiorno a tutti.
Avrei bisogno che qualcuno mi aiutasse per quanto segue:
ipotizziamo di avere 2 celle, A1 e B1; A1 può avere solo 2 valori di testo, e cioè "C" oppure "V"; B1 invece contiene un numero. La mia esigenza è che se A1 è uguale a C, B1 sia positivo; se invece A1 e uguale a V, B1 sia negativo.
In pratica vorrei che a prescindere da quel che io digito in B1 (p.es. 124), esso mi venga in automatico trasformato in negativo (-124) se A1 è uguale a V.
Idee?
Grazie
Filippo
di Riccardo (utente non iscritto) data: 08/02/2013 17:45:29
Secondo me si può fare con una cella di appoggio e non direttamente sulla cella B1, come segue:
sia in A1 il valore "C" oppure "V", in B1 il tuo valore numerico;
poniamo in C1 la formuletta: =SE(A1="C";B1;B1*(-1))
che vuol dire: se in A1 trovi "C", poni nella cella C1 il valore B1 così com'è, altrimenti poni il valore moltiplicato (-1) cioè fai diventare negativo il valore posto in B1.
Eventualmente terminata l'assegnazione di tutti i valori nella colonna C, puoi ricopiarli nella colonna B con la funzione INCOLLA VALORI, cancellando la colonna di manovra C e riottenendo le due sole colonne che volevi inizialmente.
La formuletta si può poi perfezionare per intercettare eventuali condizioni di errore, ma questo è il criterio base che io suggerirei.
Oppure si può ricorrere a soluzioni più sofisticate, come una macro o una funzione in VBA, ma per un lavorino così semplice mi sembra che questa soluzione elementare sia la più indicata.
Spero di essere stato utile
Ciao
Riccardo
di Vecchio Frac data: 08/02/2013 20:51:11
@Filippo
L'idea di Riccardo è eccellente e si può semplificare: =SE(A1="C";B1;-B1)
Ma cosa deve succedere se in B1 inserisco un numero già negativo?
La formuletta lo trasforma in positivo., mentre la richiesta dice "a prescindere da quel che io digito in B1 (p.es. 124), esso mi venga in automatico trasformato in negativo (-124) se A1 è uguale a V. ".
Un numero negativo resta negativo?
Questa è la mia variante per tener conto del caso:
=SE(B1<0;B1;SE(A1="V";B1*(-1);B1))
VBA, certo, bisogna intercettare l'evento _Change di una cella del foglio.
di Mister_x (utente non iscritto) data: 08/02/2013 23:16:16
ciao a tutti
come mi e' sembrato di capire Filippo, nella sua richiesta era che se in cella A:A mettendo un C o V quando lui in colonna B:B immetteva un valore questi venisse trasformato in positivo o negativo , in questo caso penso che bisogna proprio ricorrere al vba() e non scrivendo una formula in C:C
la sub() che vado a esporre fa questo lavoro, da inserire nel foglio di utilizzo
V -28
C 58
V -154
V -25
C 3654
C 1245
ciao da Mister_x
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:B100")) Is Nothing Then Exit Sub
On Error Resume Next
Application.EnableEvents = False
If Target.Column = 1 Then
If UCase(Target) = "C" Then
Cells(Target.Row, 2) = Abs(Cells(Target.Row, 2))
ElseIf UCase(Target) = "V" Then
Cells(Target.Row, 2) = "-" & Cells(Target.Row, 2)
Else
Cells(Target.Row, 2) = Cells(Target.Row, 2)
End If
End If
If Target.Column = 2 Then
If UCase(Cells(Target.Row, 1)) = "C" Then
Cells(Target.Row, 2) = Abs(Cells(Target.Row, 2))
ElseIf UCase(Cells(Target.Row, 1)) = "V" Then
Cells(Target.Row, 2) = "-" & Cells(Target.Row, 2)
Else
Cells(Target.Row, 2) = Cells(Target.Row, 2)
End If
End If
Application.EnableEvents = True
End Sub |
di Riccardo (utente non iscritto) data: 09/02/2013 10:22:26
Pregevolissimo l'intervento di MisterX, ma, in mancanza di commenti dell'autore della richiesta, io prediligo le cose extra semplici, se funzionano ovviamente.
Quindi riprendendo l'intervento di Vecchio Frac suggerirei la formula:
=SE(A1="C";ASS(B1);-ASS(B1)) dove ho accolto il suggerimento semplificativo di Vecchio Frac di eliminare la inutile moltiplicazione per (-1) cambiando solo il segno del contenuto della cella in valore assoluto quale che sia il numero (positivo o negativo).
Riccardo
di Vecchio Frac data: 09/02/2013 12:19:11
Alla funzione =ASS non avevo pensato ^_^
Mi piacciono molto questi scambi, in cui non intervengono sempre i soliti (io e Harry per essere chiari).
Grazie ragazzi.
@Mister_x
Io avevo buttato giù una soluzione con VBA ma invece di If - ElseIf avevo adottato la strategia del Select Case, che mi sembra più pulita da leggere.
Mi piace meno quel
Cells(Target.Row, 2) = "-" & Cells(Target.Row, 2)
è sbagliato, se digiti -15 e poi in A digiti V la cella diventa "--15".
Devi trattarlo come numero... in fondo basta solo cambiare il segno al numero:
se Target è la cella A1, con
Target.Offset(,1) = -Target.Offset(,1)
inverto il numero, ma bisogna tener conto che se il numero è già negativo non deve diventare positivo.
La soluzione di Riccardo va bene:
Target.(Offset,1)=-Abs(Target.Offset(,1))
di Filippo_72 (utente non iscritto) data: 10/02/2013 17:52:46
Leggendovi avevo avuto il sentore che eravate dei geni! Ottima la risposta di Riccardo, ma la soluzione di Vecchio frac è perfetta!
Per cui vi rompo le scatole subito con un'altra domanda.
Abbiamo cinque fogli, FOGLIO1, ALFONSO, BERTA, CARLO, DATI.
- DATI: è un foglio di appoggio in cui ho inserito alcune costanti, che mi servono a creare un elenco a discesa; questo elenco comprende tre valori: alfonso, berta, carlo
- ALFONSO, BERTA, CARLO: sono 3 fogli; in ognuno di essi c'è una cella (le cui coordinate sono sempre uguali) il cui valore vorrei riportare in FOGLIO1; facciamo finta che la cella sia K23
- FOGLIO1: ho 2 celle rilevanti; A1 ed A2;
--- in A1 ho definito l'elenco a discesa che mi riporta i 3 valori possibili definiti in DATI;
--- in A2: è la cella in cui vorrei che venisse inserito il valore di K23, preso da ALFONSO, se nell'elenco a discesa seleziono "ALFONSO"; preso da BERTA, se nell'elenco a discesa seleziono "BERTA"; preso da CARLO se nell'elenco a discesa selezione "CARLO".
Anche qui: idee?
Premetto che ne ho provate di tutte, ma senza successo.
Ciao
Filippo
di Vecchio Frac data: 10/02/2013 18:20:37
Ciao Filippo, non siamo dei geni ma solo degli appassionati :)
Per una nuova questione sarebbe stato preferibile aprire un nuovo thread.
Comunque, visto che la soluzione mi sembra semplice, suggerisco questo metodo, che probabilmente non hai provato perchè è poco immediato:
nella cella A2 del FOGLIO1 inserisci questa formula:
=INDIRETTO(A1&"!K23")
la quale va a leggere il contenuto di una cella remota costruendo il suo riferimento da dati stringa.
di Filippo_72 (utente non iscritto) data: 11/02/2013 08:53:49
Anche questa ha funzionato perfettamente; la funzione "indiretto" mi mancava proprio
Grazie
Vuoi Approfondire?