Hola
Estoy con un programa en el que utilizo una tabla dinámica que cuenta las veces que se repiten una serie de datos.
Finalmente, quiero extraer los datos de la tabla dinámica, localizarlos en la tabla general y descontar las repeticiones.
Es decir
Necesito extraer los datos uno a uno, localizar su fila y su columna. Luego utilizaré el valor de fila y de columna para localizar por mi cuenta el dato dentro de una tabla mucho más grande.
El caso es que sé cómo introducir el dato en una celda. La grabadora de macros me graba esto:
ActiveCell.FormulaR1C1 = "=+GETPIVOTDATA(""Nombre"",R3C1,""Nombre"",""Carbono orgánico total (COT)"",""PeriodoDeReferencia"",2012)"
Pero esto no es utilizable en mi macro por varias razones:
1- al copiarlo tal cual, me da errores 1004
2- no quiero utilizar una celda como intermediaria
3- los valores "Carbono orgánico total (COT)" o 2012 son variables. Cambiarán en cada ejecución de la macro.
He buscado en la ayuda de Microsoft, pero sirve de bastante poco desde que utilizan la generación automática de artículos de ayuda. Es ayuda mal documentada, con ejemplos no autoexplicativos o sin ejemplos.
Así que, por favor, necesito un poquito de ayuda ;)
Saludos
Buenas tardes, Cron.
Yo no le veo problema a la formula desde la macro, de hecho a partir de tu información, he creado una tabla (en la Hoja1) y una tabla dinámica (en la Hoja4), que debe parecerse a lo que tú tienes y he ejecutado la opción de generar macro, como tú has hecho y yo no he tenido problemas. (No me salía ese +, pero era igual).
De todos modos he añadido otras dos macros más, de modo que te dejo un fichero con tres macros.
1.- La que genera el Excel
2.- Una pasando la fórmula a una variable de texto (Básicamente es concatenar textos con la condición que la " tienes que poner 4 "
3.- Una pasando la fórmula a una variable y poniendo en lugar de valores variables
Les echas un vistazo y me cuentas
Gracias por responder
He mirado las tres alternativas, pero sigue sin convencerme.
Las tres opciones necesitan una celda para introducir la fórmula.
A mí lo que me gustaría es asignar el valor, dada una fila y una columna, directamente a una variable.
De todas maneras, lo que me has mandado me resuelve el problema, muchas gracias.
Siempre puedes calcular el valor de la celda directamente:
En el ejemplo que te mandé:
Function buscar(nombre As String, periodo As Integer)
Dim fila As Integer
Dim columna As Integer
'Hoja4 es el nombre de la hoja en la que está la tabla dinámica
'Supongo que lo que ocupa tu tabla no es más que ese rango
fila = Sheets("Hoja4").Range("A1:Z10").Find(nombre).Row
columna = Sheets("Hoja4").Range("A1:Z10").Find(periodo).Column
buscar = Cells(fila, columna).value
End Function