Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel] Separare parole in una cella

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] Separare parole in una cella

Postdi jioppino » 03/08/06 19:51

salve una cosa semplice allora in una collona avrei questo dato
napoli via roma 53 bene io dovrei mettere citta indirizzo e civico in tre colonne diverse siccome le righe potrebbero anche essere mille in media 300/400 vorrei sapere se esiste un metodo migliore del copia incolla
jioppino
Newbie
 
Post: 1
Iscritto il: 03/08/06 19:49

Sponsor
 

Postdi Anthony47 » 04/08/06 00:03

Non e’ cosi’ semplice perche’ non c’ e’ nessuna regola fissa che si puo’ applicare: la citta’ puo’ essere 1 parola (Napoli), 2 (Torre Annunziata), 3 (Torre del Greco), 4 (San Giorgio a Cremano), forse anche 5; l’ indirizzo idem; e nemmeno il numero in realta’ e’ sempre un numero (es 55/B, o manca).
Detto questo, io partirei tramite il “Testo in colonna”: Selezioni le celle che contengono i tuoi dati, poi Menu ->Dati ->Testo in colonna; in step 1 spunti “delimitati”, in step 2 spunti “Spazio” quale delimitatore, in step 3 non scegli niente; dai “Fine”. Questo mette, nel tuo esempio, Napoli-Via-Roma-53 in 4 colonne (la corrente piu’ 3 a dx; cosi’ come metterebbe San-Giorgio-a-Cremano-Viale-dei-Gelsomini-131 in 8 colonne.
Certo, se tra i vari campi ci fosse un separatore univoco la cosa sarebbe piu’ semplice, perche’ in questo caso il “Testo in colonna” ti fornisce gia’ i risultati voluti; fai quindi un controllo con chi ti passa i dati.

Dopo il “Testo in colonna”, molte situazioni sono gia’ Ok, le altre vanno editate a mano, con l’ aiuto di una macro che fa l’ opposto del “Testo in colonna”, cioe’ prende da N colonne e raggruppa la stringa in una sola, poi elimina le colonne “svuotate”; nell’ esempio di S.Giorgio a Cremano, in pratica, dopo aver fatto “Testo in colonna”, selezioni le celle che contengono San Giorgio a Cremano (4 celle) e fai partire la macro; poi selezioni dei Gelsomini (2 celle) e idem; a questo punto rimani con 4 colonne: San Giorgio a Cremano, Viale, dei Gelsomini, 131.

Per la macro:
-attivi il Vba Editor tramite Alt-F11
-se nella finestra di progetto (il frame a sx in alto, dove compare il tuo file con i suoi N fogli) non compare una “cartella” Moduli, crea un Modulo (tramite Menu ->Inserisci ->Modulo) e incolla nella parte vuota e bianca di Dx la seguente macro:

Codice: Seleziona tutto
Sub Assiema()
SCOL = Selection.Columns.Count
For Each c In Selection
AA = AA & " " & c.Value
c.Value = ""
Next c
Selection.Range("A1").Select
Selection.Value = LTrim(AA)
Selection.Offset(0, 1).Select
For I = 1 To SCOL - 1
    Selection.Delete Shift:=xlToLeft
Next I
End Sub


-se invece c’ e’ gia’, sotto i tuoi fogli, una cartelletta Moduli, aprila, seleziona Modulo1, e incolla la macro.
-torna su Excel, Menu ->Strumenti ->Macro ->Macro; seleziona la macro “Assiema”, premi “Opzioni”, e nella finestrella che si apre inserisci G (maiuscolo, non g) nella voce “Tasto di scelta rapida”; chiudi la finestra “Macro” con x. In questo modo la macro partira’ pigiando i tasti Contr-Maiusc-G, rendendone l’ utilizzo piu’ semplice.

Praticamente:
-esegui le istruzioni per la conversione “Testo in colonne”
-inserisci la macro e setti l’ opzione Contr-Maiusc-G
-seleziona celle che devono essere ri-aggruppate e dai Contr-Maiusc-G per far partire la macro
-continua cosi’ per tutte le situazioni da normalizzare.

Al momento non mi e’ venuto in mente nessuna idea piu’ brillante; ripeto solo quel “Certo, se tra i vari campi ci fosse un separatore univoco la cosa sarebbe piu’ semplice” gia’ detto prima.

Facci sapere come procede…
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi cassioli » 07/08/06 13:15

Anthony47 ha scritto:Non e’ cosi’ semplice [...]Certo, se tra i vari campi ci fosse un separatore univoco la cosa sarebbe piu’ semplice” gia’ detto prima.

Si potrebbe usare "VIA" o "PIAZZA" come primo separatore, mentre via e numero sono distinguibili perche' il numero... è un numero! ;-)
cassioli
Utente Senior
 
Post: 1014
Iscritto il: 05/03/04 11:02

Postdi Alexsandra » 07/08/06 13:22

Puoi usare come separatore lo spazio tra le parole,dando per scontato che la prima parte di stringa è la città poi la via e poi il numero.
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi Anthony47 » 07/08/06 23:46

Per Cassioli:
Veramente ci sono delle varianti, quali: Via, V., Viale, V.le, Vico, Vicoletto, Vicolo, Vico cieco, Corso, C.so, Piazza, P.za, P. , Piazzale, P.le, Strada, S.da, Stradale, Stradone, Str.le, Statale, Largo, L.go, Contrada, C.da, Cascina, Salita, Discesa, Interrato, Cortile, Corte, Corticella, Lungomare, Lungopo, lungodora, lungotevere, lungarno, lungadige (.. etc..), Calle, Baluardo, Contrafforte, Fondamenta, Volto; a Venezia certi indirizzi sono senza preambolo: es. Santa Croce, Dorsoduro, Cannaregio, etc.

E poi: 55/b e’ un numero?

Per ambedue:
Come la separiamo certi indirizzi quali: Via San Giovan Giuseppe Della Croce, Via Martini Simone detto Memmi, Via San Salvatore Corte Regia, Via Santa Maria in Chiavica?
E infine il quesito della Siusi: quale regola potra’ mai essere usata per separate San Martino Buon Albergo Vicolo Monsignor Egidio Peroni 12/b?

Comunque la soluzione proposta utilizzava lo “spazio” per fare un primo sgrossamento (diciamo l’ 80%?); poi la macro serviva per fare in modo selettivo il “Column to text” (cioe’ l’ opposto del text to column) e ricostruire il rimanente 20%.

Insomma, “Certo, se tra i vari campi ci fosse un separatore univoco la cosa sarebbe piu’ semplice”.

O no??

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi cassioli » 08/08/06 10:58

Anthony47 ha scritto:Per Cassioli:
Veramente ci sono delle varianti, quali:

ok, ok, mi arrendo; in questo caso, ci sono due soluzioni possibili:
- un sistema di intelligenza artificiale in grado di distinguere dal contesto qual è il nome della località e quale quello della via... :roll:
- un operatore umano che aggiunge a mano i separatori dove servono
cassioli
Utente Senior
 
Post: 1014
Iscritto il: 05/03/04 11:02

Postdi Alexsandra » 08/08/06 12:47

Napoli V.le delle rose antiche unte di olio bruciato 73/b

1) Conti la lunghezza della stringa
2) Estrai la stringa a Sx(Left) fino allo spazio e conti i caratteri (città)
3) Prendi la lunghezza stringa e leggila da Dx(Right) fino allo spazio e conti i caratteri (N° civico)
4) Riprendi la lunghezza stringa e togli da Right il n° caratteri del punto 3 e da Left il n° caratteri del punto 2 quello che resta è l'indirizzo.

Potrebbe essere fattibile?

Dai butta giù una macro così Antony che quando torno dalla spiaggia me la guardo :lol: :lol: :lol:
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi cassioli » 08/08/06 13:10

Alex, l'unico vero problema sono le città con piu' parole (Torre del Greco o simili): se non esistessero, il primo e l'ultimo spazio farebbero da separatori!
cassioli
Utente Senior
 
Post: 1014
Iscritto il: 05/03/04 11:02

Postdi Anthony47 » 08/08/06 15:06

Nessuno lavora sul quesito della Siusi: "quale regola potra’ mai essere usata per separate San Martino Buon Albergo Vicolo Monsignor Egidio Peroni 12/b? " (e' un indirizzo vero, mentre a Napoli V.le delle rose antiche unte di olio bruciato non esiste, e se esistesse sarebbe snc e non 73/b)

Ma poi, la prima soluzione che avevo postata e' cosi' squallida?

Notate che avendo a disposizione l' elenco ufficiale dei comuni italiani (nel senso che ce l' ho) si potrebbe partire facendo la ricerca del comune, che semplificherebbe grandemente il problema, risolvendo comunque delle complicazioni legate all' esistenza contemporanea di comuni quali "Ferrara" e "Ferrara di Monte Baldo"; ma non sapendo l' origine (e quindi la precisione) dei dati in possesso di jioppino credo che sarebbe un lavoro poco utile.
In questa dotta discussione, tra l' altro, manca appunto jioppino che potrebbe dare qualche chiarimento sia sull' efficacia di quanto propostogli sui sugli altri quesiti che ci poniamo.

Ciao, vado al mare...
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Alexsandra » 08/08/06 19:53

cassioli ha scritto:Alex, l'unico vero problema sono le città con piu' parole (Torre del Greco o simili): se non esistessero, il primo e l'ultimo spazio farebbero da separatori!
Hai ragione
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Favoloso!!

Postdi Aless{a}ndro » 19/06/08 09:39

Anthony47 ha scritto:...io partirei tramite il “Testo in colonna”...

grazie 1000 Anthony! Stamattina mi è arrivato un ordine con 226 Anagrafiche incollate in foglio di Word. :eeh:
la tua macro mi è stata di grandissimo aiuto!

magari ci fosse un qualcosa in grado di separare un indirizzo in piu celle in modo automatico.
purtroppo l'anagrafica che ho dovuto gestire io non aveva nessun separatore da poter sfruttare!

grazie!
Avatar utente
Aless{a}ndro
Utente Junior
 
Post: 25
Iscritto il: 19/06/08 09:21
Località: web/htdocs/home

Tipico Indirizzo Balordo!

Postdi Aless{a}ndro » 19/06/08 09:44

mi capitano spesso indirizzi di sto genere:
V.LE PALMIRO TOGLIATTI, 2 C/O C.COMM. CINECITTA' DUE (PRIMO LIVELLO - LOC.22) 00175 ROMA RM

oppure
PIAZZA SANTO STEFANO, 10 15033 CASALE MONFERRATO AL

tutte le volte è un delirio!
Avatar utente
Aless{a}ndro
Utente Junior
 
Post: 25
Iscritto il: 19/06/08 09:21
Località: web/htdocs/home

Re: [Excel] Separare parole in una cella

Postdi Anthony47 » 19/06/08 12:05

Ciao Alessandro e benvenuto nel forum.
Purtroppo chi pensa a fare queste anagrafiche non pensa mai a chi le deve ..disfare.
Resisti!
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Separare parole in una cella

Postdi Aless{a}ndro » 14/07/08 18:29

Anthony47 ha scritto:Ciao Alessandro e benvenuto nel forum.

grazie del benvenuto, sono di nuovo alle prese con un file disgustoso pieno di spazi, virgole a caso ecc....

tramite la tua macro "assiema" mi risparmio un sacco di tempo.
vorrei chiederti se puoi modificarla in modo da interagire con piu righe alla volta.

mi trovo un file con 100 righe, siccome non c'è nessun delimitatore utilizzo lo spazio per separare le celle (in questo modo do una prima sgrossata al file).
dato che su 100, almeno una 70ina ha il formato di indirizzo classico "via pippo 1 28100 Milano MI" mi servirebbe una macro "assiema" che possa assiemare tutte le 70 righe selezionate, così in una botta sola raggruppo quelle e poi a mano una alla volta uso la macro "assiema" monoriga per le restanti 30.

adesso se provo a selezionare 70 righe e uso la macro che hai postato mi ritrovo una sola cella in A1 con tutti i record assiemati dentro. spero di essermi fatto capire e spero sia possibile variare la macro perchè mi aiuterebbe e mi farebbe risparmiare un sacco di tempo (e accidenti).

ciao, grazie 1000
Avatar utente
Aless{a}ndro
Utente Junior
 
Post: 25
Iscritto il: 19/06/08 09:21
Località: web/htdocs/home

Re: [Excel] Separare parole in una cella

Postdi Anthony47 » 14/07/08 23:31

alessandro ha scritto:dato che su 100, almeno una 70ina ha il formato di indirizzo classico "via pippo 1 28100 Milano MI" mi servirebbe una macro "assiema" che possa assiemare tutte le 70 righe selezionate, così in una botta sola raggruppo quelle e poi a mano una alla volta uso la macro "assiema" monoriga per le restanti 30

Non capisco: le stringhe vengono "spalmate" su piu' celle tramite un comando "Testo in colonna" applicato su tutte le righe dei tuoi dati, poi la macro serve a recuperare gli errori di suddivisione, riassemmando quelle celle che devono rimanere unite (es Torre /del /Greco in Torre del Greco).
Insomma non dovresti mai avere bisogno di applicare la macro su 70 righe contigue, ma sulle rimanenti 30 sparse qua e la'.
Che cosa mi sfugge?

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Separare parole in una cella

Postdi Aless{a}ndro » 15/07/08 06:49

mmm forse sono io che sbaglio. ecco un esempio: diciamo un file di 3 righe:

- via | marconi | 30
- via | nenni | 40
- via | garibaldi | 50

se seleziono le 3 righe e eseguo la macro mi risulta una sola riga con all'interno:

- via marconi 30 via nenni 40 via garibaldi 50

invece io vorrei ottenere sempre le 3 righe, ma assiemate per riga, cioè:

- via marconi 30
- via nenni 40
- via garibaldi 50

per ottenere questo al momento seleziono una riga alla volta ed eseguo la macro, quindi in questo caso la eseguo 3 volte. sono io che capisco male?
ciao
Avatar utente
Aless{a}ndro
Utente Junior
 
Post: 25
Iscritto il: 19/06/08 09:21
Località: web/htdocs/home

Re: [Excel] Separare parole in una cella

Postdi Anthony47 » 15/07/08 14:17

Allora, la discussione verte su come splittare delle stringhe in celle separate; quindi il punto di partenza sono "stringhe" contenenti l' insieme dei campi di un indirizzo, es:
via marconi 30
viale dei caduti 35
via nenni 40
via garibaldi 50
via martiri di otranto 36
via monsignor zola 15
Queste stringhe in origine sono su un unica cella; poi vengono splittate con il comando Testo in colonna, e con i dati detti sopra otterremmo:
via | marconi | 30
viale | dei | caduti | 35
via | nenni | 40
via | garibaldi | 50
via | martiri | di | otranto | 36
via | monsignor | zola | 15
(il simbolo "|" e' usato per indicare il separatore di colonna)

La macro "Assiema" puo' aiutare a creare campi corretti, ad esempio questi al posto dei dati precedenti:
viale | dei caduti | 35
via | martiri di otranto | 36
via | monsignor zola | 15
Proprio per l' aleatorieta' delle situazioni, la macro lavora su una riga selezionata alla volta; addirittura potresti doverla lanciare piu' volte sulla stessa riga, ad esempio (forse non e' il tuo caso) prima per "assiemare" la via (es monsignor zola) e poi per assiemare la citta' (Torre del Greco).

Tu da che dati parti, e che dati vuoi ottenere? Quasi mi sembra che devi fare l' opposto

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Separare parole in una cella

Postdi Aless{a}ndro » 15/07/08 18:26

Ciao Anthony, dunque stando all'esempio che hai fatto tu:

via marconi 30
viale dei caduti 35
via nenni 40
via garibaldi 50
via martiri di otranto 36
via monsignor zola 15

abbiamo 2 righe simili consecutive, cioè:

via nenni 40
via garibaldi 50

in questo caso io vorrei evitare di selezionare ed assiemare una riga per volta, vorrei invece selezionare le 2 righe e assiemarle contemporaneamente.

su un file di 100 righe capita spesso che ci siano 10/20/30 righe simili consecutive che potrei assiemare contemporaneamente anzichè una per una.

spero di essermi fatto capire. ciao e grazie di nuovo
Avatar utente
Aless{a}ndro
Utente Junior
 
Post: 25
Iscritto il: 19/06/08 09:21
Località: web/htdocs/home

Re: [Excel] Separare parole in una cella

Postdi Anthony47 » 15/07/08 23:05

Ancora non ho capito se quello che stai facendo e' la cosa piu' logica, comunque la risposta al tuo quesito e' una nuova macro che in un ciclo For each /Next richiama la macro Assiema.

Penso che questa vada bene:
Codice: Seleziona tutto
Sub pippo()
StCol = Selection.Column
LenCol = Selection.Columns.Count
StRow = Selection.Row
LenRow = Selection.Rows.Count
'
Range(Cells(StRow, StCol), Cells(StRow + LenRow - 1, StCol)).Select
For Each Riga In Selection
Range(Riga, Cells(Riga.Row, StCol + LenCol - 1)).Select
Call Assiema
Next Riga
End Sub


Ciao.

Selezioni le celle da assiemare sulle righe omogenee, lanci la nuova macro, che richiamera' tante volte la vecchia macro.

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Separare parole in una cella

Postdi Aless{a}ndro » 16/07/08 08:21

Ciao Anthony, probabilmente non interpreto la logica migliore nella risoluzione di questo problema. Con la nuova macro che mi hai fatto però riesco a sistemare velocemente i file che mi inviano.
ti faccio sapere!

in ogni caso prima di trovare questo 3D impiegavo 10 volte il tempo che impiego ora, con le macro che hai postato. poi se qualcuno trova un software della madonna che fa tutto da solo ancora meglio!!! :P

alla prossima
Avatar utente
Aless{a}ndro
Utente Junior
 
Post: 25
Iscritto il: 19/06/08 09:21
Località: web/htdocs/home


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Separare parole in una cella":


Chi c’è in linea

Visitano il forum: Nessuno e 9 ospiti