Soporte con un Buccle para que adicione un caracter

As):

¿Cómo podría mejorar este buccle?

Quiero que me ponga haga la separación con un carácter especial una (,)

La macro me lo separa con un espacio vacío, pero al reemplazarlo por una coma, la pone un coma inicio y otra la final.

Yo quiero que quede así.

Esto hace la macro, quisiera reemplazar el espacio vacío le ponga caracter de la coma, pero como en la primera foto.

Adjunto código VBA

Sub CopiarSeries()
Application.ScreenUpdating = False
fini = Range("A" & Rows.Count).End(xlUp).Row
Range("B1").FormulaR1C1 = "=MID(RC[-1],4,7)"
Range("B1").AutoFill Destination:=Range("B1:B" & fini)
Range("B1:B" & fini).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.UsedRange.Offset(0, 7).ClearContents
    Serie = 10
    j = 1
    For i = 1 To Range("B" & Rows.Count).End(xlUp).Row Step Serie
        Range(Cells(i, "B"), Cells(i + Serie - 1, "B")).Copy
        Cells(j, "D").PasteSpecial Transpose:=True
        For k = Columns("D").Column To Columns("D").Column + Serie
            c = Columns("D").Column + Serie + 1
            Cells(j, c) = Format(Cells(j, c), "0000000") & " " & Format(Cells(j, k), "0000000")
        Next
        j = j + 1
    Next
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

Espera de su apoyo.

Respuesta
1

:

¿Sos consciente que en la celda O1 tienes repetidos 10 veces el mismo número (separados por espacios o comas: ¡Da lo mismo!)?...

Más allá que no se requiere de ningún bucle para hace "eso": ¡No me parece que sea "eso" lo que quieres conseguir!...

Digo: ¿Por qué no te olvidas de tu macro (total no te funciona) y explicas cuidadosamente a donde quieres que termine todo esto?...

Saludos, Mario (Cacho) R.

:

.

¡Gracias Mario! Por la acotación, se planteara mejor la idea. 

.

Me parece bien porque -y por lo que estoy imaginando- no necesitas fórmulas ni procesos recursivos tediosos.

¡Que atento!...
.

:)

2 respuestas más de otros expertos

Respuesta
2

Este es el resultado de la macro

y esta es la macro

Sub COPIAR_SERIES2()
With Range("a1").CurrentRegion
    R = .Rows.Count: C = .Columns.Count
    VALOR = Mid(Range("A1"), 4, 7)
    For I = 1 To 10
        If I = 1 Then TEXTO = VALOR
        If I > 1 Then TEXTO = TEXTO & ", " & VALOR
    Next I
    .Columns(C + 3).Resize(R, 1) = TEXTO
End With
End Sub
Respuesta
1

Al igual que James también capturo solo los 7 caracteres directamente sin pasar a formular.

Esta es una opción separando solo por coma, sin espacio.

En la imagen se observa en col D el resultado de la macro de James con coma y espacio (le falta un pequeño ajuste porque repite siempre el mismo número) y por eso no tiene necesidad de convertirlo a texto.

Pero si necesitas que solo tenga una coma (sin espacio), la cadena queda como un número. Por eso lo convierto con la comilla. El resultado queda como en col F.

Sub separaSeries()
'x Elsamatilde
'col A ----> col F
Serie = 10    'cant de nros x fila
I = 1         '1er fila de datos
j = 1         '1er fila destino
x = 0         'contador de nros
For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
    cadena = cadena & Mid(Range("A" & I), 4, 7) & ","
    x = x + 1
    If x = Serie Then
        'si llegó a 10 nros se pasa a la fila omitiendo la última coma
        Range("F" & j) = "'" & Left(cadena, Len(cadena) - 1)
        j = j + 1
        x = 0: cadena = ""  'vacía la cadena
    End If
Next I
'si queda algo de cadena se pasa a la fila
If cadena <> "" Then Range("F" & j) = "'" & Left(cadena, Len(cadena) - 1)
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas