¿Cómo separar en Excel texto en varias filas cuando una cadena de texto se repite en la misma celda diferenciados por " , y ;" ?

Tengo que trabajar un archivo cuya columna tiene muchos "autores con sus afiliaciones" separados por " ; " y . Donde la " ; " separa autores y la ", " los detalles .

Debo separar los autores que sean solamente de la universidad Andrés Bello y eliminar los otros https://docs.google.com/spreadsheets/d/1-KjYKEzCt-JG5XvggrgzGyEYIiJ_W8N6/edit?usp=sharing&ouid=117081344517308204826&rtpof=true&sd=true

El problema que tengo es separar los autores, universidad, con su respectiva facultad y datos, tal como se muestra a continuación. Para después ser rellenado con los otros datos del excel en si, repitiendo el dato hasta que cambie fila y tome otro dato volviéndose secuencial.

Y para finalizar, debo aplicar unas restricciones de caracteres ya que hay algunas celdas que poseen tantos autores que el mismo excel colapsa y no alcanza a completar o a guardar El Progreso de este (ejemplificando la fila 81 del archivo adjunto) que todo el dato se pueda ver, menos el "Autor", " Autor ID", "Afiliaciones " y "Autores con su afiliación" ("A","B", "O", "P") ya que son estos las celdas que causan mas

Problemas, pero los otros datos de esa misma fila tienen que aparecer obligatoriamente.

Espero atento a su respuesta y ayuda ya que me encuentro super complicado.

Respuesta
2

Puedes compartir un archivo con una muestra de los textos. Tan solo una muestra, 10 o 15 registros. Ahí en el archivo pones cómo están originalmente los textos y en otra hoja pones cómo quieres el resultado.

Puedes compartir el archivo en google drive.

https://docs.google.com/spreadsheets/d/1R4IlAgl8s0i91aKg191UTm52-rBhK0t6/edit?usp=sharing&ouid=117081344517308204826&rtpof=true&sd=true 

Estimado, le adjunto 15 celdas demostrativas de como es la tabla(Hoja 1) y como debe de ser (Hoja2).
le he dejado comentarios en algunas celdas para que se pueda guiar con lo que necesito llegar a hacer con la tabla.
Hoja 1(A15 ; P1)
Hoja 2(A23 ; Q1 ; Q3 ;  Q10 ; AE1)
de antemano Muchas gracias.
Atte. Matias ponce Montano

Te envié la solicitud para descargar el archivo.

Di el acceso, favor cuéntame si lo recibiste ok

gracias 

Matias

Para entender bien el requerimiento, entonces en función del número de veces que aparezca "Universidad Andrés Bello" en la celda de la columna P, será el número de registros a crear.

Por ejemplo:

¿Si en la hoja1, en la celda P8, "Universidad Andrés Bello" aparece 7 veces, entonces en la hoja2 se crearán 7 registros?

¿Los datos datos de la celda P8, correspondientes a la "Universidad Andrés Bello", se separan en las celdas Q8 a AE8?

. Avísame si me falta algo.

exacto, eso es a lo que necesito llegar, y que dependiendo de la cantidad de autores de "universidad "Andrés bello" se repitan las filas para que no existan espacios en blanco y provoque desorden al ordenar todo el listado.
Muchas gracias.

creo que igual prefiero destacar (aunque usted puede que lo haya notado), que tomando como ejemplo el valor 15 dentro de la tabla demostrativa (la casilla con mucho mas carácter que las otras filas)  no retorne nada de vuelta o retorne un "error" pasando a llevar 4 celdas(autor, autor id, afiliaciones  y  autor con afiliaciones) que también exceden de estos caracteres, y que el resto de los datos si se puedan observar

Prueba la siguiente macro en una muestra de tus datos para que revises los resultados. Quizás haya que realizar algunos ajustes.

Sub separar_datos()
'Por Dante Amor
  Dim sh1 As Worksheet, sh2 As Worksheet
  Dim a As Variant, b As Variant, unis As Variant, datos As Variant
  Dim i As Long, j As Long, k As Long, m As Long, n As Long, p As Long
  '
  Set sh1 = Sheets("Hoja1")
  Set sh2 = Sheets("Hoja2")
  a = sh1.Range("A1:V" & sh1.Range("A" & Rows.Count).End(3).Row).Value
  ReDim b(1 To UBound(a, 1) * 100, 1 To 37)
  '
  For i = 2 To UBound(a, 1)
    unis = Split(a(i, 16), ";")
    For j = 0 To UBound(unis)
      datos = Split(unis(j), ",")
      For k = 0 To UBound(datos)
        If LCase(datos(k)) Like LCase("*Universidad Andrés Bello*") Or _
           LCase(datos(k)) Like LCase("*Universidad Andres Bello*") Then
          m = m + 1 'fila en la salida
          For n = 1 To 16   'de A a P 'repite datos
            b(m, n) = Trim(a(i, n))
          Next
          'separa datos de Q hasta AE
          For p = 0 To 14
            If UBound(datos) >= p Then
              Select Case p
                Case 0:    b(m, p + 17) = Trim(datos(p)) & " " & Trim(datos(p + 1))
                Case 1
                Case Else: b(m, p + 16) = Trim(datos(p))
              End Select
            End If
          Next
          For n = 17 To 22  'de Q a V 'repite datos
            b(m, n + 15) = Trim(a(i, n))
          Next
        End If
      Next k
    Next
  Next
  '
  sh2.Cells.ClearContents
  sh2.Range("A1:P1").Value = sh1.Range("A1:P1").Value
  sh2.Range("AF1:AK1").Value = sh1.Range("Q1:V1").Value
  sh2.Range("Q1:AE1").Formula = "=""Fila "" & columns($P$1:P1)"
  sh2.Range("A2").Resize(m, UBound(b, 2)).Value = b
End Sub

la ultima linea de codigo antes del End Sub 

Resize (error definido por la aplicación u objeto )

No termine de escribir, era la única línea de código que me lanza error

Prueba con la muestra que me enviaste.

Con los datos que estás probando no está encontrando ninguna universidad con el nombre "Universidad Andrés Bello".

Revisa que los datos y la estructura de columnas de tu prueba se parezca al archivo que compartiste. En la columna "P" debe existir la universidad con el nombre "Universidad Andrés Bello"

Le agregue un reemplazar a toda la fila P para que toda universidad tuviese tilde, muchas gracias por todo dante, cualquier duda me comunicare por acá.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas