Como introducir el cálculo de una fórmula en la celda activa de Excel

25/02/2012 - 05:23 por \El-Profe\ | Informe spam
Hola foro:

No he podido hacer que se introduzca el resultado del cálculo de una
fórmula en la celda activa de una determinada hoja de Excel
(introduciendo la fórmula si funciona).

El ejercicio consiste generar un numero aleatorio entre 1 y 150;
buscar dicho aleatorio en el rango "Col_Ind" (columna izquierda de una
tabla) y con la combinación de =INDICE() y =COINCIDIR() debe devolver
la palabra que está en el rango "Col_01" (columna central de la tabla)
y colocarla en la celda activa; luego avanza dos celdas a la derecha y
hace otro tanto con la palabra que está en el rango "Col_02" (columna
derecha de la tabla) y deber colocarla en la celda activa. El proceso
se repite hasta completar 35 palabras de un total de 300 (siempre
serán diferentes por el uso del # aleatorio)

Para lo anterior tengo el siguiente código que debe funcionar en una
"HojaDeTrabajo", con la información que se encuentra en la hoja
"Base":

Sub Palabras()
Set miRInd = Worksheets("Base").Range("Col_Ind")
Set miRUno = Worksheets("Base").Range("Col_01")
Set miRDos = Worksheets("Base").Range("Col_02")
Range("D:D").ClearContents
Range("F:F").ClearContents
Range("E2").Select

Do While contador < 35

ActiveCell.Offset(1, -1).Select
' Falla en la siguiente linea cuando al llegar a la función
"Aleatorio.Entre()" [RandBetween]
ActiveCell.Offset(0, 0) Application.WorksheetFunction.Index(miRUno, Match(RandBetween(1, 150),
miRInd, 0))
ActiveCell.Offset(0, 2).Select
ActiveCell.Offset(0, 0) Application.WorksheetFunction.Index(miRDos, Match(RandBetween(1, 150),
miRInd, 0))
contador = contador + 1
ActiveCell.Offset(0, -1).Select

Loop

End Sub

Creería que me puede estar faltando la definición de alguna función o
algo así, pero dejo la inquietud por si alguien puede, quiere y desea
darme una mano con el tema.

Gracias desde ya!
 

Leer las respuestas

#1 Benito Merino
29/02/2012 - 22:55 | Informe spam
On 25 feb, 05:23, "\"El-Profe\"" wrote:
Hola foro:

No he podido hacer que se introduzca el resultado del cálculo de una
fórmula en la celda activa de una determinada hoja de Excel
(introduciendo la fórmula si funciona).

El ejercicio consiste generar un numero aleatorio entre 1 y 150;
buscar dicho aleatorio en el rango "Col_Ind" (columna izquierda de una
tabla) y con la combinación de =INDICE() y =COINCIDIR() debe devolver
la palabra que está en el rango "Col_01" (columna central de la tabla)
y colocarla en la celda activa; luego avanza dos celdas a la derecha y
hace otro tanto con la palabra que está en el rango "Col_02" (columna
derecha de la tabla) y deber colocarla en la celda activa. El proceso
se repite hasta completar 35 palabras de un total de 300 (siempre
serán diferentes por el uso del # aleatorio)

Para lo anterior tengo el siguiente código que debe funcionar en una
"HojaDeTrabajo", con la información que se encuentra en la hoja
"Base":

Sub Palabras()
Set miRInd = Worksheets("Base").Range("Col_Ind")
Set miRUno = Worksheets("Base").Range("Col_01")
Set miRDos = Worksheets("Base").Range("Col_02")
  Range("D:D").ClearContents
  Range("F:F").ClearContents
  Range("E2").Select

  Do While contador < 35

    ActiveCell.Offset(1, -1).Select
' Falla en la siguiente linea cuando al llegar a la función
"Aleatorio.Entre()" [RandBetween]
    ActiveCell.Offset(0, 0) > Application.WorksheetFunction.Index(miRUno, Match(RandBetween(1, 150),
miRInd, 0))
    ActiveCell.Offset(0, 2).Select
    ActiveCell.Offset(0, 0) > Application.WorksheetFunction.Index(miRDos, Match(RandBetween(1, 150),
miRInd, 0))
    contador = contador + 1
    ActiveCell.Offset(0, -1).Select

   Loop

End Sub

Creería que me puede estar faltando la definición de alguna función o
algo así, pero dejo la inquietud por si alguien puede, quiere y desea
darme una mano con el tema.

Gracias desde ya!



Hola.

Puedes construir la fórmula aleatorio.entre como:

aleatorio= rnd()*(intervalo_superior-intervalo_inferior)
+intervalo_inferior

si quieres la parte entera entonces:


aleatorio=int( rnd()*(intervalo_superior-intervalo_inferior)
+intervalo_inferior)

Saludos,

Preguntas similares