Saltar al contenido

Macro para invertir los valores de una columna

publicado

Buenas tardes a todos,

¿Alguien sabría como invertir los valores de una columna?

Tengo un rango que va desde A3 hasta A50 y quisiera encontrar una macro para invertir los valores y ubicarlos en el mismo rango, pero al revés.....

es decir; el valor de A3 debe ser el que tiene A50,

el de A4 debe ser el de A49

el de A5 debe ser el de A48

....y así hasta llegar la final, que el de A50 sea el de A3

¿alguna idea?

Gracias por adelantado.....

Featured Replies

publicado

Si lo que quieres es una idea, tendrías que hacer un ciclo que recorra las celdas y guardas sus valores en un arreglo. Luego haces el ciclo del recorrido pero en sentido contrario para darle los valores a las celdas.

publicado
  • Autor

Gracias seba64

Mis conocimientos de programación aun son muy limitados y no sabría como hacer lo que sugieres. 

Mi pregunta era si alguien tenia idea de donde encontrar una macro que hiciera esta función, o similar, para poder adaptarla.

Un saludo

 

publicado

Si el rango está ordenado, vasta con ordenar la columna de forma descendente/ascendente, según sea el caso.

De todas forma te dejo un macro:

Sub InvertirRangoA3A50()
Application.ScreenUpdating = False
Columns("A").Insert
Columns("B").Copy Columns("A")
For x = 50 To 3 Step -1: Range("B" & 53 - x) = Range("A" & x): Next
Columns("A").Delete
End Sub

  

publicado
  • Autor

Perfecto el macro.

Eso es lo que llamo "una idea". He podido adaptarlo y he aprendido métodos nuevos.

Gracias una vez mas!!

publicado

hola, a todos (solo por no "dejarlo en el tintero")...

esta es otra forma (cuando se puede, prefiero evitar bucles o trabajar celda-por-celda y algo mas):

Sub valoresInvertidos()
  Dim a As String, b As String, orden
  With Range("a3:a50")
    a = .Cells(1).Address: b = .Address
    orden = Evaluate("transpose(offset(" & a & ",rows(" & b & ")-(row(" & b & ")-row(" & a & ")+1),))")
    .Value = Application.Transpose(orden)
  End With
End Sub

saludos,

hector.

publicado
  • Autor

Gracias Héctor,

Aunque la solución de Macro Antonio ya la he implantado, haré alguna prueba con la tuya aunque me cuesta un poco más ver su funcionamiento.......

voy a probar ;)

Un saludo

publicado

¡Hola a todos!

Otra opción puede ser:

Sub Invertido()
   Dim a, b&, r$
   
   r = "A3:A50": b = Range(r).Rows.Count
   a = Evaluate(b & "- row(" & r & ") + min(row(" & r & "))")
   Range(r) = Application.Index(Range(r), a)
   Erase a
End Sub

¡Bendiciones!

publicado
  • Autor

Gracias johnmpl, 

También le daré un vistazo!. ... 

  • Silvia bloqueó este tema

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.