Rango variable en una macro

Ando haciendo una macro que copia los datos de una columna para pegarlos nuevamente en la misma columna pero solo el valor. El problema es que esta columna siempre cambia, siempre es la ultima columna (cada mes se anexan nuevas columnas), esto es lo que llevo de la macro que si funciona pero yo tengo que especificar la columna (en este caso BO), tengo inclusive ya el código para encontrar la ultima columna pero no se como implementarlo para el rango
Dim myrange As Range
Sub Macro4()
' Acceso directo: CTRL+i
'busca la ultima columna
'If WorksheetFunction.CountA(Cells) > 0 Then
'ultimacol = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
'End If
Set myrange = Range(Selection, Range("bo65536").End(xlUp)) AQUI ES DONDE DEBE TOMAR LA ULTIMA COLUMNA NO LA BO
myrange.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub

1 Respuesta

Respuesta
2
Para hacer lo que quieres es fácil, te sitúas en la celda por ejemplo A1 y te mueves a la ultima celda con datos de esa fila y ahora seleccionas como rango desde esa celda hasta el final con datos y ya tienes seleccionada toda la columna (si como dices es la última columna)
Range("A1").Select
ActiveCell.End(xlToRight).Select
Range(ActiveCell, ActiveCell.End(xlDown)).Select
>Un saludo
>Julio
Hola! Oye pues encuentra perfecto la ultima columna, muchas gracias! El problema es que como dentro de la columna hay de repente filas vacías, con el xldown no llega hasta la ultima celda con datos sino se interrumpe el rango en donde hay celdas en blanco. :S
Vale pues en vez que busque desde arriba que lo haga desde abajo, sacando primero en que columna me encuentro, sería esta:
Private Sub seleccionar()
Range("A1").Select
ActiveCell.End(xlToRight).Select
dato = ActiveCell.Address
MiColumna = Mid(dato, InStr(dato, "$") + 1, InStr(2, dato, "$") - 2)
Range(MiColumna & "65536").Select
ActiveCell.End(xlUp).Select
Range(ActiveCell, dato).Select
End Sub
>Un saludo
>Julio
Hola Julio ya funciona super pero tuve que quitarle lo de private porque sino no me aparecía en el menu de ejecutar macro, es necesario el private, ¿o cómo le hago?
El otro problema es que cuando quiero volver a trabajar con esa columna ya no puedo arrastrar las fórmulas =S solo pega precisamente el dato que esta en la celda que estoy arrastrando... mmm como no soy buena explicando de t doy el ejemplo:
=10/5       es 2 a las hora q arrastro esto para copiarlo a las demas celda de la columna se pega solo el 2 aunke la operacion sea 15 entre 3 que deberia aparecer 5
casi nunca se vuelve usar la columna pero como se puede corregir eso?
Muchas muchas muchas gracias!
Andrea
Cuando tu pones en una celda un valor (indiferente que lo calcules con una fórmula) =10/2 es 5 y ese es el valor, otra cosa serían referencias si en la celda A1 tienes de valor 10 y en la celda A2 tienes de valor 2 y te sitúas en la celda A3 y pones que su valor es =A1/A2 eso ya es diferente su valor depende de los valores de las otras celdas, por eso si arrastras la fórmula irá cambiando la referencia a las celdas.
No se si me has entendido, si en una celda pones un valor numérico el que sea 4 o 2+2 para Excel el valor es 4 y cuando arrastras su valor a otras celdas pues traspasa exactamente el valor en este caso 4.
Aclarame exactamente que tienes en las celdas y si son referencias te ayudo pero si son valores numéricos es lo que tienes y es lo que arrastras.
>Un saludo
>Julio
Ok, creo que soy mala explicando, lo intenatre nuevamente: en el archivo hay 3 columnas: envío, venta y % de venta. Inicialmente una persona trabaja este archivo ey llena las columnas de envío y venta, posteriormente otra persona saca el porcentaje de venta dividiendo la columna de venta entre la de envío y obtiene el porcentaje de venta, el cual queda con la fórmula de venta/envio. para poder seguir usando el archivo con fines de análisis, se usan los porcentajes de envío pero como este análisis se quiere también automatizar por medio de una macro, se necesita que esa columna de % de venta tenga los valores, porque si tiene las fórmulas los ifs de la la macro de análisis no pueden trabajar. ¿No se si ya pude explicarlo un poco mejor? Sino para ver si t puedo enviar el archivo o ver como le hacemos.
Muchas gracias nuevamente y saludos! ANdrea
No es que seas mala explicándote, es que esta explicación en ningún momento la habías hecho, entiendo que la persona que calcula los porcentajes suma la columna de ventas y divide por la venta particular de cada caso, resultandole un porcentaje del total de ventas realizadas. Para que posteriormente, se pueda realizar el análisis con condiciones, lo que se debe de hacer es meter las lineas de código en la misma macro que realiza el análisis realizando primeramente los cálculos pero no con fórmulas en la hoja de excel sino en la misma macro con lineas de código, de esta forma antes de que lleguen a ejecutarse las condiciones (eso que llamas If's) en las celdas se disponga de los valores absolutos de porcentajes y tomar estos datos para el análisis.
Dicho este rollo, la solución es bien fácil, grabate una macro para realizar las fórmulas dependiendo de tus rangos saldrán las lineas de código yo te voy a dejar un pequeño ejemplo de lo que hay que poner:
               A B C
1 envío venta %
2              *                    150                  =B2*100/$B$5  =20,979021
3              *                    230                  =B3*100/$B$5  =32,1678322
4              *                    335                  =B4*100/$B$5  =46,8531469
_________________________________________________________
5              *                    715                                                    100
<div>Te explico, realizamos la autosuma de la columna B, así tenemos el total de ventas, ahora en la columna del % ponemos la formula para calcular el porcentaje que como sabes es el valor de la venta por 100 dividido por el total de las ventas. Para que la formula funcione correctamente debemos de crearla en este caso en la celda C2 y arrastrarla hasta el final de nuestras celdas a calcular. Para que el valor que vamos a utilizar como total de ventas no varíe debemos indicar a Excel que tome la referencia absoluta de la celda, o sea que esta no cambie aunque la arrastremos o cambiemos de lugar. Para ello se emplea el simbolo de dolar, tanto delante de la columna como de la fila. Ahora lo que debemos hacer es poner esta operación en codigo para insertarlo al principio de vuestra macro de análisis, para que disponga de los valores para realizar los calculos. Como imagino que vuestros datos cambian en número de filas desde un calculo hasta que realizais el siguiente(vamos que cambiaran el numero de ventas) para realizar la autosuma debemos siempre situarnos en la ultima celda vacía de la columna C (en este caso). El codigo es este y te lo explico:</div>
<div>
Private Sub calcular_porcentaje()
'Nos situamos en la primera celda con valor
Range("B2").Select
'Nos desplazamos hasta la ultima celda con valor
ActiveCell.End(xlDown).Select
'Tomamos la posición de la celda que necesitaremos para sleccionar el rango
cel = ActiveCell.Address
'Bajamos una fila que será una celda vacía
ActiveCell.Offset(1, 0).Select
'Hacemos la suma del rango completo
ActiveCell.Formula = "=SUM(B2: " & cel & ")"
'Recogemos el valor de la suma en una variable
dat = ActiveCell.Value
'Volvemos a la primera celda para realizar las operaciones
Range("B2").Select
'Pasamos a una variable el valor de la celda
dat1 = ActiveCell.Value
'Nos desplazamos a la celda contigua
ActiveCell.Offset(0, 1).Select
'Hacemos el calculo del porcentaje
ActiveCell.Formula = "=" & dat1 & "*100/" & dat & ""
'Ahora repetimos la operación hasta que la celda contigua
'una fila mas abajo coincida con la suma

Do While ActiveCell.Offset(1, -1).Value <> dat
'Bajamos una fila para seguir calculando
ActiveCell.Offset(1, 0).Select
'Pasamos a la variable el nuevo valor
dat1 = ActiveCell.Offset(0, -1).Value
'Volvemos a realizar el calculo del porcentaje
ActiveCell.Formula = "=" & dat1 & "*100/" & dat & ""
'Repetimos hasta el final
Loop
End Sub</div>
<div>
</div>
<div>Esto lo pones al principio de tu macro de analisis (evidentemente sin la primera linea, ni la ultima, que son el comienzo y final de esta macro) y cambiando los rangos si los calculos no se deben de hacer en las columnas B para ventas y C para porcentajes.</div>
<div>Espero que lo hayas entendido y lo puedas aplicar, si tienes alguna duda....pues aquí estamos.</div>
<div>>Un saludo</div>
<div>>Julio
</div>
woo hoo! Mil gracias funciona perfecto! Muchas muchas gracias por tu tiempo, apoyo, paciencia y disposición. Espero poder seguir contando con tu apoyo! Enhorabuena por personas como tu Julio!
Saludos, ANdrea

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas