"El-Profe"
unread,Feb 26, 2012, 10:16:08 AM2/26/12You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
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)