Asignar valor a una celda, cuando se modifica el valor de otra celda. (Excel 2007)

A tod@s:

Mi duda es la siguiente.

En la celda A3 de mi hoja de cálculo, el usuario debe introducir un nombre de empleado (lo escoge de una lista de diez nombres)

En la celda A4 el usuario debe introducir un valor numérico desde una lista (del 1 al 10)

En la celda A10 aparece el nombre del 1er empleado y en la B10 un valor numérico

En la celda A11 aparece el nombre del 2º empleado y en la celda B11 un valor numérico

Y así sucesivamente hasta llegar al 10º empleado.

Lo que deseo es que cuando el usuario seleccione un empleado de la lista y escoja un valor, automáticamente (o también me valdría pulsando un botón que lanzara una macro), se sume ese valor al número preexistente para ese empleado

Un caso concreto:

En la celda A12 aparece Pepe Pérez y en la celda B12 el número 25

Si selecciono de la lista que hay en A3 el empleado Pepe Pérez y selecciono de la lista que hay en A4 el valor 5, deseo que Excel me muestre en la celda B12 el contenido 30.

¿Alguien puede ayudarme?

1 Respuesta

Respuesta
1

Introduce esta macro en la hoja donde se ejecute

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$4" Then
   For i = 10 To 19
     If LCase(Cells(i, 1)) = LCase([A4]) Then
       Cells(i, 2) = Cells(i, 2) + [B4]
       Exit For
     End If
   Next
End If
End Sub

o Introduce esta otra, las dos hacen lo mismo

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rango As Range
If Target.Address = "$B$4" Then
  Set rango = Range("A10:A19").Find([A4])  
  If Not rango Is Nothing Then
    rango.Offset(0, 1) = rango.Offset(0, 1) + [B4]
  End If
End If
End Sub

Tienes que introducir primero el nombre y después el número, porque es al cambiar este valor cuando se ejecuta la macro. Si quieres introducir dos veces el mismo valor, ya sea para un empleado o para dos tienes que volver a escribír el número, porque solo cuando se ha tecleado y pulsado enter se ejecuta la subrutina.

Si no te gusta ese funcionamiento automático puedes no hacer lo anterior y hacerlo poniendo un botón como decías y asignarle esta macro

Private Sub CommandButton1_Click()
Dim rango As Range
Set rango = Range("A10:A19").Find([A4])
If Not rango Is Nothing Then
  rango.Offset(0, 1) = rango.Offset(0, 1) + [B4]
End If
End Sub

Y eso es todo, espero que te sirva y lo hayas entendido. Si ya está bien no olvides puntuar para poder hacer más preguntas en el futuro.

<p class="scayt-auto" style="background-image: none; background-color: #bcea9f;" data-scayt_autocorrection="je je" data-scayt_autocorrected="jejeje">Muchas gracias por responder tan rápido y de manera tan versátil.

He probado la primera manera y funciona modificando las referencias a las celdas, ya que como no te he pasado la hoja de Excel es normal que alguna fallara. El código en concreto es el siguiente:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$4" Then
 For i = 10 To 19
 If LCase(Cells(i, 1)) = LCase([A3]) Then
 Cells(i, 2) = Cells(i, 2) + [A4]
 Exit For
 End If
 Next
End If
End Sub

Ahora probaré también el resto, adecuando las referencias a las posiciones que comentaba. Pero seguro que también funcionan :)

Me gustaría entender lo que hace este código para poder usarlo en futuras hojas. Creo que lo entiendo todo salvo la línea

If Not rango Is Nothing Then 

Si rango no está vacío (porque ha encontrado A4), tendrá un valor. Entiendo que cualquier valor evalúa a VERDADERO y cero evalúa a FALSO en lo que a preguntas de respuesta lógica se refiere, por lo que Not rango evaluará a FALSO si rango tiene un valor.

Si eso es así, no entiendo qué quiere decir SI FALSO IS Nothing entonces

Un saludo y, de nuevo, muchas gracias.

Si puede parecer paradójico. Pero no, sabiendo el orden de preferencia por defecto de los operadores todo cobra sentido. El operador is tiene más preferencia y se ejecuta antes que el not, con lo cual es como si hubiéramos escrito

If not(Rango is nothing) then

La función find entregará un rango si encontró el empleado o un objeto nulo si no lo encontró. Entonces si no se entrega un objeto nulo es cuando se suma la cantidad al empleado.

Y eso es todo.

Muchas gracias por todo, valeroasm.

Me has ayudado mucho. Espero poder devolver el favor algún día a otra persona que necesite ayuda.

Que tengas un feliz día.

Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas