| STRINGHE di ENZO |
AVREI UN QUESITO DA SOTTOPORVI: SE IN UNA CELLA
EXCEL, ES A1 HO UN INDIRIZZO CON UN NUMERO CIVICO COME POSSO
ESTRARRE IL NUMERO CIVICO OSSIA ELIMINARLO DALLA CELLA A1 E
SPOSTARLO IN UN ALTRA CELLA ES. B1 HO PROVATO CON STRINGAESTRAI
MA NON ME LA ELIMINA FISICAMENTE DALLA PRIMA CELLA PONENDO LA
DOMANDA IN UN ALTRO MODO: DATO UN ELENCO DI INDIRIZZI POSTI IN
A1 A2 A3 ETC CHE MACRO POSSO COSTRUIRE AFFINCHE DA QUESTE CELLE
VENGANO TOLTI I NUMERI CIVICI E POSTI NELLE CELLE ADIACENTI B1 B2 B3
ETC GRAZIE |
|
| di Apoben64 |
Ciao Enzo, per quanto attiene da una parte del tuo
quesito posto che in A1 hai : Viale Europa 36 , in B2 per estrarre
il 36, digiti la formula =DESTRA(A1;2), dove "2" sono i caratteri
che ti servono.
|
|
| di Mauro |
Potresti crearti una routine in vba che partendo da
dx scansioni byte x byte estrae i numeri e li pone su una stringa
mentre il resto in un'altra. Nella sezione sintassi c'è un paragrafo
che tratta le funzioni di manipolazione delle stringhe in VB.
Dovrebbero bastarti le funzioni: Mid(), Len() e l'operatore
IsNumeric. Se hai voglia provaci, poi fammi sapere!
Probabilmente, con un po' di ingegno, c'è il modo di farlo anche
con le formule di excel, senza chiamare in gioco VBA. |
|
| di ENZO |
CARO MAURO HO PROVATO CON QUELLO CHE MI HAI DETTO
TU. ES IN A1 HO "VIA PIPPO 2" CON LA ROUTINE A =
Len(Range("A1.Value) Range("B" & I).Select
ActiveCell.Value = A OTTENGO IN B1 LA LUNGHEZZA DELLA MIA
STRINGA NON CAPISCO COME POSSO UTILIZZARE LE FUNZIONI MID E IS
NUMERIC CON MID ESTRAGGO DA UNA STRINGA QUELLO CHE VOGLIO MA
DEVO INDICARGLI DA CHE POSIZIONE PARTIRE QUANTI BYTE E COSA ESTRARRE
CON ISNUMERIC OTTENGO VERO O FALSO SE LA STRINGA CONTIENE SOLO
NUMERI O SOLO LETTERE MA SE ES HO INDIRIZZI CON NUMERI CIVICI
DIVERSI COME POSSO FARE ES VIA AAA 5 VIA AAA 55 TU MI PARLAVI DI
ANALIZZARE DA DESTRA UNA STRINGA BYTE PER BYTE MA COME FACCIO A
FARGLI RICONOSCERE I NUMERI ED ESTRARLI ME PUOI THANKS
|
|
| di mauro |
... ma si va, giusto xchè 6 tu...
VarIni =
"via Ugo Foscolo 3210" LVarIni = Len(VarIni) For I = LVarIni
To 0 Step -1 If Not IsNumeric(Mid(VarIni, I, 1)) Then Exit
For End If Next MsgBox Mid(VarIni, 1, I) MsgBox
Mid(VarIni, I + 1, LVarIni)
problema è se hai un numero
civico 31/B. |
|
| di ENZO |
TI RINGRAZIO SEI STATO VERAMENTE MOLTO GENTILE
PS. INFATTI IL PROBLEMA SI PONE SE IL NUMERO CIVICO E' 3/B |
|
| di enzo |
| caro mauro ma secondo te non c'e' il modo di
baypassare la lettera del numero civico, considerando che il blocco
del numero civico si distacca dall'indirizzo con degli spazi? |
|
| di Mauro |
Puoi provare a mettere un altro ciclo in testa ke
testi sempre byte x byte ma ke questa volta esca x isnumeric. e
quindi estrarre la coda alfabetica della stringa. Devi essere sicuro
però ke ci sia il numero civico, se no tagli fuori tutto. Ad
ogni modo adesso gli strumenti ci sono tutti, basta metterci solo un
po' di logica ed il gioco è fatto. Fammi sapere! A
presto. |
|
| di ENZO |
GRAZIE MAURO PER IL TUO INTERVENTO ORA NON MI
CHIAMARE ROMPISCATOLE MA AVREI UN ALTRO QUESITO AVENDO UN
INDIRIZZO DEL TIPO 88 AVENUE XXXX HO MODIFICATO LA TUA ROUTINE
COSI VarIni = "88 AVENUE XXXX" LVarIni = Len(VarIni) For
I = 1 TO LVarIni Step 1 If Not IsNumeric(Mid(VarIni, I, 1)) Then
Exit For End If Next MsgBox Mid(VarIni, 1, I)
MsgBox Mid(VarIni, I + 1, LVarIni)
IL PROBLEMA E' CHE MI
ESTRAE IL NUMERO CIVICO PARTENDO DA DESTRA MA IPOTIZZANDO CHE
L'INDIRIZZO NON ABBIA IL NUMERO CIVICO, NEL PRIMO CASO LASCIAVA
BLANK MENTRE ADESSO MI ESTRARE LO STESSO IL NUMERO CIVICO
ESEMPIO VarIni = "AVENUE XXXX" LVarIni = Len(VarIni)
For I = 1 TO LVarIni Step 1 If Not IsNumeric(Mid(VarIni, I,
1)) Then Exit For End If Next MsgBox Mid(VarIni, 1,
I) MsgBox Mid(VarIni, I + 1, LVarIni) NELLA PRIMA MSGBOX HO
A NELLA SECONDA VENUE XXXX DOVE SBAGLIO??
|
|
| di Mauro |
Sai ke io vi aiuto volentieri se poi partecipate
attivamente (e nn solo passivamente) al forum. Prova con:
VarIni = " AVENUE XXXX" LVarIni = Len(VarIni) For I
= 1 To LVarIni Step 1 If Not IsNumeric(Mid(VarIni, I, 1)) Then
Exit For End If Next 'se I = 1 vuol dire ke non c'è
numero civico 'quindi muovo zero su I If I = 1 Then I =
0 End If MsgBox Mid(VarIni, 1, I) MsgBox Mid(VarIni, I +
1, LVarIni) |
|
| di ENZO |
TI RINGRAZIO MA C'E' UN PROBLEMA LA ROUTINE
COSI' VA BENE MA SE L'INDIRIZZO DIVENTA 888 AVENUE XXX, 888 NON
VIENE ESTRATTO IN POCHE PAROLE IO DESIDEREREI CHE LA ROUTINE CHE
MI AVEVI SUGGERITO INIZIALMENTE PER ESTRARRE I NUMERI CIVICI
PARTENDO DA DESTRA FUNZIONASSE ANCHE PARTENDO CON I NUMERI CIVICI DA
SINISTRA GRAZIE PER L'INTERESSAMENTO
|
|
| di Mauro |
| A questo punto le casistiche si sprecano, sta a te
vedere le problematiche e cercare di risolvere secondo le tue
esigenze. Forza so ke ce la puoi fare! |