Ir a una celda cuando se deja en blanco otra dentro de un rango.

Hola.

Estoy buscando una macro que me vaya a una celda en concreto (I1) cuando deje una celda en blanco dentro del rango H1:H36.

Es decir, yo quiero introducir una serie de datos manualmente en la columna H y, en el momento que deje una en blanco, pase automáticamente a la celda I1.

Un saludo, y gracias.

1 respuesta

Respuesta
1

Te mando mi solución:

Esta macro es un evento por lo que tienes que copiarla en el objeto hoja donde están los datos, no se copia en un módulo.

Cuando escribas algo en el rango H1:H31 la macro examinará si quedan celdas en blanco si fuera así te sale un mensaje informativo y se desplaza a la celda I1.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("h1:h36")) Is Nothing Then
blancos = Application.WorksheetFunction.CountBlank(Range("h1:h36"))
If blancos <> 0 Then
MsgBox "el rango H1:H31 tiene " & blancos & " celdas en blanco, nos desplazamos a la celda I1"
Range("i1").Select
End If
End If
End Sub

recuerda finalizar y puntuar

Hola,

Ante todo, gracias, pero no es exactamente lo que estoy buscando. El problema no es que me mire si hay celdas en blanco en el rango H1:H36, si no que sólo lo mire en la última celda con la que trabaje. Me explico: el libro en cuestión me calcula automáticamente unos determinados pesos en función de la suma de cada uno de los palés que yo introduzco en el rango H1:H36 y de otros datos que introduzca manualmente. Entonces, yo voy metiendo los diferentes pesos en H1, H2, ..., Hn, pero al llegar a H(n+1) dejo la celda en blanco porque ya no hay más pesos. Ahí es cuando tiene que saltar a I1.

Si el número de pesos que meto fuera siempre el mismo no hay problema, pero unas veces sólo es uno y otras 25, entonces no sé cómo decirle a la macro esto.

Dentro de lo que yo he pensado (pero que no he conseguido llevar a la práctica) destaco dos posibilidades:

1.- Llego a la celda Hn (que he llenado) y me pasa a la celda H(n+1). Vuelvo a darle al intro (o al tabulador) de forma que dejo esa celda vacía. Ahí es cuando la macro me llevaría a I1.

2.- Parecido a lo anterior, sólo que me cuenta las celdas vacías entre la celda activa y H1, de manera que cuando haya 2 salte a I1.

Por último, comentarte que he logrado algo, aunque no es exactamente lo que quería. Simplemente he hecho que cuando introduzca un valor no numérico en el rango me salte a la celda I1. La macro queda:

Private Sub Worksheet_Change(ByVal Target As Range)
For Each c In Range("H1:H36") 'Si introduzco un valor no numérico en el rango salta a I1
If Not IsNumeric(c) Then
Range("I1").Select
End If
Next

End sub

Un saludo

Pues entonces prueba con esto que responde a u idea número 2

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("h1:h36")) Is Nothing Then
blancos = Application.WorksheetFunction.CountBlank(Range("h1:h" & Target.Row))
If blancos > 0 Then
Range("i1").Select
End If
End If
End Sub

Hola.

Me temo que esta última macro no me hace nada...

En el siguiente link te mando un video demostrativo del funcionamiento de la macro.

http://es.tbox.ws/29YLeZ

Vale, no me hacía nada porque lo que yo hacía era presionar intro dos veces seguidas (que era lo que yo quería decir antes), no dejar un hueco y luego meter un segundo dato. Gracias por la aclaración.

¿Habría alguna forma de que fuera presionando dos veces seguidas el intro? ¿O no lo es debido a que no realizo ningún cambio en la celda?

Gracias

Prueba con la macro así:

Ahora la macro te cuenta los espacios que has dejato atrás y si son dos salta a la I1

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("h1:h36")) Is Nothing Then
blancos = Application.WorksheetFunction.CountBlank(Range("h1:h" & Target.Row))
If blancos = 2 Then
Range("i1").Select
End If
End If
End Sub

Nada, no hay manera. El código funciona perfectamente, pero no es lo que quiero. No sé si es que busco algo muy raro o simplemente no se puede. El problema de las dos últimas macro que me has puesto (problema porque no es lo que quiero, porque funcionar, funcionan) es que sólo saltan a I1 cuando introduces un dato posterior.

Supongo que eso es precisamente lo complicado, ya que si no realizas un cambio en la celda, entonces no la tiene en cuenta. He tratado de hacerlo mediante activecell.address, pero tampoco consigo nada.

Al final me quedaré con este código (por si alguien busca algo similar a lo mio, a lo mejor se apaña):

Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveCell.Column = 8 Then
For Each c In Range("H1:H36")
If c.Value = "-" Then
Range("I1").Select 'Si introduzco - salta a I1
End If
If c.Value = "+" Then
Range("B4").Select 'Si introduzco + salta a B4
End If
Next
End If
If ActiveCell.Column = 9 Then
For Each c In Range("I1:I36")
If c.Value = "-" Then
Range("E17").Select 'Si introduzco - salta a E17
End If
If c.Value = "+" Then
Range("B15").Select 'Si introduzco + salta a B15
End If
Next
End If
Select Case Target.Address
Case "$B$4"
Range("B8").Select 'Al modificar la celda salta a B8
Case "$B$8"
Range("G9").Select
Case "$G$9"
Range("E3").Select
Case "$E$17"
Range("E3").Select
Case "$B$15"
Range("E3").Select
End Select
End Sub

Ok, cherockki pues si te parece finaliza la consulta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas