Jump to content
Visor

Separar datos de rango de celda separados con Char(10) en columnas

Recommended Posts

Saludos amigos del foro

He intentado hacer que las celdas que contienen dos datos (horas de inicio y fin) que estan separados con Alt+Enter lo que es lo mismo que Char(10). En el codigo el split no funciona de niguna manera pues lo he intentado incluso con codigos encontrados en los que funcionan bien en los archivos de ejemplo. Al procurar hacerlo manualmente en el menu Texto a columna tampoco me da resultado pues solo me separa el primer dato de cada celda.

He logra hacer que funcione con un codigo que al ejecutar en la celda seleccionada se separaran los dos datos en las dos diferentes columnas que es como quiero que suceda. Sin embargo eso de hacer de celda en celda tampoco me parece tecnicamente aceptable. 

Si aplico un for each no encuentro el modo, desde la celda A7 hasta la ultima celda con datos para que se ejecute todo de un solo click

 

Agradezco me puedan colaborar

subo el archivo para que lo revisen

 

Separa texto parafo de celdas AyE V1.xlsm

Share this post


Link to post
Share on other sites

Hola, para no andar dando vueltas, pues usa tu mismo código:

Sub SeparaEnCol(Celda As Range)

'Este funciona en la celda seleccionada
Dim toma As String, linea As String
Dim largo As Integer, I As Integer, s As Byte
Dim caracter As String * 1
Dim fila As Long, Columna As Integer
Dim A() As Integer

fila = Celda.Row
Columna = Celda.Column
toma = Celda.Value
largo = Len(toma)
ReDim A(largo)

For I = 1 To largo
    caracter = Mid(toma, I, 1)
    If caracter = Chr(10) Then
        s = s + 1
        A(s) = I
    End If
Next I

If s = 0 Then Exit Sub
A(s + 1) = largo + 1

For I = 0 To s
    linea = Mid(toma, A(I) + 1, A(I + 1) - A(I) - 1)
    Cells(fila, Columna + I + 1) = linea
Next I

End Sub

Sub Separando()
Dim celda1 As Range
For Each celda1 In Range("B8:B34")
    Call SeparaEnCol(celda1)
Next
End Sub

Saludos

Abraham Valencia

Share this post


Link to post
Share on other sites

y si depuramos todo el código:

y dejemos así:

Sub Separar()
Application.ScreenUpdating = False
    Range("C7") = Left(Range("b7"), 5): Range("$C$7").FlashFill
        Range("D7") = Right(Range("b7"), 5): Range("$D$7").FlashFill
            Application.ScreenUpdating = True
End Sub

Saludos,

Share this post


Link to post
Share on other sites

Excelente amigos estoy muy agradecido, ambas soluciones me ayudan de manera perfecta. Considerando que tengo dos casos

La solución de AValencia funciona en todos los casos, mientras que la solucion de DiegoLG funciona siempre que hayan cinco caracteres que el es caso de las horas con formato 00;00 , (claro que solo bastaria incrementar el valor de 5 a más, para otros casos) y al parecer evalua desde celda anteriores  (Filas2...) pues lo que este alli tambien lo separa

Aprecio mucho los codigos simplificados.

Pero en este caso usare el cado del maestro AValencia para el caso en el que tengo en la celda algo asi:

CARRERA: MEDICINA (R)
NIVEL: PRIMER SEMESTRE
ASIGNATURA: EMBRIOLOGIA I

y el codigo de Diego LG en el caso de las horas como en el ejemplo subido

Me ha sido muy utili las dos colaboraciones

 

 

Share this post


Link to post
Share on other sites

Genial!! Estimado Antoni

Más simplificado aún, y sin ningún contratiempo,...

debido a que al ejecutarlo me pidió que defina funciones, ...en el caso de la variable, horas,.. le puse así Dim horas As Variant ya que no se exactamente cual seria el mas apropiado (probé con varios) para el split y que me demuestra que alli funciona perfecto ..con split.

Estoy muy agradecido, con esto me ahorra mas espacio. para todos los casos

Tema solucionado

 

 

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

×
×
  • Create New...

Important Information

Privacy Policy

Ayuda Excel - Madrid, Madrid, ES - Valorada por 5112 personas - Aprender Excel - Total: 4.7 / 5