Macro en excel

Hola,

Tengo 2 columnas ( a & B ) con valores como los siguientes.

A B

5 1000-1002

2 2000,2001-2005

7 3000-3001

Me gustaría poner los valores en una sola columna

Ejemplo

comunas A B

5 1000

5 1001

5 1002

2 2000

2 2001

2 2002

2 2003

2 2004

2 2005

7 3000

7 3001

Por favor podrían ayudarme con una macro que pueda realizar esto,, el resultado puede estar en otra hoja,.

Gracias por su ayuda

1 respuesta

Respuesta
1

Primero seleccioná los datos de la col B y seguí estos pasos:

Menú Datos, Texto en Columnas

Delimitados

En la pestaña siguiente seleccioná todos los separadores que tengas (veo guiones, coma, espacio, etc)

Destino: $C$1

Aceptar

Si te parece que están bien separados podes eliminar la col B, y escribirme para que te desarrolle la macro.

NO olvides indicar tu versión Excel.

Hola Elsa,

gracias por constestarme.

Había escrito que quería poner los valores en una sola columna, me equivoque debería ser en 2 columnas.

Tengo valores en la columna A y B

A B

5 1000-1002

2 2000,2001-2005

He realizado la separación como me explicaste pero obtengo valores como

A B C D

5 1000 1002

2 2000 2001 2005

El caso especifico es que cuando esta el signo - el valor es (desde - hasta). entonces lo que deseo es obtener una lista como

A B

5 1000
5 1001
5 1002

2 2000
2 2001
2 2002
2 2003
2 2004
2 2005

muchas gracias por tu ayuda

Bien, entonces la opción Texto en columnas la dejo sin el guión.

Entrá al Editor de macros, insertá un módulo y allí copiá esto:

Sub MacroSepara()
'x Elsamatilde
'se separa texto en columnas, delimitado x espacio y comas
 Range("B1:B" & Range("B65536").End(xlUp).Row).Select
 Selection.TextToColumns Destination:=Range("C1"), DataType:=xlDelimited, _
 TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
 Semicolon:=False, Comma:=True, Space:=True, Other:=False, FieldInfo:= _
 Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
'limpia la col B para colocar los nuevos valores
Range("B:B") = ""
'se recorre la col A hasta su final
Range("A1").Select
While ActiveCell.Value <> ""
 'se recorren las col de la fila activa, a partir de C
 ActiveCell.Offset(0, 2).Select
 'guarda la fila activa
 filini = ActiveCell.Row
 filx = filini
 ind = 0
 col = 3
 While Cells(filini, col).Value <> ""
 If ind > 0 Then
 Cells(filx, col).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
 End If
'revisa si tiene guión, sinó solo coloca ese valor en la celda
 ubica = InStr(1, Cells(filini, col). Value, "-")
 If ubica = 0 Then
 Cells(filx, 2) = Cells(filini, col).Value
 Else
 Cells(filx, 2) = Left(Cells(filini, col).Value, 4)
 'inserto tantas filas como el valor del campo
 For i = Left(Cells(filini, col).Value, 4) + 1 To Mid(Cells(filini, col).Value, 6, 4)
 filx = filx + 1
 Cells(filx, 2).Select
 Selection.EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
 Cells(filx, 2) = i
 Next i
 End If
 filx = filx + 1
 col = col + 1
 ind = 1
 Wend
 'rellena dato fijo
 If filx > filini + 1 Then
 Range("A" & filini).Copy
 Range("A" & filini + 1 & ":A" & filx - 1).Select
 ActiveSheet.Paste
 End If
Cells(filx, 1).Select
'vuelvo al inicio del bucle
Wend
Application.CutCopyMode = False
'opcional: borrar las col auxiliares
End Sub

Al finalizar debiera eliminar las col auxiliares, pero las dejo para que puedas revisar que cada dato se ha pasado correctamente. Según tu ejemplo, va a estar bien .... pero quizás tengas algún otro separador que no se ve en el ejemplo y deba ajustarse.

Sdos y NO olvides finalizar si el tema queda resuelto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas