Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Introducir el cálculo de funciones anidadas en celda activa de Excel?

15 views
Skip to first unread message

"El-Profe"

unread,
Feb 26, 2012, 10:16:08 AM2/26/12
to
No he podido conseguir que una macro VBA introduzca el resultado del
cálculo de una fórmula en la celda activa de una determinada hoja de
Excel (me funciona perfectamente cuando quiero introducir la fórmula
completa).

Aclaraciones:
-Tengo un archivo Excel 2007 con dos hojas; una "HojaDeTrabajo" y una
hoja "Base"
-En la hoja "Base" tengo una tabla de tres columnas y 150 filas
(1ACol Indice = "Col_Ind"; 2ACol 150 palabras = "Col_01" y 3ACol otras
150 palabras = "Col_02")

El procedimiento (en funciones anidades) es más o menos este:
-Se genera un número aleatorio entre 1 y 150; con
=ALEATORIO.ENTRE( , )
-Se busca el número aleatorio en el rango "Col_Ind" (columna
izquierda de una tabla)
-El uso de =INDICE() y =COINCIDIR() combinados, deberá devolver la
palabra que está en el rango "Col_01" (columna central de la tabla) y
colocarla en la celda activa;
-Luego se avanzan dos celdas a la derecha y hace otro tanto (repite
el mismo procedimiento) pero esta vez 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).
El siguiente código debe operar en la "HojaDeTrabajo", con la
información encontrada 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 llega 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

Gracias por la ayuda que me puedan brindar para solucionar el trancón
o para mejorar el procedimiento con un código mas eficiente (que
seguramente hay muchos)
0 new messages