Pieter ha molte celle nella colonna A che contengono testo. In particolare, le celle contengono diverse frasi di testo ciascuna. Vorrebbe suddividere le frasi in singole celle. Sa di poter utilizzare lo strumento Testo in colonne, ma non è del tutto utile, poiché le frasi possono terminare con punteggiatura diversa e alcuni segni di punteggiatura possono essere utilizzati nel mezzo di una frase. (Come un punto dopo un titolo come Mr. o Ms.) Pieter si chiede se c’è un modo migliore per dividere le frasi in celle diverse.

Per eseguire questa operazione manualmente, ci sono un paio di modi in cui puoi procedere.

Innanzitutto, potresti utilizzare una colonna helper per lavorare con i tuoi dati. Ad esempio, potresti inserire questa formula nella cella B1:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"Mr.", "Mr#"), "Mrs.", "Mrs#"), "Ms.", "Ms#")

Quindi, copia la formula in tutte le celle necessarie. Ciò che si ottiene è che i titoli comuni (Mr., Mrs. e Ms.) vengono sostituiti con una sequenza unica di caratteri (Mr #, Mrs # e Ms #). Copia i risultati della colonna B di nuovo nella colonna B come valori (in modo che la formula venga rimossa), quindi usa Testo in colonne sulla colonna B. Infine, usa Trova e sostituisci per cambiare tutte le istanze del carattere # in un punto.

Lo svantaggio di questo è che la formula tiene conto solo di tre usi comuni del periodo, in cui potrebbe essere necessario gestirne alcuni di più. Ad esempio, le tue frasi potrebbero avere titoli come Dr. o indicatori di credenziali come Ph.D. o Esq. L’elenco di tali abbreviazioni cariche di periodo potrebbe diventare piuttosto lungo. In quei casi, potresti apportare manualmente le modifiche in questo modo:

  1. Usa Trova e sostituisci per cercare tutti i punti nel testo, sostituendo i punti senza fine di frase con il carattere marcatore (# nella tecnica sopra).

  2. Usa lo strumento Testo in colonne per dividere le frasi.

  3. Usa Trova e sostituisci per riportare tutte le istanze del carattere marcatore in un punto.

Di nuovo, se hai molti periodi senza fine di frase, questo processo potrebbe richiedere un po ‘di tempo per essere completato.

Naturalmente, questi approcci trattano ciò che è effettivamente un argomento complesso.

La vera domanda è come si definisce una frase? In inglese, ci sono solo tre segni di punteggiatura che terminano una frase: un punto, un punto esclamativo e un punto interrogativo. Ci sono tuttavia variazioni ed eccezioni a questo. Ad esempio, una frase potrebbe terminare con una virgoletta, ma quella virgoletta avrà sempre uno dei tre segni di punteggiatura finali davanti ad essa. Inoltre, un punto potrebbe essere utilizzato per contrassegnare un’abbreviazione, come già notato.

Se inizi a utilizzare Trova e sostituisci per gestire tutti questi segni di punteggiatura ed eccezioni, puoi imbatterti rapidamente in una serie contorta di passaggi. È molto meglio provare a fare la divisione usando una macro. Eccone uno che gestirà correttamente la maggior parte delle frasi e delle abbreviazioni:

Sub SplitSentences()

Dim c As Range     Dim sException(8) As String     Dim sReplacement(8) As String     Dim sTerm(6) As String     Dim sTemp As String     Dim J As Integer     Dim sExp As Variant

' These are the valid ways for a sentence to end     sTerm(1) = ". "

sTerm(2) = "! "

sTerm(3) = "? "

sTerm(4) = "." & Chr(34)

sTerm(5) = "!" & Chr(34)

sTerm(6) = "?" & Chr(34)



' These are the exceptions to the rule     ' of a period ending a sentence     sException(1) = "Mr."

sException(2) = "Mrs."

sException(3) = "Ms."

sException(4) = "Dr."

sException(5) = "Esq."

sException(6) = "Ph.D."

sException(7) = "a.m."

sException(8) = "p.m."



' Set up the replacements for the exceptions     For J = 1 To 8         sReplacement(J) = Replace(sException(J), ".", "[{}]")

Next J

For Each c In Selection         sTemp = c.Value

' Convert all the exceptions         For J = 1 To 8             sTemp = Replace(sTemp, sException(J), sReplacement(J))

Next J

' Demarcate sentences with a tab         For J = 1 To 6             sTemp = Replace(sTemp, sTerm(J), Trim(sTerm(J)) & Chr(9))

Next J

' Split sentences into an array         sExp = Split(sTemp, Chr(9))

For J = 0 To UBound(sExp)

' Replace the code for valid periods             sExp(J) = Replace(sExp(J), "[{}]", ".")

' Place sentences into adjacent cells on row             c.Offset(0, J).Value = Trim(sExp(J))

Next J     Next c End Sub

Notare che le terminazioni accettabili delle frasi sono annotate nell’array sTerm e le abbreviazioni accettabili sono nell’array sException. Se il tuo testo potrebbe avere altre abbreviazioni, allora ti consigliamo di espandere l’array sException per includerle.

La macro passa attraverso le celle che hai selezionato e sostituisce tutte le eccezioni accettabili. Quindi sostituisce tutte le terminazioni di frase accettabili con quella terminazione seguita da un carattere di tabulazione.

Quindi separa le frasi in base alla posizione del carattere di tabulazione. Infine, ripristina tutti i periodi validi che erano nelle abbreviazioni e posiziona le frasi sulle celle adiacenti nella stessa riga.

Si noti che la macro sostituisce tutto ciò che era nelle celle selezionate e in tutte le celle necessarie a destra della selezione per memorizzare le frasi. Per questo motivo, potresti voler assicurarti di salvare il foglio di lavoro originale prima di selezionare un intervallo di celle ed eseguire la macro.

Infine, potresti voler notare che la macro non è perfetta. È perfettamente accettabile dal punto di vista di un grammatico che un’abbreviazione termini una frase. Quando ciò si verifica, la punteggiatura corretta impone che il punto finale nell’abbreviazione serva anche come periodo di fine della frase, come in queste due brevi frasi:

Sheila earned her Ph.D. She was very happy.

Ora, considera la seguente singola frase:

Sheila earned her Ph.D. from an Ivy League school.

Quando si confrontano i due esempi (le due frasi contro la singola frase), non c’è modo di discernere, a livello di codice, tra se Ph.D. termina una frase o se si trova a metà della frase senza controllare se la parola successiva inizia con una lettera maiuscola o una virgoletta seguita da una lettera maiuscola. Questo può diventare abbastanza complesso molto rapidamente. Inoltre, questo vale per tutte le abbreviazioni, non solo per Ph.D. Piuttosto che cercare di anticipare e gestire tutti questi eventi, la macro annotata sopra non cerca nemmeno di discernere se un’abbreviazione conclude o meno una frase: tratta semplicemente tutte le abbreviazioni come se si trovassero nel mezzo di una frase.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (12549) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.