División de oraciones en celdas (Microsoft Excel)
Pieter tiene muchas celdas en la columna A que contienen texto. Específicamente, las celdas contienen varias oraciones de texto cada una. Le gustaría dividir las oraciones en celdas individuales. Sabe que puede usar la herramienta Text to Columns, pero eso no es del todo útil, ya que las oraciones pueden terminar con puntuación diferente y se puede usar algo de puntuación en el medio de una oración. (Por ejemplo, un punto después de un título como Sr. o Sra.) Pieter se pregunta si hay una mejor manera de dividir las oraciones en diferentes celdas.
Para realizar esta tarea manualmente, hay varias formas de hacerlo.
Primero, podría usar una columna auxiliar para trabajar con sus datos. Por ejemplo, puede poner esta fórmula en la celda B1:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"Mr.", "Mr#"), "Mrs.", "Mrs#"), "Ms.", "Ms#")
Luego, copie la fórmula a cuantas celdas sean necesarias. Lo que terminas es que tus títulos comunes (Sr., Sra. Y Sra.) Sean reemplazados por una secuencia única de caracteres (Sr. #, Sra. # Y Ms #). Copie los resultados de la columna B nuevamente en la columna B como valores (para que se elimine la fórmula) y luego use Texto a columnas en la columna B. Finalmente, use Buscar y Reemplazar para cambiar todas las instancias del carácter # a un punto.
El inconveniente de esto es que la fórmula solo tiene en cuenta tres usos comunes del período, en los que es posible que deba manejar algunos más. Por ejemplo, sus oraciones pueden tener títulos como Dr. o indicadores de credenciales como Ph.D. o Esq. La lista de abreviaturas tan cargadas de períodos podría ser bastante larga. En esos casos, podría realizar los cambios manualmente de esta manera:
-
Utilice Buscar y reemplazar para buscar todos los puntos en su texto, reemplazando los puntos que no terminan en una oración con el carácter marcador (# en la técnica anterior).
-
Utilice la herramienta Texto a columnas para dividir las oraciones.
-
Utilice Buscar y reemplazar para cambiar todas las instancias del carácter marcador a un punto.
Nuevamente, si tiene muchos períodos que no terminan en oraciones, este proceso puede llevar bastante tiempo.
Por supuesto, estos enfoques abordan lo que en realidad es un tema complejo.
La verdadera pregunta es ¿cómo se define una oración? En inglés, solo hay tres signos de puntuación que terminan una oración: un punto, un signo de exclamación y un signo de interrogación. Sin embargo, existen variaciones y excepciones a esto. Por ejemplo, una oración podría terminar con una comilla, pero esa comilla siempre tendrá uno de los tres signos de puntuación de terminación delante. Además, se podría utilizar un punto para marcar una abreviatura, como ya se señaló.
Si comienza a usar Buscar y reemplazar para lidiar con todos estos signos de puntuación y excepciones, rápidamente puede ejecutar una serie de pasos complicados. Es mucho mejor intentar dividir usando una macro. Aquí hay uno que manejará la mayoría de las oraciones y abreviaturas correctamente:
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
Tenga en cuenta que las terminaciones de oraciones aceptables se indican en la matriz sTerm y las abreviaturas aceptables están en la matriz sException. Si su texto puede tener otras abreviaturas, entonces querrá expandir la matriz sException para incluirlas.
La macro recorre las celdas que haya seleccionado y reemplaza todas las excepciones aceptables. Luego reemplaza todas las terminaciones aceptables de oraciones con esa terminación seguida de un carácter de tabulación.
Luego, separa las oraciones según la ubicación del carácter de tabulación. Finalmente, restaura todos los puntos válidos que estaban en las abreviaturas y coloca las oraciones en celdas adyacentes en la misma fila.
Tenga en cuenta que la macro reemplaza lo que estaba en las celdas seleccionadas y, sin embargo, muchas celdas son necesarias a la derecha de la selección para almacenar las oraciones. Debido a esto, es posible que desee asegurarse de guardar su hoja de trabajo original antes de seleccionar un rango de celdas y ejecutar la macro.
Finalmente, es posible que desee tener en cuenta que la macro no es perfecta. Es perfectamente aceptable desde el punto de vista de un gramático que una abreviatura termine una oración. Cuando esto ocurre, la puntuación adecuada dicta que el punto final de la abreviatura también sirve como punto final de la oración, como en estas dos oraciones cortas:
Sheila earned her Ph.D. She was very happy.
Ahora, considere la siguiente oración única:
Sheila earned her Ph.D. from an Ivy League school.
Cuando compara los dos ejemplos (las dos oraciones frente a la oración única), no hay forma de discernir, programáticamente, entre si Ph.D. termina una oración o si aparece en el medio de la oración sin verificar si la siguiente palabra comienza con una letra mayúscula o una comilla seguida de una letra mayúscula. Esto puede volverse bastante complejo muy rápidamente. Además, esto se aplica a todas las abreviaturas, no solo a Ph.D. En lugar de tratar de anticipar y lidiar con todas esas ocurrencias, la macro mencionada anteriormente ni siquiera intenta discernir si una abreviatura termina una oración o no; simplemente trata todas las abreviaturas como si estuvieran en el medio de una oración.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (12549) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365.