Seleccionar datos de origen mediante macro.

Antes de todo indicar que no soy un experto en Visual Basic, pero tengo conocimientos de básicos de programación.
Trataré de explicar mi duda de forma más entendible posible, aunque es un poco difícil sin imágenes.
Necesitaba realizar un gráfico de dispersión utilizando datos de una tabla dinámica, pero antes necesitaba depurar esos datos, dado que no eran exactamente los necesitados. De modo que en las columnas adyacentes realice una serie de operaciones con funciones IF y OR que me dieran los datos depurados. Estas dan un valor numérico o una celda vacía ("") en función de unos parámetros establecidos.
El caso es que creía que así, metiendo datos teóricamente vacíos en la gráfica, ésta no los iba a tener en cuenta. Pero a la vista de mis resultados considera esas celdas "vacías" como valores 0, arruinando así mi gráfico. :(
Abordando ya el quid de la cuestión, me gustaría saber de que forma puedo implementar una macro que barra todos las celdas de una columna pero sólo seleccione aquellas con valor numérico.
Algo así como:
Sheets("Gráfica seguimiento TAGs").Select
    ActiveSheet.ChartObjects("Gráfico 1").Activate
    ActiveChart.ChartArea.Select
    ActiveChart.SeriesCollection(1).XValues = "=Tablas! LAS CELDAS CON VALOR NUMÉRICO DE UNA COLUMNA CONCRETA"
Hay que tener en cuenta que la gráfica y los datos se encuentran en diferentes sheets.
Es muy fácil hacerlo manualmente pero es una gráfica que necesita mi jefe y no es nada diestro con los ordenadores, y me ha caído a mí el marrón porque una vez estudié programación en mi carrera años atrás.
Muchas gracias.

1 respuesta

Respuesta
1
Te dejo una rutina que evalúa valores en col B, el rango a graficar es A:B
Esta rutina la grabé con versión 2007, no sé si en tu versión correrá. Lo importante es que tomes las instrucciones previas, para obtener el rango a graficar.
Sub rangoGrafico()
' x Elsamatilde
'recorro la col B guardando las que tengan valor
'primero debo ubicar cuál es la última celda con datos
ultima = Range("B65536").End(xlUp).Row
Range("B2").Select
While ActiveCell.Row <= ultima
    If ActiveCell <> "" Then
        'guardo la ref en la variable
        filax = ActiveCell.Row
        rgo = rgo & "A" & filax & ":B" & filax & ","
    End If
    ActiveCell.Offset(1, 0).Select
Wend
'le quito la coma final
rgo = Mid(rgo, 1, Len(rgo) - 1)
'a partir de aquí las instrucciones para ajustar los datos de serie del gráfico. Utilizá tus instrucciones
   Range("A2").Select
    ActiveSheet.Shapes.AddChart.Select
    'se establece el rango total, y luego el rango parcial
    ActiveChart.SetSourceData Source:=Range("Hoja2!$A$1:$D$14")
    ActiveChart.ChartType = xlColumnClustered
    ActiveChart.SetSourceData Source:=Range(rgo)
End Sub
Pruébala y si todo resultó no olvides finalizar la consulta
FUnciono más o menos gracias!
Necesité la auydita de un conocido que maneja un poco más que yo pero resulto!
Muchas gracias.
Si no es molestia me gustaría pedirte un último favor, creo que sencillito.
Me gustaría crear una función que se llamará NUMERODESEMANA que siguiera esta ecuación:
ENTERO((A10-FECHA(AÑO(A10-DIASEM(A10-1)+4);1;3)+DIASEM(FECHA(AÑO(A10-DIASEM(A10-1)+4);1;3))+5)/7)
He intentado meterla en Visual basic más o menos a pelo y no puedo :(
Aclarar que donde pone A10 sería X.
Vamos que pongo en VB
Function NUMERODESEMANA(x)
NUMERODESEMANA(x)=ENTERO((x-FECHA(AÑO(x-DIASEM(x-1)+4);1;3)+DIASEM(FECHA(AÑO(x-DIASEM(x-1)+4);1;3))+5)/7)
End function
Me imagino que es porque no se podrá copiar así tal cual de excel, pero en excel funciona. Tengo que usar esta fórmula de forma muy continuada y se hace un poco cansado el hacerlo casi a mano cada vez...
Con mucho gusto te ayudaré con tu función... pero tendrá que ser en otra consulta.
No puedo responder 2 temas diferentes en la misma consulta. Finaliza esta y deja otra indicando en el titulo el nuevo tema.
Te aclaro que la versión 2007 ya la tiene incluida... imagino que será para versiones anteriores entonces.
Sdos
Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas