Condividi:        

[Excel] Cella da formato TESTO a 2 celle formato NUMERICO

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

[Excel] Cella da formato TESTO a 2 celle formato NUMERICO

Postdi sbyggy » 22/10/06 11:50

Devo creare una formula capace di ottenere da una cella(A) in formato testo, 2 nuove celle(B) e (C) in formato numerico, composte dai due numeri contenuti nella parte finale della prima cella(A).

Esempio:

Cella(A) in formato testo: STOCK 16/220 9999.9*8888.8

Risultato che voglio ottenere:

Cella(B) in formato numerico: 9999.9
Cella(C) in formato numerico: 8888.8

Lo scopo è di poter utilizzare i valori contenuti nelle nuove celle (A) e (B) con ulteriori formule matematiche.
sbyggy
Utente Junior
 
Post: 38
Iscritto il: 22/10/06 11:10

Sponsor
 

Postdi Anthony47 » 23/10/06 00:08

Ciao sbyggy e benvenuto.
Devo creare una formula capace di ottenere da una cella(A) in formato testo, 2 nuove celle(B) e (C) in formato numerico etc etc

immagino che volevi chiedere un aiutino in merito, no?

Se vuoi farlo con solo formule fai cosi':
-In A2 hai la tua stringa;
-In B2 usi la formula
Codice: Seleziona tutto
=SOSTITUISCI(A2;SINISTRA(A2;CERCA(15^2;TROVA(" ";A2;RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(A2)))))-1);"")

-In C2, per il primo risultato, e in D2 per il secondo risultato userai
Codice: Seleziona tutto
=ANNULLA.SPAZI(SINISTRA(B2;TROVA("*";B2)-1))+0
=ANNULLA.SPAZI(DESTRA(B2;TROVA("*";B2)-2))+0

Il metodo usa B2 come cella di transito; se B2 e' occupata metti in altra colonna libera e cambia diconseguenza le formule successive.

SE, come penso, il tuo separatore decimale e' la virgola, mentre vedo che i numeri di partenza hanno il punto, dovrai usare la funzione SOSTITUISCI; quindi le formule di C2 e D2 diventano
Codice: Seleziona tutto
C2 =SOSTITUISCI(ANNULLA.SPAZI(SINISTRA(B2;TROVA("*";B2)-1));".";",")+0
D2 =SOSTITUISCI(ANNULLA.SPAZI(DESTRA(B2;TROVA("*";B2)-2));".";",")+0


Un sistema alternativo, meno sofferto e' via vba:
1) Apri il vba editor e scrivi il seguente codice sul foglio Modulo1 (se non c' e' nessun modulo, o se non ne vedi, fai Inserisci ->Modulo e ne metti uno):
Codice: Seleziona tutto
Function Ant4Sby(strinp As String, FlaPS As Boolean) As Double
SLun = Len(strinp)
If SLun = 0 Then GoTo Usci
For I = SLun To 1 Step -1
SChar = Mid(strinp, I, 1)
If SChar = " " Then GoTo Usci
If SChar <> "*" Then
 If Fla1 = 0 Then
  Str0 = SChar & Str0
  Else: Str1 = SChar & Str1
 End If
End If
If SChar = "*" Then Fla1 = 1
Next I
Usci:
If FlaPS = False Then
Ant4Sby = Str0
Else: Ant4Sby = Str1
End If
End Function


In C2 (primo termine) e D2 (secondo termine) usi le formule
Codice: Seleziona tutto
C2 =Ant4sby(A2;0)
D2 =Ant4sby(A2;1)


Con la soluzione Vba avresti problemi se nella tua stringa di origine i separatori decimali fossero la virgola, perche' sarebbero interpretati come separatori di migliaia e trascurati nella conversione.

Per stasera e' tutto, facci sapere.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi sbyggy » 23/10/06 08:59

Ciao anthony, questa è proprio il tipo di risposta che speravo di avere, anzi forse anche più :-) .... in giornata la provo e ti faccio sapere.... per ora intanto un GRANDISSSSSSSSSSSIMO G R A Z I E !!!
sbyggy
Utente Junior
 
Post: 38
Iscritto il: 22/10/06 11:10

Postdi Anthony47 » 23/10/06 12:58

questa è proprio il tipo di risposta che speravo di avere, anzi forse anche più :-)
E' una caratteristica di questo forum, siamo troppo generosi....

Ne approfitto per darti una formula piu' semplice (e piu' logica) per B2:
Codice: Seleziona tutto
B2 =STRINGA.ESTRAI(A2;CERCA(15^2;TROVA(" ";A2;RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(A2)))));99)


Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi sbyggy » 24/10/06 12:50

Tutto OK, le formule sono una bomba ;)

Ho solo avuto un problema iniziale, in quanto mi sono accorto che la stringa di testo possiede alla fine dei caratteri vuoti, esattamente l'intera stringa risulta avere lunghezza fissa di 36 caratteri, siano essi pieni o vuoti(cioè spazi). Quindi dopo le cifre 9999.9*8888.8 mi occorre eliminare gli spazi vuoti rimanenti, tale n° di spazi è variabile in funzione di quanto sia lunga la descrizione iniziale della stringa.
Come dovrei modificare la seconda versione della formula di B2 ?
B2 =STRINGA.ESTRAI(A2;CERCA(15^2;TROVA(" ";A2;RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(A2)))));99)

P.S.: ormai ci sono, quindi approfitto per chiedere un altra esigenza non prevista, e cioè dovrei estrarre in formato numerico anche la parte di stringa "16/220" in modo da poter avere come cifra, anche il risultato della divisione tra il n° 16 e il n° 220.
sbyggy
Utente Junior
 
Post: 38
Iscritto il: 22/10/06 11:10

Postdi Anthony47 » 24/10/06 15:02

Un algoritmo, ottenuto con formule o con vba, deve basarsi su punti fermi; quali sono i punti fermi del tuo problema?
Esempio:
-c' e' sempre un asterisco tra i due temini che vuoi estrarre, e c' e' sempre un asterisco nelle stringhe di partenza? 1 e 1 solo?
-idem per la barra (/)
-non e' che nella stringa ogni campo ha la una larghezza fissa?

Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi sbyggy » 24/10/06 15:32

Hai perfettamente ragione, ho dato per scontate delle cose che invece non lo sono !

- Dunque nella stringa iniziale che ti ho mostrato, la lunghezza totale è fissa a 36 caratteri e cioè:
"STOCK 16/220 9999.9*8888.8 " la ottengo importando i dati da un file .TXT

- la stringa è sempre costituita dai tre blocchi:
1) STOCK ---> il testo può variare in lunghezza e contenuto
2) 16/220 ---> esiste sempre il simbolo "/" tra i 2 numeri
3) 9999.9*8888.8 ---> esiste sempre il simbolo "*" tra i 2 numeri

- tra i 3 blocchi appena descritti esiste sempre e solo uno spazio che li separa

- la lunghezza dei 3 campi è variabile

Adesso forse si capisce un pò meglio spero !!
sbyggy
Utente Junior
 
Post: 38
Iscritto il: 22/10/06 11:10

Postdi Anthony47 » 24/10/06 19:24

Nel nuovo, e alquanto diverso scenario, buttiamo tutto della vecchia soluzione e facciamo cosi':
-In A2 hai la tua stringa tipo STOCK 16/220 9999.9*8888.8 ;
-In B2 usi la formula
Codice: Seleziona tutto
=SINISTRA(A2;CERCA(15^2;TROVA("/";A2;RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(A2))))))

-In C2, per il primo risultato (16), e in D2 per il secondo (220), in E2 per il terzo (9999,9) e in F2 per il quarto risultato (8888,8) userai in sequenza:
=STRINGA.ESTRAI(B2;CERCA(15^2;TROVA(" ";B2;RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(B2)))))+1;LUNGHEZZA(B2)-CERCA(15^2;TROVA(" ";B2;RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(B2)))))-1)+0
=SINISTRA(SOSTITUISCI(A2;B2;"");TROVA(" ";SOSTITUISCI(A2;B2;""))-1)+0
=SOSTITUISCI(STRINGA.ESTRAI(SOSTITUISCI(A2;B2;"");TROVA(" ";SOSTITUISCI(A2;B2;""))+1;TROVA("*";SOSTITUISCI(A2;B2;""))-TROVA(" ";SOSTITUISCI(A2;B2;""))-1);".";",")+0
=SOSTITUISCI(STRINGA.ESTRAI(SOSTITUISCI(A2;B2;"");TROVA("*";SOSTITUISCI(A2;B2;""))+1;99);".";",")+0

Mi raccomando, la prossima volta esponi TUTTO il problema, rifare il compito e' un inutile sciupio di tempo.

Tra l' altro, comincio a pensare che il problema dovrebbe essere risolto a monte (chi prepara il file txt potrebbe farlo in un formato importabile da excel, esempio Csv).

Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi sbyggy » 24/10/06 20:05

Anthony47 ha scritto:Nel nuovo, e alquanto diverso scenario, buttiamo tutto della vecchia soluzione e facciamo cosi':
-In A2 hai la tua stringa tipo STOCK 16/220 9999.9*8888.8 ;
-In B2 usi la formula
Codice: Seleziona tutto
=SINISTRA(A2;CERCA(15^2;TROVA("/";A2;RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(A2))))))

-In C2, per il primo risultato (16), e in D2 per il secondo (220), in E2 per il terzo (9999,9) e in F2 per il quarto risultato (8888,8) userai in sequenza:
=STRINGA.ESTRAI(B2;CERCA(15^2;TROVA(" ";B2;RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(B2)))))+1;LUNGHEZZA(B2)-CERCA(15^2;TROVA(" ";B2;RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(B2)))))-1)+0
=SINISTRA(SOSTITUISCI(A2;B2;"");TROVA(" ";SOSTITUISCI(A2;B2;""))-1)+0
=SOSTITUISCI(STRINGA.ESTRAI(SOSTITUISCI(A2;B2;"");TROVA(" ";SOSTITUISCI(A2;B2;""))+1;TROVA("*";SOSTITUISCI(A2;B2;""))-TROVA(" ";SOSTITUISCI(A2;B2;""))-1);".";",")+0
=SOSTITUISCI(STRINGA.ESTRAI(SOSTITUISCI(A2;B2;"");TROVA("*";SOSTITUISCI(A2;B2;""))+1;99);".";",")+0
FORMULE PERFETTAMENTE FUNZIONANTI AL 1° COLPO, COMPLIMENTI !!

Mi raccomando, la prossima volta esponi TUTTO il problema, rifare il compito e' un inutile sciupio di tempo.
DEVO RIDARTI RAGIONE, PURTROPPO IL DIFETTO DEGLI SPAZI FINALI L'HO NOTATO SOLO APPLICANDO LA TUA PRECEDENTE FORMULA.
MENTRE LA SECONDA RICHIESTA MI E' STATA COMUNICATA MENTRE CI HAI DATO MODO DI SBLOCCARE LA SITUAZIONE.


Tra l' altro, comincio a pensare che il problema dovrebbe essere risolto a monte (chi prepara il file txt potrebbe farlo in un formato importabile da excel, esempio Csv).
SAREBBE MOLTO BELLO, MA I DATI MI PERVENGONO DA UNA DITTA IL CUI SOFTWARE E' ABILITATO A ESPORTARE SOLO IN .TXT

Ciao,

TROVERO' IL MODO PER SDEBITARMI !!
NON PENSARE DI PRENDERTI SOLO LA GLORIA ;-)
sbyggy
Utente Junior
 
Post: 38
Iscritto il: 22/10/06 11:10

Re: [Excel] Cella da formato TESTO a 2 celle formato NUMERICO

Postdi walkimi » 15/05/08 14:44

scusate se riesumo questo post, mi son trovato di fronte a una problematica simile ma non sono riuscito ad adattare le formule. in pratica ho una colonna dove sono inserite delle numerazioni civiche nel formato :

145/12

dovrei separare i due campi in base al caratte "/" tenendo presente che sia la parte a sinistra che quella a destra hanno lunghezza variabile e che non sempre c'è la barra (ma quest'ultimo è un problema da poco)...

grazie per l'eventuale aiuto, intanto continuo a studiarmela un po'...
walkimi
Utente Junior
 
Post: 24
Iscritto il: 13/02/06 15:34

Re: [Excel] Cella da formato TESTO a 2 celle formato NUMERICO

Postdi Anthony47 » 15/05/08 22:13

Probabilmente e' sufficiente un "Testo in colonna":
-selezioni le celle che vuoi convertire (che abbiano o non abbiano la "/")
-Menu /Dati /Testo in colonne
-scegli Delimitati, Avanti; spunti Altro e nello spazio adiacente inserisci /
-completi con Fine

Se invece vuoi farlo con formule:
-supponiamo che il dato da convertire sia in A2;
-per il primo numero usi in B2 la formula
Codice: Seleziona tutto
=SINISTRA(A2;SE(VAL.ERRORE(TROVA("/";A2));99;TROVA("/";A2)-1))

-per il secondo numero (se presente) usi in C2
Codice: Seleziona tutto
=DESTRA(A2;SE(VAL.ERRORE(TROVA("/";A2));0;LUNGHEZZA(A2)-TROVA("/";A2)))

-poi copi le formule nelle righe sottostanti, che abbiano o no la /

Fa quello che intendevi?
Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Cella da formato TESTO a 2 celle formato NUMERICO

Postdi walkimi » 16/05/08 08:05

grande, come al solito puntualissimi.
fatto tutto con testo in colonna che non mi ricordavo dove fosse..... :oops:
anche le altre formule che mi hai scritto funzionano, adesso vedo di studiarmele un po' per capire come funzionano.
grazie ancora,
Giacomo
walkimi
Utente Junior
 
Post: 24
Iscritto il: 13/02/06 15:34


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Cella da formato TESTO a 2 celle formato NUMERICO":


Chi c’è in linea

Visitano il forum: Nessuno e 55 ospiti

cron