Condividi:        

Convertire valore numerico cella con istruzione if

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Convertire valore numerico cella con istruzione if

Postdi Alessandro999 » 14/07/10 09:23

ciao a tutti :)

Vi espongo il problema che non riesco a risolvere, ovviamente per la mia scarsa capacità di creare macro :!:

in cella a1 del foglio 1 c'è un numero compreso fra 1 e 360 , vorrei che mi convertisse questo numero in un nome tramite un messaggio msgbox , in alternativa ad un' istruzione =SE......... kilometrica in una cella di excel

per precisione nella cella A1 c'è questa formula : =SE(RESTO(A1; 360)=0;360;RESTO(A1; 360)) che garantisce sempre un valore compreso fra 1 e 360

ho abbozzato questa macro mettendo dopo l'istruzione if il riferimento alla cella tramite istruzione range , ma provandola non mi mostra nessuna box

Sub converti ()

If Range("A1").Select = 1 Then MsgBox "Marco"
If Range("A1").Select = 2 Then MsgBox "Andrea"
If Range("A1").Select = 3 Then MsgBox "Massimo"

end sub


ciao , spero qualcuno vorra rispondere a questo semplice problema ...........almeno credo !
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Sponsor
 

Re: Convertire valore numerico cella con istruzione if

Postdi Flash30005 » 14/07/10 10:03

Alessandro999 ha scritto:...per precisione nella cella A1 c'è questa formula : =SE(RESTO(A1; 360)=0;360;RESTO(A1; 360)) che garantisce sempre un valore compreso fra 1 e 360

No!
Così crei solo un riferimento circolare, come fai ad avere da 1 a 360?
A1 deve contenere un qualsiasi numero e in un'altra cella potrai mettere quella formula per ottenere ciò che dici

Con questo codice
If Range("A1").Select ...
cosa vorresti avere?
Se intendi inserire la condizione che: Se A1 è selezionato allora...
non è un codice da inserire nel modulo ma nel foglio in selection.change con apposito codice

Se devi abbinare ad ogni numero (da 1 a 360) un nome devi avere una tabella composta da 360 nomi,
ce l'hai? In quale riga e colonna è posizionata la tabella?

Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Convertire valore numerico cella con istruzione if

Postdi Alessandro999 » 14/07/10 14:08

ciao Flash e grazie per l'intervento .

è perfettamente come dici tu , mentre scrivevo la domanda per fare l'esempio ho utilizzato il termine cella A1 e poi ho riportato una formula del foglio di excel senza adeguarla all' esempio , praticamente un tipico errore da allocco :oops: .

dunque scrivo tutto come sta nella realtà , così evito inesattezze dovute a sciocchi errori e vi risparmio perdite di tempo.


nella realtà la formula é

=SE(RESTO(B38; 360)=0;360;RESTO(B38; 360))

e si trova in cella F38 e si riferisce alla cella B38 , dove viene inserito dall' utente un valore numerico che poi tramite la formula viene ridotto in un valore tra 1 e 360

a ogni valore della cella F38 , vorrei assegnare un nome .

in pratica vorrei semplicemente creare un pulsante utilizzando forme e assegnare una macro che faccia comparire una msgbox che contiene il nome associato al numero della cella B38

ho creato una tabella in colonna x , comincia da x2 ( primo nome ) e finisce in x361 ( ultimo nome) , x1 è occupata dall'intestazione della colonna che ho chiamato nomi

La tabella e creata da inserisci > tabella


ora dovrebbe essere chiaro :) .
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: Convertire valore numerico cella con istruzione if

Postdi Flash30005 » 14/07/10 15:04

Inserisci questa riga di codice nel vba del foglio di lavoro (dove c'è il dato B38 che viene digitato)
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$38" Then MsgBox Range("X" & Range("F38").Value + 1).Text
End Sub

Il codice non va inserito nel Modulo.
Ogni volta che la cella B38 cambia valore apparirà il messaggio del nome che hai nella colonna "X".

Se invece vuoi attivare la macro con un pulsante o forma
crei il pulsante o forma e gli attribuisci la chiamata alla macro (InsNome) che inserirai, questa volta, in un modulo.
Macro da inserire nel modulo (più che macro è una riga di codice)
Codice: Seleziona tutto
Sub InsNome()
MsgBox Range("X" & Range("F38").Value + 1).Text
End Sub


Prova e fai sapere
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Convertire valore numerico cella con istruzione if

Postdi Alessandro999 » 14/07/10 17:32

SEMPRE PIU' MITICO

Ogni volta che si posta qualcosa sei più veloce di un missile !!! 8)

Grazie mille Flash


ciao
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: Convertire valore numerico cella con istruzione if

Postdi Alessandro999 » 14/07/10 18:04

Ho utilizzato la prima soluzione che hai posto !

Giusto per sapere ..........

Se qualcuno nella cella B38 inserisce un numero non intero o delle lettere , per evitare l'errore di run-time , tipo non corrispondente e possibile inserire qualche istruzione apposita che faccia da guardiano prima che entri in azione la macro precedente ?

ho provato utilizzando il menu dati > convalida dati ............... ma questo non evita lo svolgimento della macro.

Ovviamente è già bene così , e solo capire qualcosa in più

ciao . :)
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: Convertire valore numerico cella con istruzione if

Postdi Flash30005 » 14/07/10 21:19

devi mettere qualche controllo in più, tipo
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$38" Then
    If IsNumeric(Range("B38").Value) Then   '<<<<<<< controlla se è un numero e se sì, procede
        Valore = Int(Range("B38").Value)     '<<<< elimina i decimali
        MsgBox Range("X" & Valore + 1).Text   '<<<< riga che avevi anche prima
    End If
End If
End Sub


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Convertire valore numerico cella con istruzione if

Postdi Alessandro999 » 15/07/10 07:35

Fatto :)

ciao Flash e buona giornata !
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: Convertire valore numerico cella con istruzione if

Postdi Alessandro999 » 26/07/10 18:05

ciao flash ho notato un inconveniente , ( sono tornato ora dalle ferie per questo il ritardo )

questo è il codice inserito nel vba del foglio come da tuoi ordini.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$38" Then
If IsNumeric(Range("B38").Value) Then '<<<<<<< controlla se è un numero e se sì, procede
Valore = Int(Range("B38").Value) '<<<< elimina i decimali
MsgBox Range("X" & Valore + 1).Text '<<<< riga che avevi anche prima
End If
End If
End Sub

la riga in rosso sopra non contiene nessun riferimento alla cella f38 , vedi sotto la riga sottolineata in blu , è il codice precedente che funziona correttamente .

Nella nuova succede che quando in cella b38 c'è un numero superiore a 360 la msgbox non mostra nessun nome , presumo dipenda dal fatto che non c'è nessun riferimento alla suddetta cella f38 che è quella che contiene la formula =SE(RESTO(B38; 360)=0;360;RESTO(B38; 360))

SEGUE PRIMA VERSIONE

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$38" Then MsgBox Range("X" & Range("F38").Value + 1).Text
End Sub

P.s l'ultimo codice quello in alto l'avevi fatto per evitare l'errore di run-time qualora nella cella B 38 fosse stato inserito un numero con i decimali o lettere

Probabilmente la soluzione è una banalità , ma non riesco ad arrivarci , potresti per cortesia dare l'ultimo tocco da maestro !

ciao :)
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: Convertire valore numerico cella con istruzione if

Postdi Alessandro999 » 01/08/10 13:39

C'è qualcuno che mi può rispondere please :?:
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: Convertire valore numerico cella con istruzione if

Postdi Flash30005 » 01/08/10 17:08

Ho perso il filo del discorso e mi sforzo per capire qual è la domanda

Se ti riferisci al fatto che usando un numero superiore a 360 non ottieni nulla significa che non hai nulla nella riga N della colonna X

Ricordi che all'inizio ti dissi se avevi 360 celle piene?
ora hai N celle piene nella colonna "X"?

Oppure se vuoi rimanere all'interno dei 360 valori della formula in F38
devi modificare solo la questa riga
da così
Codice: Seleziona tutto
        Valore = Int(Range("B38").Value)

a così
Codice: Seleziona tutto
        Valore = Int(Range("F38").Value)


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Convertire valore numerico cella con istruzione if

Postdi Alessandro999 » 01/08/10 18:49

Anche se hai perso il filo del discorso hai risolto il problema , questo mi conferma un' altra volta che sei di un altro pianeta , grazie Flash , io andavo a macinare chissà quale soluzione e invece c'è l'avevo sotto il naso :)

Grazie Mille sei un Drago !!!
, buona serata !!!!!!!!!!!!!!!!!!
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: Convertire valore numerico cella con istruzione if

Postdi Flash30005 » 01/08/10 22:28

Ho solo adattato il riferimento alla cella F38 ma se non vuoi utilizzare questo "rinvio" puoi lavorare solo con la cella B38
in questa maniera
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$38" Then
    If IsNumeric(Range("B38").Value) Then
        Valore = Int(Range("B38").Value)    ' <<< rimetti il codice originale
        If Valore <> 360 Then Valore = Valore Mod 360 ' <<<< aggiungi questa riga
        MsgBox Range("X" & Valore + 1).Text   '<<<<<riga esistente
    End If
End If
End Sub


Ora la cella F38 non ha più nessun senso e puoi eliminare la formula esistente


Alessandro999 ha scritto:...questo mi conferma un' altra volta che sei di un altro pianeta ...

Tutto il genere umano potrebbe essere di un "altro pianeta" o è stato creato per un "progetto" ma, in uno o nell'altro caso, sulla terra siamo solo di passaggio perché questa non è, a mio avviso, la nostra vera dimensione.
...

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Convertire valore numerico cella con istruzione if

Postdi Alessandro999 » 02/08/10 11:40

Ciao Flash :)

Speriamo ci sia davvero un' altra dimensione , altrimenti :cry:


Uno ha detto ......non mi ricordo chi " Non importa da dove veniamo , ma dove stiamo andando !" .......... la seconda parte mi fa pensare più della prima :-?

INCONVENIENTE

Ho provato anche la nuova soluzione , molto più bella , solo che mi presenta il seguente problema :

Con i numeri inseriti in cella B38 che vanno fino a 360 non c'è nessun problema perchè viene mostrato nella msgbox il corrispettivo nome giusto , ma dopo questo limite tutto funziona bene tranne per i multipli di 360 , cioè 720 , 1080 , 1440 ...etc , in questi casi la msgbox non mostra l'ultimo valore della tabella , ma stranamente mostra il nome dell' intestazione della tabella contenuto in x1, mentre il range della tabella va ovviamente da x2 ( primo nome ) fino a x361( ultimo nome ) essendo chiaramente la prima cella quella che contiene l' intestazione della tabella .

riepilogando

il valore 360 funziona bene , restituisce in msgbox il nome contenuto in cella x361 , mentre se in cella B38 si inserisce 720 , 1080 , 1440 ,1800 restituiscono il contenuto della cella x1

ho provato a variare Valore +1 ma mi sono reso conto che non è questa la soluzione.


se hai tempo di rispondere grazie mille!

Ciao :)
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: Convertire valore numerico cella con istruzione if

Postdi Flash30005 » 02/08/10 12:29

Mannaggia la fretta!
E' proprio così! :-?
la condizone prevedeva solo se "valore" fosse stato diverso da 360 quindi non doveva intervenire con 360 ma interveniva con i sui multipli e fornendo zero (+1) prendeva la prima riga della colonna X che era vuota.

Ora rimediamo subito modificando due righe ;)

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$38" Then
    If IsNumeric(Range("B38").Value) Then
        Valore = Int(Range("B38").Value)
        Valore = Valore Mod 360    '<<<< riga modificata
        If Valore = 0 Then Valore = 360 '<<<< riga modificata
        MsgBox Range("X" & Valore + 1).Text
    End If
End If
End Sub


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Convertire valore numerico cella con istruzione if

Postdi Alessandro999 » 02/08/10 13:12

Grazieeee Flash mitico velocista scarlatto :)

http://www.youtube.com/watch?v=4YG_WWZYqUs

a proposito ...........per caso ho visto questo video su Youtube e sono rimasto a bocca aperta :eeh: , non pensavo che con excel si potessero fare cose del genere.


ciao :D
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: Convertire valore numerico cella con istruzione if

Postdi Flash30005 » 02/08/10 13:52

Alessandro999 ha scritto:...
http://www.youtube.com/watch?v=4YG_WWZYqUs

a proposito ...........per caso ho visto questo video su Youtube e sono rimasto a bocca aperta :eeh: , non pensavo che con excel si potessero fare cose del genere.


Disegni così, no! :eeh:
ma layout con possibilità di movimento degli "oggetti", si! ;)
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Convertire valore numerico cella con istruzione if

Postdi Alessandro999 » 02/08/10 14:23

:) eh si ! fra un pò excel sarà in grado anche di fare il caffè :lol: , poi arriverà un bel giorno che c'è lo installeranno in testa e diventeremo cavalieri Jedi :o

ciao Flash e grazie ancora del tuo supporto :D
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia


Torna a Applicazioni Office Windows


Topic correlati a "Convertire valore numerico cella con istruzione if":

BTp Valore
Autore: MarioLombardi
Forum: Forum off-topic
Risposte: 2

Chi c’è in linea

Visitano il forum: Ricky0185 e 45 ospiti