Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

separare nomi e cognomi doppi

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

separare nomi e cognomi doppi

Postdi matzap » 06/08/13 15:47

eccomi ancora qui a chiedere il vostro aiuto.

questa volta però non so proprio come fare,non è solo una questione di codice:

ho una colonna con una serie di nomi e cognomi, nomi doppi o cognomi doppi o entrambi:

Matteo De Simone
Angelo Prosperi
Maria Luisa Rossi
Antonio Giulio Di Franceschi
Marco Della Casa

dovrei saparare i nomi dai cognomi!!!
Avevo pensato di analizzare parola per parola e contare le lettere. se la parola ha meno di tre lettere allora essa stessa e tutte le seguenti vanno nel cognome. Perderei pero i vari dello, e dell'
se imposto meno 5 lettere, si rischia che nomi come Maria o Luisa vanno nei cognomi.
Dovrei perciò dire oltre alle numero di lettere, che la parola deve essere diversa da "dello o della o Dell'" ecc.

da dove potrei cominciare?

Forse sto abusando della vostra pazienza!! :?:

grazie
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Sponsor
 

Re: separare nomi e cognomi doppi

Postdi Anthony47 » 06/08/13 15:56

Guarda questa discussione: viewtopic.php?p=420412
Si "sbozza" il lavoro facendo Testo in colonna, poi con la Sub Assiema si riassembano quelle parti che, analizzate da un umano, devono esere riunite perche' fanno parte di Cognome o di Nome.

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: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: separare nomi e cognomi doppi

Postdi matzap » 07/08/13 15:28

in pratica non c'è una regola.
io ho in mente un sistema n(per nomi e cognomi) che dovrebbe limitare il lavoro manuale
ma ho bisogno come sempre del vostro aiuto.
dovrei contare le parole di una cella, e poi poter selezionare ad una ad una quella desiderata indicata come prima, seconda, ecc.
per poterla analizzare
cio che vorrei fare è:


se numpar=2 allora parola1 in colonna 1, parola2 in colonna 2
se numpar=3 allora:
se iniziale_parola2="d" e lunghezza_parola2<5 allora parola1 in colonna 1, parola2 & parola3 in colonna 2
altrimenti parola1&parola2 in colonna 1, parola3in colonna 2
se numpar=4 allora:
se iniziale_parola2="d" e lunghezza_parola2<5 allora parola1 in colonna 1, parola2 & parola3 & parola4 in colonna 2
atrimenti
se iniziale_parola3="d" e lunghezza_parola3<5 allore parola1 & parola2 in colonna 1, parola3 & parola4 in colonna 2

in questo modo, PER I NOMI E COGNOMI ITALIANI, dovrei riuscire a separare correttamente tutti cognomi composti che iniziano per d( cioè i vari "di, della, degli, ecc." ) e i nomi composti.
che ne dite?
c'è una macro "conta_parole"? e un modo per numerarle?

ciao
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: separare nomi e cognomi doppi

Postdi Anthony47 » 07/08/13 23:25

Ti do' un paio di mattoncini da comporre...
Puoi contare le parole con istruzioni del tipo
Codice: Seleziona tutto
mySplit = Split(Cells(2, 1).Value, " ")    'Considera che le parole siano separate da SPAZIO
numpar=UBound(mySplit,1)+1

Nella matrice che rimane nella variabile mySplit, le singole parole sono accessibili come
mySplit(0), mySplit(1), etc


Puoi contare la lunghezza in caratteri di ogni parola usando ad esempio
Codice: Seleziona tutto
WordLen=Len(mySplit(J))


Comunque siamo qua.

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: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: separare nomi e cognomi doppi

Postdi matzap » 09/08/13 10:24

Allora, sono riuscito a creare una macro che funziona abbastanza bene per i nomi italiani.
in pratica per le anagrafiche da tre parole in poi, se la seconda parola inizia per D ed è minore di sei lettere, la inserisce nel cognome, altrimenti la cerca in una tabella e e se non la trova la inserisce nel nome, se la trova nel cognome. se l'anagrafica è di tre parole si ferma, se è di 4 e la terza parola va nel nome, analizza allo stesso modo la terza parola.

commenti:
1) potrei avere problemi con nomi composti la cui seconda parola è Davide ed è la prima parola del cognome o con David se è un secondo nome.
2) la tabella per gestire i casi particolari contiene solo la prima parola del cognome. si potrebbe migliorare aggiungendo la seconda parola del cognome che viene cercata solo se si trova la prima.
3) forse nel codice ci sono troppe ripetizioni che potrebbero essere snellite..... aspetto suggerimenti!
4) non trovo una macro per ordinare da A a Z una colonna di lunghezza sempre diversa espandendo l'ordine a tutta la tabella, mi aiutate?
posto il codice:
Codice: Seleziona tutto
Sub dividi_nomi_cognomi()
Dim numpar As Integer
Dim x,y,i, r, m, n, o, p As Integer
y = Application.WorksheetFunction.CountA(Sheets("Report").Range("A:A")) + 1
r = Application.WorksheetFunction.CountA(Sheets("Gestione").Range("H:H"))
m = ActiveCell.Column
n = m + 1
o = m + 2
p = m + 3

For x = 3 To y
If Len(Cells(x, m)) = 0 Then Exit For
    numpar = Len(Cells(x, m)) - Len(Replace(Cells(x, m), " ", "", 1)) + 1
    If numpar = 2 Then
        Cells(x, m).Select
        Selection.TextToColumns , DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
    Else
        If numpar = 3 Then
        Cells(x, m).Select
        Selection.TextToColumns , DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
                If Left(Cells(x, n), 1) = "D" And Len(Cells(x, n)) < 6 Then
                Cells(x, n) = Cells(x, n) & " " & Cells(x, o)
            Else
                For i = 2 To r
                    If Sheets("Gestione").Range("H" & i).Value = Cells(x, n) Then
                        Cells(x, n) = Cells(x, n) & " " & Cells(x, o)
                        Exit For
                    Else
                       Cells(x, m) = Cells(x, m) & " " & Cells(x, n)
                        Cells(x, n) = Cells(x, o)
                        Exit For
                    End If
                Next i
            End If
    Else
         If numpar = 4 Then
            Cells(x, m).Select
            Selection.TextToColumns , DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:=True
                If Left(Cells(x, n), 1) = "D" And Len(Cells(x, n)) < 6 Then
                Cells(x, n) = Cells(x, n) & " " & Cells(x, o) & " " & Cells(x, p)
            Else
                For i = 2 To r
                    If Sheets("Gestione").Range("H" & i).Value = Cells(x, n) Then
                        Cells(x, n) = Cells(x, n) & " " & Cells(x, o) & " " & Cells(x, p)
                        Exit For
                    Else
                        If Left(Cells(x, o), 1) = "D" And Len(Cells(x, o)) < 6 Then
                        Cells(x, m) = Cells(x, m) & " " & Cells(x, m)
                        Cells(x, n) = Cells(x, o) & " " & Cells(x, p)
                        Exit For
                    Else
                        If Sheets("Gestione").Range("H" & i).Value = Cells(x, o) Then
                        Cells(x, m) = Cells(x, m) & " " & Cells(x, n)
                        Cells(x, n) = Cells(x, o) & " " & Cells(x, p)
                        Exit For
                    Else
                        Cells(x, m) = Cells(x, m) & " " & Cells(x, n) & " " & Cells(x, o)
                        Cells(x, n) = Cells(x, p)
                        Exit For
                    End If
                    End If
                    End If
                Next i
                    End If
                End If
         End If
    End If
Next x

Cells(3, m).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Cells(3, 2).Select
ActiveSheet.Paste
Cells(3, n).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Cells(3, 1).Select
ActiveSheet.Paste

Cells(1, p).EntireColumn.Select
    Selection.Delete Shift:=xlToLeft
Cells(1, o).EntireColumn.Select
    Selection.Delete Shift:=xlToLeft
Cells(1, n).EntireColumn.Select
    Selection.Delete Shift:=xlToLeft
Cells(1, m).EntireColumn.Select
    Selection.Delete Shift:=xlToLeft
Cells.EntireColumn.AutoFit
'Application.Run "ordina"
End Sub

--------------------

Ciao
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: separare nomi e cognomi doppi

Postdi Anthony47 » 10/08/13 00:23

Scondo me ti stai complicando la vita con pochi vantaggi...
Immaginando che le stringhe con 2 parole siano correttamente compilate con Nome /Cognome, facendo Testo in colonne queste le sistemi tutte. Quante sono? Circa il 90% del totale
Il rimanente 10% costituiscono il tuo problema.
Capisco che ti sembra facile sistemare i De Luise, Dal Lago, Della Pepa, se hanno un solo Nome; ma cosi' facendo incasinerai la situazione di tutti gli altri che hanno doppio cognome, e dei vari Antonio Dino Baralle, Luigi Actis Dato, Matteo Lo Monaco e non poche altre combinazioni.
Se il tuo risultato puo' contenere errori, allora qualsiasi approssimazione va bene; ma se deve essere priva di errori allora "un umano" dovra' sempre esaminare il risultato e correggere le situazioni residue e le aggregazioni eventualmente errate (che nel frattempo sono diventate piu' difficili da identificare), non avendo altri strumenti che l' occhio e la ragione.

Oltre a quanto gia' suggerito (testo in colonne, poi macro per riaggregare quanto separato erroneamente), penso che potrebbe anche funzionare un meccanismo per cui l' umano di turno:
-ha l' evidenza delle sole celle che contengono piu' di due parole (quelle con due sono per definizione Nome e Cognome, se i dati originali sono attendibili)
-puo' impostare nella colonna adiacente se i nomi sono 1, 2, 3, etc (tre dita sul tastierino numerico, uno sulla freccia in giu')
Poi una macro suddividera' le stringhe in funzione di quanto scritto dall' utente.

Se tu avessi a disposizione altri dati, tipo il Codice fiscale, si potrebbe pensare a un lavoro scientifico che darebbe un risultato esatto con alto livello di precisione.

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: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: separare nomi e cognomi doppi

Postdi matzap » 26/08/13 11:31

sono daccordo con te, però poichè io ricevo dei report da diverse fonti esterne e che i dati spesso sono sempre gli stessi, a meno di uno o due cognomi, posso fare una rima organizzazione e gestire poi i nuovi nome che non possono essre gestiti automaticamente. non è una procedura priva di errore, ma mi facilità il lavoro.

ciao
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27


Torna a Applicazioni Office Windows


Topic correlati a "separare nomi e cognomi doppi":


Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti