Formula con resultado en otra celda

14/09/2005 - 17:40 por Engel | Informe spam
Yo no se si lo que prentedo se puede hacer, aunque estoy convencido
que en Excel se puede hacer casi todo.

A ver si me explico, en una hoja donde controlamos la clasificacion de
una competicion deportiva, tengo una formula tal como esta en la celda
P12 :

=SI($C12="";"";SI(P$7="";"";" NP"))

Esta formula lo que hace es poner NP en la celda P12 del competidor
cuando este no participa en una de las competiciones.

Bien, pero resulta que si participa, al introducir en su celda P12 los
puntos obtenidos, la formula desaparece.

Que ocurre, que cada cierto tiempo hay que reintroducir todas las
formulas que han desaparecido, y lo que prentendo hacer es meter la
formula en otro sitio, algo asi como poner en X12

SI C12 esta en blanco, dejar en blanco P12, SI P7 esta en blanco,
dejar P12 en blanco, si no poner en P12 "NP"

He probado con esta formula en X12
=SI($C12="";"";SI(P$7=" ";P12="";P12="NP"))

Pero esta formula no hace nada en la celda P12 cuando pretendo que
ponga NP

Que manera hay de hacer esto.

Notas aclaratorias:
En la columna C estan los nombres nombres de los participantes
En cada columna de la fila 7 esta la fecha de cada competicion
Asi que la celda del competidor en la fecha en que no participa debe
quedar con NP cuando introducimos la fecha de la ultima competicion

Saludos,
Engel

Preguntas similare

Leer las respuestas

#1 KL
14/09/2005 - 19:09 | Informe spam
Hola Engel,


He probado con esta formula en X12
=SI($C12="";"";SI(P$7=" ";P12="";P12="NP"))
Pero esta formula no hace nada en la celda P12 cuando pretendo que



En primer lugar, aclarar que las formulas en Excel no pueden crear, eliminar
ni modificar las propiedas de otros objetos (entre otros las celdas de la
hoja de calculo), sino devolver valores. Por tanto introduciendo una formula
o valor en una celda no puedes modificar el valor de otra a menos que la
otra obtenga el valor mediante su propia formula.

Notas aclaratorias:
En la columna C estan los nombres nombres de los participantes
En cada columna de la fila 7 esta la fecha de cada competicion
Asi que la celda del competidor en la fecha en que no participa debe
quedar con NP cuando introducimos la fecha de la ultima competicion



Esta tarea la puedes realizar mediante macros asociados a un evento de la
hoja. Por ejemplo,

suponiendo que...
1) todos los participantes tendran un nombre en la columna [C] empezando
por la fila [12]
2) las fechas de competiciones empiezan en la columna [D] y acaban el la [P]

prueba hacer lo siguiente:

1) haz clic-derecho sobre el nombre de la hoja en cuestion en una de las
pesta?as de la parte de abajo de la ventana de Excel.
2) Elige la opcion Ver Codigo para abrir el editor VBA.
3) En la ventana mas grande a la derecha pega el codigo de abajo
4) Ahora pulsa Alt+F11 para volver a la hoja.
5) prueba introducir nombres en la columna [A] a partir de la fila [12] para
abajo, o cambiar/eliminar/introducir fechas en en el rango [D7:P7]

Saludos,
KL

'-inicio codigo--
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C12:C65536,D7:P7")) _
Is Nothing Then Exit Sub

Dim UCelda As Range, c As Range, i As Integer
Set UCelda = Cells(Rows.Count, "C").End(xlUp)
If UCelda.Row < 12 Then Exit Sub
With Application
.EnableEvents = False
.ScreenUpdating = False
For Each c In Range(Cells(12, "C"), UCelda)
For i = 4 To 16
If IsEmpty(c) Then
c.Offset(, 1).Resize(, 12) = ""
Else
If IsEmpty(Cells(7, i)) Then
Cells(c.Row, i) = "NP"
ElseIf Cells(c.Row, i) = "NP" Then
Cells(c.Row, i) = ""
End If
End If
Next i
Next c
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
'-fin codigo--
Respuesta Responder a este mensaje
#2 Engel
15/09/2005 - 08:42 | Informe spam
On Wed, 14 Sep 2005 19:09:22 +0200, "KL"
wrote:

Hola Engel,


He probado con esta formula en X12
=SI($C12="";"";SI(P$7=" ";P12="";P12="NP"))
Pero esta formula no hace nada en la celda P12 cuando pretendo que



En primer lugar, aclarar que las formulas en Excel no pueden crear, eliminar
ni modificar las propiedas de otros objetos (entre otros las celdas de la
hoja de calculo), sino devolver valores. Por tanto introduciendo una formula
o valor en una celda no puedes modificar el valor de otra a menos que la
otra obtenga el valor mediante su propia formula.

Notas aclaratorias:
En la columna C estan los nombres nombres de los participantes
En cada columna de la fila 7 esta la fecha de cada competicion
Asi que la celda del competidor en la fecha en que no participa debe
quedar con NP cuando introducimos la fecha de la ultima competicion



Esta tarea la puedes realizar mediante macros asociados a un evento de la
hoja. Por ejemplo,

suponiendo que...
1) todos los participantes tendran un nombre en la columna [C] empezando
por la fila [12]
2) las fechas de competiciones empiezan en la columna [D] y acaban el la [P]

prueba hacer lo siguiente:

1) haz clic-derecho sobre el nombre de la hoja en cuestion en una de las
pesta?as de la parte de abajo de la ventana de Excel.
2) Elige la opcion Ver Codigo para abrir el editor VBA.
3) En la ventana mas grande a la derecha pega el codigo de abajo
4) Ahora pulsa Alt+F11 para volver a la hoja.
5) prueba introducir nombres en la columna [A] a partir de la fila [12] para
abajo, o cambiar/eliminar/introducir fechas en en el rango [D7:P7]

Saludos,
KL

'-inicio codigo--
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C12:C65536,D7:P7")) _
Is Nothing Then Exit Sub

Dim UCelda As Range, c As Range, i As Integer
Set UCelda = Cells(Rows.Count, "C").End(xlUp)
If UCelda.Row < 12 Then Exit Sub
With Application
.EnableEvents = False
.ScreenUpdating = False
For Each c In Range(Cells(12, "C"), UCelda)
For i = 4 To 16
If IsEmpty(c) Then
c.Offset(, 1).Resize(, 12) = ""
Else
If IsEmpty(Cells(7, i)) Then
Cells(c.Row, i) = "NP"
ElseIf Cells(c.Row, i) = "NP" Then
Cells(c.Row, i) = ""
End If
End If
Next i
Next c
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
'-fin codigo--



Hola KL y muchas gracias por tu aportacion.

Pero esto hace justo lo contrario de lo que pido, este codigo lo que
hace es que cuando introduzco un nombre en la celda C12 me rellena
todas las celdas desde C12 hasta P60 con el "NP" aunque no tenga fecha
puesta en la celda D7 y cuando pongo la fecha en D7 desaparecen los NP
de esta columna D pero el resto de columnas continua con el NP.

Lo que yo necesito es que cuando la celda que contiene el nombre (la
C) este en blanco, todas las celdas hasta la columna P esten tambien
en blanco, cuando la celda C contenga un nombre y al mismo tiempo la
columna correspondiente a la competicion celebrada en la fecha que se
indica en la linea 7 en esta columna solo, aparezca el NP que
significa que ese dia la persona no participa, pero solo este dia.

Si quieres ver el resultado que tiene que dar, mira aqui:
http://www.tirdefona.com/clasificac...202005.htm

Como podras ver, la ultima columna antes del Total, esta en blanco y
hasta que se introduce la fecha no debe de aparecer el "NP" en ningun
participante, en el momento que se introduce la fecha, aparece el "NP"
y luego si ha participado ese dia, se introducen los puntos de cada
participante en su celda correspondiente, y es cuando se machaca la
formula que hay en cada celda, y lo que pretendo es hacer lo mismo,
pero sin una formula en la celda donde se introducen los puntos.

Saludos,
Engel
Respuesta Responder a este mensaje
#3 KL
15/09/2005 - 10:07 | Informe spam
Hola Engel,

cuando la celda que contiene el nombre (la
C) este en blanco, todas las celdas hasta la columna P esten tambien
en blanco, cuando la celda C contenga un nombre y al mismo tiempo la
columna correspondiente a la competicion celebrada en la fecha que se
indica en la linea 7 en esta columna solo, aparezca el NP que
significa que ese dia la persona no participa, pero solo este dia.



Desde luego no lo habia entendido asi. Prueba el codigo de abajo, a ver que
tal ahora.

Saludos,
KL

'-inicio codigo--
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C12:C65536,D7:P7")) _
Is Nothing Then Exit Sub

Dim UCelda As Range, c As Range, i As Integer
Set UCelda = Cells(Rows.Count, "C").End(xlUp)
If UCelda.Row < 12 Then Exit Sub
With Application
.EnableEvents = False
.ScreenUpdating = False
For Each c In Range(Cells(12, "C"), UCelda)
For i = 4 To 16
If IsEmpty(c) Then
c.Offset(, 1).Resize(, 13) = ""
Else
If IsEmpty(Cells(7, i)) Then
Cells(c.Row, i) = ""
ElseIf IsEmpty(Cells(c.Row, i)) Then
Cells(c.Row, i) = "NP"
End If
End If
Next i
Next c
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
'-fin codigo--

Si no quieres que se borren los datos previamente introducidos en la tabla
al borrar nombres y/o fechas podrias usar este codigo alternativo:

'-inicio codigo--
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C12:C65536,D7:P7")) _
Is Nothing Then Exit Sub

Dim UCelda As Range, c As Range, i As Integer
Set UCelda = Cells(Rows.Count, "C").End(xlUp)
If UCelda.Row < 12 Then Exit Sub
With Application
.EnableEvents = False
.ScreenUpdating = False
For Each c In Range(Cells(12, "C"), UCelda)
For i = 4 To 16
If Not (IsEmpty(Cells(7, i)) Or IsEmpty(c)) _
And IsEmpty(Cells(c.Row, i)) Then
Cells(c.Row, i) = "NP"
End If
Next i
Next c
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
'-fin codigo--
Respuesta Responder a este mensaje
#4 Engel
15/09/2005 - 11:35 | Informe spam
On Thu, 15 Sep 2005 10:07:08 +0200, "KL"
wrote:

Hola Engel,

cuando la celda que contiene el nombre (la
C) este en blanco, todas las celdas hasta la columna P esten tambien
en blanco, cuando la celda C contenga un nombre y al mismo tiempo la
columna correspondiente a la competicion celebrada en la fecha que se
indica en la linea 7 en esta columna solo, aparezca el NP que
significa que ese dia la persona no participa, pero solo este dia.



Desde luego no lo habia entendido asi. Prueba el codigo de abajo, a ver que
tal ahora.

Saludos,
KL

'-inicio codigo--
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C12:C65536,D7:P7")) _
Is Nothing Then Exit Sub

Dim UCelda As Range, c As Range, i As Integer
Set UCelda = Cells(Rows.Count, "C").End(xlUp)
If UCelda.Row < 12 Then Exit Sub
With Application
.EnableEvents = False
.ScreenUpdating = False
For Each c In Range(Cells(12, "C"), UCelda)
For i = 4 To 16
If IsEmpty(c) Then
c.Offset(, 1).Resize(, 13) = ""
Else
If IsEmpty(Cells(7, i)) Then
Cells(c.Row, i) = ""
ElseIf IsEmpty(Cells(c.Row, i)) Then
Cells(c.Row, i) = "NP"
End If
End If
Next i
Next c
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
'-fin codigo--



Bueno ahora parece que si funciona, pero como he modificado la hoja,
siendo ahora los rangos para nombres de participante C8:C60 y el de
fechas E7:R7, y claro he tenido que tocar tu codigo, que ahora tengo
asi:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C8:C65536,E7:R7")) _
Is Nothing Then Exit Sub

Dim UCelda As Range, c As Range, i As Integer
Set UCelda = Cells(Rows.Count, "C").End(xlUp)
If UCelda.Row < 8 Then Exit Sub
With Application
.EnableEvents = False
.ScreenUpdating = False
For Each c In Range(Cells(8, "C"), UCelda)
For i = 5 To 18
If IsEmpty(c) Then
c.Offset(, 1).Resize(, 13) = ""
Else
If IsEmpty(Cells(7, i)) Then
Cells(c.Row, i) = ""
ElseIf IsEmpty(Cells(c.Row, i)) Then
Cells(c.Row, i) = " NP"
End If
End If
Next i
Next c
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub

Con este codigo, cuando pongo la fecha en E7 se rellenan todas las
celdas desde E7 hasta E60 con el "NP" y no deberia ser asi, sino que
solo tiene que salir en "NP" en las lineas donde C este completado con
un nombre, por ejemplo yo solo competo la C8 asi que desde C9 hasta
C60 deberia quedarse en blanco.

Algo de lo que he tocado esta mal, verdad?

Saludos,
Engel
Respuesta Responder a este mensaje
#5 KL
15/09/2005 - 12:18 | Informe spam
Hola Engel,

he modificado la hoja,
siendo ahora los rangos para nombres de participante C8:C60 y el de
fechas E7:R7



Por si piensas volver a midificar los rangos te envio un codigo mas facil de
modificar. Solo tienes que cambiar las variables al principio del macro.

Saludos,
KL

'-inicio codigo--
Private Sub Worksheet_Change(ByVal Target As Range)
Dim colNombres As String, filNombresIni As Long
Dim colFechasIni As String, colFechasfin As String
Dim filFechas As Long

colNombres = "C"
filNombresIni = 8
colFechasIni = "E"
colFechasfin = "R"
filFechas = 7

If Intersect(Target, _
Range(colNombres & filNombresIni & ":" & colNombres & 65536, _
colFechasIni & filFechas & ":" & colFechasfin & filFechas)) _
Is Nothing Then Exit Sub

Dim UCelda As Range, c As Range, i As Integer
Set UCelda = Cells(Rows.Count, colNombres).End(xlUp)
If UCelda.Row < 8 Then Exit Sub
With Application
.EnableEvents = False
.ScreenUpdating = False
For Each c In Range(Cells(8, colNombres), UCelda)
For i = Cells(1, colFechasIni).Column To _
Cells(1, colFechasfin).Column
If IsEmpty(c) Then
Range(Cells(c.Row, colFechasIni), _
Cells(c.Row, colFechasfin)) = ""
Else
If IsEmpty(Cells(filFechas, i)) Then
Cells(c.Row, i) = ""
ElseIf IsEmpty(Cells(c.Row, i)) Then
Cells(c.Row, i) = "NP"
End If
End If
Next i
Next c
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
'-fin codigo--
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida