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

#6 Engel
15/09/2005 - 12:44 | Informe spam
On Thu, 15 Sep 2005 12:18:58 +0200, "KL"
wrote:

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--




Correcto, pero me sigue poniendo el NP en todas las celdas.

Mira, ahora mismo tengo nombres puestos desde C8:C21 por lo que al
poner la fecha en E7 deberia poner el NP unicamente desde E8:E21 y lo
esta poniendo en E8:E60 y desde E22:E60 debria quedarse en blanco al
no haber nombres en C22:C60

Lamento molestarte tanto, pero es que de codigo VB no tengo ni idea.

Saludos,
Engel
Respuesta Responder a este mensaje
#7 KL
15/09/2005 - 16:05 | Informe spam
Hola Engel,

Enviame la hoja que te da este error al
quitando NOSPAM y PLEASE.

Saludos,
KL


"Engel" wrote in message
news:
On Thu, 15 Sep 2005 12:18:58 +0200, "KL"
wrote:

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--




Correcto, pero me sigue poniendo el NP en todas las celdas.

Mira, ahora mismo tengo nombres puestos desde C8:C21 por lo que al
poner la fecha en E7 deberia poner el NP unicamente desde E8:E21 y lo
esta poniendo en E8:E60 y desde E22:E60 debria quedarse en blanco al
no haber nombres en C22:C60

Lamento molestarte tanto, pero es que de codigo VB no tengo ni idea.

Saludos,
Engel
Respuesta Responder a este mensaje
#8 KL
15/09/2005 - 17:42 | Informe spam
Hola Engel,

Mira, ahora mismo tengo nombres puestos desde C8:C21 por lo que al
poner la fecha en E7 deberia poner el NP unicamente desde E8:E21 y lo
esta poniendo en E8:E60 y desde E22:E60 debria quedarse en blanco al
no haber nombres en C22:C60



Tal y como yo sospechaba el resto de las celdas en la columna [C] no estan
vacias sino devuelven una cadena de texto de longitud 0 ("") a traves de
unas formulas. Prueba el siguiente codigo

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 < filNombresIni Then Exit Sub
With Application
.EnableEvents = False
.ScreenUpdating = False
For Each c In Range(Cells(filNombresIni, colNombres), UCelda)
If c.Value = "" Then
Range(Cells(c.Row, colFechasIni), _
Cells(c.Row, colFechasfin)).Value = ""
Else
For i = Cells(1, colFechasIni).Column To _
Cells(1, colFechasfin).Column
If Cells(filFechas, i) = "" Then
Cells(c.Row, i) = ""
ElseIf Cells(c.Row, i) = "" Then
Cells(c.Row, i) = "NP"
End If
Next i
End If
Next c
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
'-fin codigo--
Respuesta Responder a este mensaje
#9 Engel
15/09/2005 - 18:38 | Informe spam
On Thu, 15 Sep 2005 17:42:13 +0200, "KL"
wrote:

Hola Engel,

Mira, ahora mismo tengo nombres puestos desde C8:C21 por lo que al
poner la fecha en E7 deberia poner el NP unicamente desde E8:E21 y lo
esta poniendo en E8:E60 y desde E22:E60 debria quedarse en blanco al
no haber nombres en C22:C60



Tal y como yo sospechaba el resto de las celdas en la columna [C] no estan
vacias sino devuelven una cadena de texto de longitud 0 ("") a traves de
unas formulas. Prueba el siguiente codigo

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 < filNombresIni Then Exit Sub
With Application
.EnableEvents = False
.ScreenUpdating = False
For Each c In Range(Cells(filNombresIni, colNombres), UCelda)
If c.Value = "" Then
Range(Cells(c.Row, colFechasIni), _
Cells(c.Row, colFechasfin)).Value = ""
Else
For i = Cells(1, colFechasIni).Column To _
Cells(1, colFechasfin).Column
If Cells(filFechas, i) = "" Then
Cells(c.Row, i) = ""
ElseIf Cells(c.Row, i) = "" Then
Cells(c.Row, i) = "NP"
End If
Next i
End If
Next c
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
'-fin codigo--




Perfecto, eres un genio.

Saludos,
Engel
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida