REFERENCIA CIRCULAR

18/01/2008 - 20:30 por Orfao | Informe spam
Hola Foristas !
Tengo un perqueño (Gran) problema
en la hoja1 incruste un cuadro de verificacion vinculado a la celda A1
Entonces, tengo en Hoja1: D29=+M29 y M29=+SI(ESERR(hoja2!D32),0,hoja2!D32)
y en hoja2!D32=+SI(hoja1!A1,Hoja1!D29,SI(E20,E29/E20,0))
pero deseo que al activar el cuadro me cambie D29=valor(Hoja2!D32) (No la
formula)
y simultaneamente en Hoja2 me cambie la formula que tengo D32 por el nuevo
valor que tengo en Hoja1!D29
como hacer para evitar el mensaje de referencia circular.?
he intentado lo siguiente.
Private Sub CheckBox1_Change()
Application.DisplayAlerts = False
ActiveCell.Activate
If Me.CheckBox1.Value = False Then
[d29].FormulaR1C1 = "=+RC[9]"
[d29].Locked = True
Else
[d29].Locked = False
[d29] = [m29].Val
[d29].Activate
End If
End Sub




Me alimento del conocimiento de todos

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
18/01/2008 - 22:32 | Informe spam
hola, moises !

en la hoja1 incruste un cuadro de verificacion vinculado a la celda A1
Entonces, tengo en Hoja1: D29=+M29 y M29=+SI(ESERR(hoja2!D32),0,hoja2!D32)
y en hoja2!D32=+SI(hoja1!A1,Hoja1!D29,SI(E20,E29/E20,0))
pero deseo que al activar el cuadro me cambie D29=valor(Hoja2!D32) (No la formula)
y simultaneamente en Hoja2 me cambie la formula que tengo D32 por el nuevo valor que tengo en Hoja1!D29
como hacer para evitar el mensaje de referencia circular.?



1) es realmente necesario usar tus referencias circulares en las formulas que expones ?...
(hasta donde se) la unica forma de hacer validas las referencias circulares (es decir)...
cuando una celda necesita calcular con referencia a los valores en ella misma
es habilitando la opcion de iteraciones en (menu) herramientas / opciones / (ficha) calcular
PERO... debes mantener en perspectiva la posibilidad de que otros resultados no sean los actuales (realmente)
ya que veras de manera permanente que la aplicacion esta esperando un re/calculo ("calcular" en la barra de estado)

2) si activas la opcion de iteraciones (aun con solo 1 iteracion), te toca evaluar que tantos resultados desvarian (p.e.)
a) cada vez que se realice un re/calculo... se correran las n_iteraciones para cada celda con referencias circulares
b) lo anterior, bajo un control de resultados esperados puede ser de utilidad (bajo ciertas circunstancias controladas/conocidas/...)

3) tambien seria bueno si expones cual es el objetivo que buscas con esta intrincada red de "dependencias", ya que...
a) la base de excel como hoja de calculo, es llevar el registro (pista o tracking)
-> de cual/es celda/s depende/n de cual/es otra/s (por lo tanto)
b) si una referencia circular se produce porque alguna/s celda/s llegan a depender de los calculos en ella/s misma/s
excel no siempre es capaz de detectar si la referencia circular ha sido intencional (de manera directa o indirecta) -?-
c) al usar las iteraciones reduces la posibilidad de calculos infinitos (por referencias circulares sin solucion)...
(etc. etc. etc.) :))

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Orfao
19/01/2008 - 00:28 | Informe spam
Hola Hector!
Tratare de explicarme.
La hoja1 es una hoja resumen con los totales de calculos de las diferentes
hojas
en ella tengo D29 que es un factor de gastos administrativos
este se calcula en la hoja2 (Estructura de costos) en d32 y el cual depende
de una relacion de costos directos entre indirectos
luego los costos directos son la suma de marteriales, equipos y personal
para una obra
cuando calculo en otra hoja los Analisis de precios unitarios los afecto por
ese porcentaje administrativo (Hoja1!D29)
pero si cambio algun recurso ese factor varia automaticamente, hasta aqui
todo bien...,pero, en algunos casos me piden que modifique los recursos de
una partida especifica sin afectar las otras por lo que debo mantener el
porcentaje inicial.
es por eso que utilizo el cuadro de verificacion llamado (Calculo
automatico/Manual)

en todo caso... consegui una forma de evitar el mensaje y es eliminando
primeramente la formula (para evitar la referencia circular) y luego le
asigno el nuevo valor:
de esta forma
Private Sub CheckBox1_Change()
Application.DisplayAlerts = False
ActiveCell.Activate
If Me.CheckBox1.Value = False Then
[d29].FormulaR1C1 = "=+RC[9]"
[d29].Locked = True
Else
[d29].Locked = False
[d29] = [m29]
[d29].Activate
End If
End Sub

*****lo siguiente evita que se cree una referencia circular*****

Private Sub CheckBox1_MouseDown(ByVal Button As Integer, ByVal Shift As
Integer, ByVal X As Single, ByVal Y As Single)
[d29] = ""
End Sub

Tal vez tengas una idea mejor ? otra forma de hacerlo ?
la idea (creo) es interceptar cuando se cambie el estado delc ontrol pero
antes de que se calcule el libro. ( o algo asi )
estoy seguro de que podras ayudarme , seguro que si ! GRACIAS...

Me alimento del conocimiento de todos


"Héctor Miguel" wrote:

hola, moises !

> en la hoja1 incruste un cuadro de verificacion vinculado a la celda A1
> Entonces, tengo en Hoja1: D29=+M29 y M29=+SI(ESERR(hoja2!D32),0,hoja2!D32)
> y en hoja2!D32=+SI(hoja1!A1,Hoja1!D29,SI(E20,E29/E20,0))
> pero deseo que al activar el cuadro me cambie D29=valor(Hoja2!D32) (No la formula)
> y simultaneamente en Hoja2 me cambie la formula que tengo D32 por el nuevo valor que tengo en Hoja1!D29
> como hacer para evitar el mensaje de referencia circular.?

1) es realmente necesario usar tus referencias circulares en las formulas que expones ?...
(hasta donde se) la unica forma de hacer validas las referencias circulares (es decir)...
cuando una celda necesita calcular con referencia a los valores en ella misma
es habilitando la opcion de iteraciones en (menu) herramientas / opciones / (ficha) calcular
PERO... debes mantener en perspectiva la posibilidad de que otros resultados no sean los actuales (realmente)
ya que veras de manera permanente que la aplicacion esta esperando un re/calculo ("calcular" en la barra de estado)

2) si activas la opcion de iteraciones (aun con solo 1 iteracion), te toca evaluar que tantos resultados desvarian (p.e.)
a) cada vez que se realice un re/calculo... se correran las n_iteraciones para cada celda con referencias circulares
b) lo anterior, bajo un control de resultados esperados puede ser de utilidad (bajo ciertas circunstancias controladas/conocidas/...)

3) tambien seria bueno si expones cual es el objetivo que buscas con esta intrincada red de "dependencias", ya que...
a) la base de excel como hoja de calculo, es llevar el registro (pista o tracking)
-> de cual/es celda/s depende/n de cual/es otra/s (por lo tanto)
b) si una referencia circular se produce porque alguna/s celda/s llegan a depender de los calculos en ella/s misma/s
excel no siempre es capaz de detectar si la referencia circular ha sido intencional (de manera directa o indirecta) -?-
c) al usar las iteraciones reduces la posibilidad de calculos infinitos (por referencias circulares sin solucion)...
(etc. etc. etc.) :))

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.



Respuesta Responder a este mensaje
#3 Héctor Miguel
19/01/2008 - 04:30 | Informe spam
hola, moises !

__ 1 __
La hoja1 es... resumen con los... calculos de las diferentes hojas
en ella... D29 que es un factor... se calcula en la hoja2... d32
y... depende de una relacion de costos directos entre indirectos
... los costos directos son la suma de marteriales, equipos y personal para una obra
cuando calculo en otra hoja los Analisis de precios unitarios los afecto por ese porcentaje... (Hoja1!D29)
pero si cambio algun recurso ese factor varia automaticamente, hasta aqui todo bien...,pero
en algunos casos me piden que modifique los recursos de una partida especifica sin afectar las otras
por lo que debo mantener el porcentaje inicial. es por eso que utilizo el... (Calculo automatico/Manual)



1) por la "forma" de referencias en tus formulas...

a) (al final de cuentas) habra ocasiones/circunstancias/...
en que las referencias entre las celdas: hoja1!d29 y hoja2!d32 llegaran a ser "inter-dependientes"
donde la una depende de la otra y al mismo tiempo llegan a "depender de si mismas" (la referencia circular)

b) es probable que debas "romper el circulo" buscando condicionar (solo) donde el proceso de calculo lo requiera/permita/...
observa que hoja1!d29 es solo una celda "puente" donde "tratas de confundir" al sistema de calculos de una hoja electronica
para (solo tratar de) que "pierda de vista" que las unicas celdas (realmente) importantes son hoja1!m29 y hoja2!d32
y son las que finalmente "deciden" si de descartan a si mismas o el calculo sigue adelante :-((

c) es mas, puedes prescindir totalmente de hoja1!d29 y sustituir todas sus referencias por hoja1!m29
asi "verias" con mayor claridad donde se esta generando la referencia circular :D

__ 2 __
en todo caso... consegui una forma de evitar el mensaje y es eliminando primeramente la formula
(para evitar la referencia circular) y luego le asigno el nuevo valor: de esta forma
Private Sub CheckBox1_Change()
Application.DisplayAlerts = False
ActiveCell.Activate
If Me.CheckBox1.Value = False Then
[d29].FormulaR1C1 = "=+RC[9]"
[d29].Locked = True
Else
[d29].Locked = False
[d29] = [m29]
[d29].Activate
End If
End Sub
*****lo siguiente evita que se cree una referencia circular*****
Private Sub CheckBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
[d29] = ""
End Sub



2) efectivamente, usar codigo (cero formulas en la hoja de calculo) es una forma de evitar la necesidad de referencias circulares

__ 3 __
la idea (creo) es interceptar cuando se cambie el estado del control pero antes de que se calcule el libro. ( o algo asi )



3) existen formas/variantes/alternativas/... para hacer formulas del tipo (quasi)referencia circular
solo se necesita conocer "el proceso" (que debe hacer y devolver cada parte calculada, y que parte del calculo depende de ahi)
y su orden de calculo (cual calculo se debe hacer antes que otro) y encontrar "donde" se puede "romper el circulo"
y/o hacer "desviaciones" en el calculo en alguna/s parte/s del proceso (que no todo dependa de lo mismo) :D

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 Héctor Miguel
19/01/2008 - 07:11 | Informe spam
hola (de nuevo), moises !

(recapitulando)...

1) la formula en Hoja2!D32 no va a devolver un valor que pueda ser evaluado con la funcion si(eserr(...
(que dicho sea de paso, solo evalua valores de error excepto el de no-disponible -n/a-)
a menos que lo "herede" de su operacion "normal"... -> si(e20,e29/e20,0)

2) por lo anterior, puedes "simplificar" tus formulas dejando solamente las siguientes:
[Hoja1!M29] =Hoja2!D32
[Hoja2!D32] =SI(Hoja1!A1,Hoja1!M29,SI(E20,E29/E20,0))

3) la celda Hoja1!D29 no es necesaria ni puede cumplir funciones de "puente/desviacion/..." para referencias circulares
lo que no puedes hacer, es "preguntale" (por funciones) a excel si alguna celda (y cual) es causa de referencia circular
por lo que podrias/deberias/... cambiar toda referencia a ella por referencias a: -> Hoja1!M29

4) ahora bien, cuando Hoja1!A1 deba aplicarse (verdadero), tendras referencia circular (mas directa que indirecta) ya que:
Hoja1!M29 siempre hace referencia a Hoja2!D32
Hoja2!D32 evalua y hace referencia a Hoja1!M29

-> analiza el comentario del mensaje anterior en el punto 1 inciso a) -> y tambien el comentario del inciso c) :))

5) ahora si... analiza (y comenta) las precedencias y dependencias de tus necesidades de re/calculo
comentados en el punto 1 inciso b) y el punto 3 del mensaje anterior y...

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida