Condividi:        

dividi 2 nomi in celle diverse

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

dividi 2 nomi in celle diverse

Postdi trittico69 » 20/11/11 19:20

devo dividere in Excel un testo inserito in una cella formato da due parole e porle in due celle separate con un unica formula che contenga anche
=ANNULLA.SPAZI(MAIUSC
trittico69
Utente Senior
 
Post: 497
Iscritto il: 16/08/09 18:41

Sponsor
 

Re: dividi 2 nomi in celle diverse

Postdi Flash30005 » 20/11/11 20:32

Ponendo in A1 la stringa con i due nomi,
in B1 inserisci questa formula
Codice: Seleziona tutto
=MAIUSC(STRINGA.ESTRAI(A1;1;TROVA(" ";A1;1)-1))


in C1 questa
Codice: Seleziona tutto
=MAIUSC(STRINGA.ESTRAI(A1;TROVA(" ";A1;1)+1;LUNGHEZZA(A1)))


Trascini verso il basso fino dove occorre

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: dividi 2 nomi in celle diverse

Postdi Anthony47 » 20/11/11 20:40

Le forrmule proposte da Flash vanno bene se non ci sono spazi spuri, che invece (vista la richiesta di usare Annulla.spazi) penso ci siano.
Quindi io suggerisco, per la prima parola:
Codice: Seleziona tutto
=MAIUSC(SINISTRA(ANNULLA.SPAZI(A1);TROVA(" ";ANNULLA.SPAZI(A1))-1))

per la seconda:
Codice: Seleziona tutto
=MAIUSC(ANNULLA.SPAZI(SOSTITUISCI(A1;A2;"";1)))


Ho immaginato che la stringa iniziale sia in A1, la prima parola in A2 e la terza in A3.
Nella prima formula ho usato Sinistra (invece di Stringa.estrai) perche' e' piu' diretta per lo scopo, e nella seconda Sostituisci per avere un risultato che sia logicamente pari a "tutta la stringa iniziale meno la prima parola".

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

Re: dividi 2 nomi in celle diverse

Postdi trittico69 » 20/11/11 23:58

chiedo scusa non ho specificato che i nomi uniti si trovano in un foglio chiamato "B"...come va modificata la formula?
trittico69
Utente Senior
 
Post: 497
Iscritto il: 16/08/09 18:41

Re: dividi 2 nomi in celle diverse

Postdi Anthony47 » 21/11/11 00:18

Rispettivamente:
Codice: Seleziona tutto
=MAIUSC(SINISTRA(ANNULLA.SPAZI(B!A1);TROVA(" ";ANNULLA.SPAZI(B!A1))-1))

Codice: Seleziona tutto
=MAIUSC(ANNULLA.SPAZI(SOSTITUISCI(MAIUSC(B!A1);A2;"";1)))


La stringa originale e' in foglio B cella A1; la prima parola e' calcolata in A2, la seconda in A3 del foglio corrente.

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

Re: dividi 2 nomi in celle diverse

Postdi trittico69 » 21/11/11 08:47

ok..e si può fare che se il testo è composto da 2 parole, la prima va in a1 e la seconda in b1...se composto da 3 parole, le prime due vanno in a1 e la terza in b1...se composto da più di 3, metà va in a1 e l'altra metà in b1..grazie!
trittico69
Utente Senior
 
Post: 497
Iscritto il: 16/08/09 18:41

Re: dividi 2 nomi in celle diverse

Postdi trittico69 » 21/11/11 11:36

trittico69 ha scritto:ok..e si può fare che se il testo è composto da 2 parole, la prima va in a1 e la seconda in b1...se composto da 3 parole, le prime due vanno in a1 e la terza in b1...se composto da più di 3, metà va in a1 e l'altra metà in b1..grazie!

e ancora o notato che se la cella a1 del foglio B è vuota mi da la scritta VALORE nella cella dov'è la formula...si puo fare ceh resti vuota senza la scritta VALORE?
trittico69
Utente Senior
 
Post: 497
Iscritto il: 16/08/09 18:41

Re: dividi 2 nomi in celle diverse

Postdi Anthony47 » 21/11/11 12:25

o notato che se la cella a1 del foglio B è vuota mi da la scritta VALORE nella cella dov'è la formula...si puo fare ceh resti vuota senza la scritta VALORE?
Vedi la funzione TRITT descritta piu' avanti

Se stai cercando di separare nomi da cognomi allora mi permetto di dire che in questo modo non vai lontano, perche' nessuna logica ti consentira' di gestire gian giacomo deluca, giacomo de luca, gian giacomo de luca o gian luca cordero di montezemolo (per rimanere sui piu' frequenti).
Se parli di una lista di nominativi, allora il mio suggerimento e' che cominci mettendo ogni parola in una cella separata e poi esaminare visivamente il risultato per aggregare le celle che invece devono stare insieme.
In questo modo hai circa ' 80% gia' sistemato al primo giro e dovrai sistemare il rimanente 20%.
Come avevo suggerito, con relativa macro, qui: viewtopic.php?p=418085

Se vuoi realizzare la logica che hai descritto puoi usare questa macro:
Codice: Seleziona tutto
Function tritt12(ByVal StartV, SeqN) As String
Dim MyTritt, newW As String, I As Integer, Blanks As Integer
Dim My1
For I = 1 To Len(StartV)
    If Mid(StartV, I, 1) = " " And flacrt Then
        newW = newW & Mid(StartV, I, 1): flacrt = False
    Else
        If Mid(StartV, I, 1) <> " " Then _
            newW = newW & Mid(StartV, I, 1): flacrt = True
    End If
Next I
MyTritt = Split(Trim(newW), " ")
If (SeqN) > 2 Then
    tritt12 = ""
    Else:
    Select Case UBound(MyTritt, 1)
    Case 0 To 1
    If SeqN = 1 Then My1 = Array(0) Else My1 = Array(1)
    Case 2
    If SeqN = 1 Then My1 = Array(0, 1) Else My1 = Array(2)
    Case 3
    If SeqN = 1 Then My1 = Array(0, 1) Else My1 = Array(2, 3)
    Case 4
    If SeqN = 1 Then My1 = Array(0, 1, 2) Else My1 = Array(3, 4)
    Case 5
    If SeqN = 1 Then My1 = Array(0, 1, 2) Else My1 = Array(3, 4, 5)
    Case 6
    If SeqN = 1 Then My1 = Array(0, 1, 2, 3) Else My1 = Array(4, 5, 6)
    Case 7
    If SeqN = 1 Then My1 = Array(0, 1, 2, 3) Else My1 = Array(4, 5, 6, 7)
    End Select
   
    For I = LBound(My1, 1) To UBound(My1, 1)
    tritt12 = tritt12 & " " & MyTritt(My1(I))
    Next I
    tritt12 = Trim(tritt12)
End If
End Function

Poi userai
Codice: Seleziona tutto
=tritt12(B!A1;1)
per ottenere la prima parte e
Codice: Seleziona tutto
=tritt12(B!A1;2)
per la seconda parte; gestisce max 8 parole, se questo limite non e' sufficiente ma il numero max da gestire e' inferiore a 10-15 si puo' allungare il select case; se invece il numero da gestire e' superiore a 15 sara' piu' facile rivedere la logica oggi inclusa nella Select case.

Questa macro (TRITT) invece ti puo' aiutare a inserire ogni singola parola in una cella, anche in sostituzione delle formule date ieri:
Codice: Seleziona tutto
Function tritt(ByVal StartV, SeqN) As String
Dim MyTritt, newW As String, I As Integer, Blanks As Integer
For I = 1 To Len(StartV)
    If Mid(StartV, I, 1) = " " And flacrt Then
        newW = newW & Mid(StartV, I, 1): flacrt = False
    Else
        If Mid(StartV, I, 1) <> " " Then _
            newW = newW & Mid(StartV, I, 1): flacrt = True
    End If
Next I
MyTritt = Split(Trim(newW), " ")
If (SeqN - 1) > UBound(MyTritt, 1) Then
    tritt = ""
Else: tritt = MyTritt(SeqN - 1)
End If
End Function
Poi scriverai
Codice: Seleziona tutto
=tritt(B!A1;1)
per ottenere la prima parola, oppure
Codice: Seleziona tutto
=tritt(B!A1;2)
per la seconda, e cosi' via per altre possibili parole; se il valore richiesto (es la 5° parola) non esiste viene restituito "vuoto".

Con riferimento alla discussione che ti ho linkato prima, potresti usare questa ultima macro per mettere ogni parola in una cella e poi usare la macro descritta in quella discussione (Sub Assiema) per raggruppare secondo la bisogna.

Spero di non averti confuso oltre le mie intenzioni...

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

Re: dividi 2 nomi in celle diverse

Postdi trittico69 » 21/11/11 13:27

è che mi piacciono più le formule...
non ci capisco niente con le macro dove vanno messe ecc...
comunque penso che si possa fare una formula che
tolga gli spazi
trasformi in maiuscolo
non faccia visualizzare "valore" se la cella è vuota
se sono due nomi separarli in due celle
se sono tre metter i primo due nella prima cella e il terzo nella seconda
se sono 4 nomi mettere 2 nella prima e 2 nella seconda
se sono 5 mettere 3 nella prima e 2 nella seconda
se sono 6 mettere 3 nella prima e tre nella seconda
se sono 7 mettere 4 nella prima e 3 nella seconda
questo perchè ci sono nominativi stranieri che hanno numerosi nomi..
spero che qualcuno riesca a farlo con la formula...
grazie...
trittico69
Utente Senior
 
Post: 497
Iscritto il: 16/08/09 18:41

Re: dividi 2 nomi in celle diverse

Postdi Anthony47 » 21/11/11 19:47

è che mi piacciono più le formule...
A me invece piace non complicarsi la vita... :D :D

Tornando a quanto ti ho descritto sopra:
-partendo dal foglio excel, premi At-F11 per aprire l ' editor delle macro
-Menu /Inserisci /Modulo
-copia il codice della macro Function tritt12(ByVal StartV, SeqN) As String e incollalo nel frame vuoto di dx
-torna sul foglio excel e scrivi le formule
Codice: Seleziona tutto
=tritt12(B!A1;1)
=tritt12(B!A1;2)


That's all.

Le formule che ti ho dato rispondono alle regole excel per quanto riguarda i parametri, quindi "B!A1" indica Foglio B cella A1; se la copi in verticale diventera' "B!A2".

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

Re: dividi 2 nomi in celle diverse

Postdi Anthony47 » 22/11/11 14:22

Posto una versione aggiornata del codice, che gestisce un numero illimitato di parole:
Codice: Seleziona tutto
Function tritt123(ByVal StartV, SeqN) As String
Dim MyTritt, newW As String, I As Integer, Blanks As Integer
Dim My1
For I = 1 To Len(StartV)
    If Mid(StartV, I, 1) = " " And flacrt Then
        newW = newW & Mid(StartV, I, 1): flacrt = False
    Else
        If Mid(StartV, I, 1) <> " " Then _
            newW = newW & Mid(StartV, I, 1): flacrt = True
    End If
Next I
'
MyTritt = Split(UCase(Trim(newW)), " ")
If SeqN > 2 Then
    tritt123 = ""
Else:
    FirstIt = Int((UBound(MyTritt, 1) + 1) / 2) + ((UBound(MyTritt, 1) + 1) Mod 2) - 1
    For I = 0 To UBound(MyTritt, 1)
        If I <= FirstIt Then
            trittW1 = trittW1 & " " & MyTritt(I)
        Else: trittW2 = trittW2 & " " & MyTritt(I)
        End If
    Next I
    '
    If SeqN = 1 Then
        tritt123 = Trim(trittW1)
    Else: tritt123 = Trim(trittW2)
    End If
End If
End Function

L' ho chiamata tritt123, quindi le formule vanno aggiornate:
Codice: Seleziona tutto
=tritt123(B!A1;1)
=tritt123(B!A1;2)
B!A1 indicano l' indirizzo della cella da splittare, inserisci l' indirizzo reale dei tuoi dati.

Con questa igor rimane IGOR in qualsiasi situazione.

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

Re: dividi 2 nomi in celle diverse

Postdi trittico69 » 22/11/11 15:47

ho risolto con queste due formule
Codice: Seleziona tutto
=MAIUSC(SE(B!A1="";"";SINISTRA(B!A1;RICERCA("@";SOSTITUISCI(B!A1;" ";"@";INT((LUNGHEZZA(B!A1)-LUNGHEZZA(SOSTITUISCI(B!A1;" ";""))+2)/2)))-1)))

=MAIUSC(SE(A1="";"";STRINGA.ESTRAI(B!A1;RICERCA("@";SOSTITUISCI(B!A1;" ";"@";INT((LUNGHEZZA(B!A1)-LUNGHEZZA(SOSTITUISCI(B!A1;" ";""))+2)/2)))+1;LUNGHEZZA(B!A1))))


grazie!
trittico69
Utente Senior
 
Post: 497
Iscritto il: 16/08/09 18:41

Re: dividi 2 nomi in celle diverse

Postdi Anthony47 » 22/11/11 19:46

Algoritmo semplice ma ingegnoso, anche se le formule non restituiscono esattamente il valore che avevi richiesto in presenza di spazi spuri; complimenti all' autore.
Una piccola semplificazione puoi farla sostituendo la seconda formula con questa
Codice: Seleziona tutto
=SOSTITUISCI(MAIUSC(B!A1);B1;"")
se B1 e' il contenuto della prima formula

Alla prossima, nel frattempo studia le possibilita' offerte dalle macro come da vari suggerimenti ricevuti.

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

Re: dividi 2 nomi in celle diverse

Postdi trittico69 » 22/11/11 22:31

ho sostituito aggiuto annulla spazi e va bene...mi spieghi cosa sono spazi spuri?
trittico69
Utente Senior
 
Post: 497
Iscritto il: 16/08/09 18:41

Re: dividi 2 nomi in celle diverse

Postdi Anthony47 » 22/11/11 22:36

Per "spazi spuri" intendo spazi superflui tra le parole; quelli che togli con Annulla.spazi.

Ciao, alla prossima.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: dividi 2 nomi in celle diverse

Postdi trittico69 » 22/11/11 22:44

pensavo togliesse gli spazi sola ad inizio cella
trittico69
Utente Senior
 
Post: 497
Iscritto il: 16/08/09 18:41

Re: dividi 2 nomi in celle diverse

Postdi Flash30005 » 22/11/11 22:48

Sentite se vogliamo giocare a battaglia navale basta dire
C1 -> colpito
B8 -> affondato
ma da questo a
trittico69 ha scritto:ho risolto con queste due formule

che non risolve quanto richiesto (vedi titolo topic) beh!
devo rimarcare che, anche se "perdiamo tempo" a risolvere i problemi degli altri, qui, non stiamo giocando!
Inoltre questa formula è errata

trittico69 ha scritto:=MAIUSC(SE(A1="";"";STRINGA.ESTRAI(B!A1;RICERCA("@";SOSTITUISCI(B!A1;" ";"@";INT((LUNGHEZZA(B!A1)-LUNGHEZZA(SOSTITUISCI(B!A1;" ";""))+2)/2)))+1;LUNGHEZZA(B!A1))))[/code]


Perché non richiama il foglio B! nel primo passo di A1
la formula corretta è
Codice: Seleziona tutto
=MAIUSC(SE(B!A1="";"";STRINGA.ESTRAI(B!A1;RICERCA("@";SOSTITUISCI(B!A1;" ";"@";INT((LUNGHEZZA(B!A1)-LUNGHEZZA(SOSTITUISCI(B!A1;" ";""))+2)/2)))+1;LUNGHEZZA(B!A1)))


Ma come dice bene Anthony la seconda è facilmente e intelligentemente sotituibile con quanto da lui postato
con sotituisci
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: dividi 2 nomi in celle diverse

Postdi Anthony47 » 22/11/11 23:08

Devi leggere piu' spesso l' help on line, ti spiega tutto!
Per ottenere la divisione corretta anche in caso di spazi spuri dovresti pero' inserire ANNULLA.SPAZI su ogni richiamo di B!A1; questo non sara' possibile sulle versioni excel2003 e inferiori perche' la formula supererebbe i 7 livelli di subordinazione max possibile. Lo puoi fare solo se rinunci al MAIUSC, ottenendo cosi' la formula
Codice: Seleziona tutto
=SE(ANNULLA.SPAZI(B!A1)="";"";SINISTRA(ANNULLA.SPAZI(ANNULLA.SPAZI(B!A1));RICERCA("@";SOSTITUISCI(ANNULLA.SPAZI(B!A1);" ";"@";INT((LUNGHEZZA(ANNULLA.SPAZI(B!A1))-LUNGHEZZA(SOSTITUISCI(ANNULLA.SPAZI(B!A1);" ";""))+2)/2)))-1))

Il settimo livello di subordinazione e' raggiunto con l' ultimo ANNULLA.SPAZI(B!A1); ci fosse ancora MAIUSC sarebbe l' ottavo.
Con excel2007 e 2010 questo limite e' stato superato.

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

Re: dividi 2 nomi in celle diverse

Postdi trittico69 » 22/11/11 23:09

flash mi dispiace che tu l'abbia presa cosi....ma non capisco perchè dici che non risolve il mio problema...fa quello che ho chiesto....
trittico69
Utente Senior
 
Post: 497
Iscritto il: 16/08/09 18:41

Re: dividi 2 nomi in celle diverse

Postdi Anthony47 » 22/11/11 23:14

Penso che trittico sappia che cosa gli serve; se le formule gli danno un risultato soddisfacente l' argomento dovrebbe essere chiuso.
Personalmente sono convinto che in questo tema qualsiasi soluzione avrebbe fatto una sgrossatura della selezione; trattandosi di "nomi" e "cognomi" solo un occhio esperto riuscira' davvero ad aggiustare il 20% che non e' aggiustabile ne' dalle formule ne' da una macro.

Per trittico: vedi mio messaggio precedente, solo ad uso didattico.

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


Torna a Applicazioni Office Windows


Topic correlati a "dividi 2 nomi in celle diverse":


Chi c’è in linea

Visitano il forum: Nessuno e 39 ospiti