Saltar al contenido

Macro para invertir los valores de una columna


Recommended Posts

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.....

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

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

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

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!

  • Silvia bloqueó este tema

Archivado

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

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.