Consulta de lista desplegable en Excel usando VBA

Se incorporó
15 Enero 2020
Mensajes
160
Hola, estoy haciendo una lista desplegable dependiente en excel, la primera columna es de Regiones y la segunda ciudades(dependiente)
al usar el siguiente código me anda bien para solo para la primera celda, (A2), no se como determinar que sea para toda la columna A. lo que busco es que si la región se cambia, la celda de al lado (ciudad) se muestre en blanco en blanco si ya habia sido modificada (por ejemplo en la celda A2 selecciono Arica, en la B2 selecciono Putre,pero luego en la misma celda A2 cambio a O'higgins que me deje en blanco la celda de al lado, y no me siga mostrando Putre)

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = “$A$2” Then
Range(“B2”) = “”

End If
End Sub

este código hace lo que busco pero solo me funciona en la celda A2, dado que es la que se "especifica", como puedo ampliar para que se aplique en toda la columna A?

saludos!
 

Ariadno

Pajarito Viejo
Se incorporó
5 Diciembre 2008
Mensajes
658
Hola, estoy haciendo una lista desplegable dependiente en excel, la primera columna es de Regiones y la segunda ciudades(dependiente)
al usar el siguiente código me anda bien para solo para la primera celda, (A2), no se como determinar que sea para toda la columna A. lo que busco es que si la región se cambia, la celda de al lado (ciudad) se muestre en blanco en blanco si ya habia sido modificada (por ejemplo en la celda A2 selecciono Arica, en la B2 selecciono Putre,pero luego en la misma celda A2 cambio a O'higgins que me deje en blanco la celda de al lado, y no me siga mostrando Putre)

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = “$A$2” Then
Range(“B2”) = “”

End If
End Sub

este código hace lo que busco pero solo me funciona en la celda A2, dado que es la que se "especifica", como puedo ampliar para que se aplique en toda la columna A?

saludos!
Sacale el $ al 2 y prueba:
"$A2"
 
Upvote 0

prsepulv

Capo
Se incorporó
19 Diciembre 2006
Mensajes
414
Hola, estoy haciendo una lista desplegable dependiente en excel, la primera columna es de Regiones y la segunda ciudades(dependiente)
al usar el siguiente código me anda bien para solo para la primera celda, (A2), no se como determinar que sea para toda la columna A. lo que busco es que si la región se cambia, la celda de al lado (ciudad) se muestre en blanco en blanco si ya habia sido modificada (por ejemplo en la celda A2 selecciono Arica, en la B2 selecciono Putre,pero luego en la misma celda A2 cambio a O'higgins que me deje en blanco la celda de al lado, y no me siga mostrando Putre)

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = “$A$2” Then
Range(“B2”) = “”

End If
End Sub

este código hace lo que busco pero solo me funciona en la celda A2, dado que es la que se "especifica", como puedo ampliar para que se aplique en toda la columna A?

saludos!
Le hice tu pregunta a ChatGPT...
Esto dijo:

Puedes usar un ciclo For para iterar sobre las celdas en la columna A y comparar su valor con el valor anterior. Si el valor ha cambiado, puedes limpiar el contenido de la celda correspondiente en la columna B. Aquí te muestro el código:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 Then ' Si la celda modificada está en la columna A
Dim i As Integer
For i = 2 To Target.Row ' Iterar desde la fila 2 hasta la fila de la celda modificada
If Cells(i, 1).Value <> Cells(i, 1).Value2 Then ' Si el valor ha cambiado
Cells(i, 2) = "" ' Limpiar la celda correspondiente en la columna B
End If
Next i
End If

End Sub

De esta manera, cada vez que se modifique una celda en la columna A, se ejecutará el ciclo y se comparará el valor actual con el valor anterior, y si ha cambiado, se limpiará el contenido de la celda correspondiente en la columna B.

Podrías probar...






Sent from my 2201116SG using Tapatalk
 
Upvote 0
Se incorporó
15 Enero 2020
Mensajes
160
Le hice tu pregunta a ChatGPT...
Esto dijo:

Puedes usar un ciclo For para iterar sobre las celdas en la columna A y comparar su valor con el valor anterior. Si el valor ha cambiado, puedes limpiar el contenido de la celda correspondiente en la columna B. Aquí te muestro el código:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 Then ' Si la celda modificada está en la columna A
Dim i As Integer
For i = 2 To Target.Row ' Iterar desde la fila 2 hasta la fila de la celda modificada
If Cells(i, 1).Value <> Cells(i, 1).Value2 Then ' Si el valor ha cambiado
Cells(i, 2) = "" ' Limpiar la celda correspondiente en la columna B
End If
Next i
End If

End Sub

De esta manera, cada vez que se modifique una celda en la columna A, se ejecutará el ciclo y se comparará el valor actual con el valor anterior, y si ha cambiado, se limpiará el contenido de la celda correspondiente en la columna B.

Podrías probar...






Sent from my 2201116SG using Tapatalk
tampoco me resultó, la copié tal cual pero no pasó nada.
 
Última modificación:
Upvote 0

apip

Capo
Se incorporó
22 Abril 2008
Mensajes
238
tienes que ocupar el ActiveCell.Address , te dejo el codigo. a mi me funciono.


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim letra As String
Dim nombrecelda As String

letra = "A"
nombrecelda = Trim(Mid(ActiveCell.Address, 2, 1))

If nombrecelda = letra Then


If Target.Address = ActiveCell.Address Then
Range("B2") = ""


End If
End If


End Sub
 
Upvote 0
Se incorporó
15 Enero 2020
Mensajes
160
tienes que ocupar el ActiveCell.Address , te dejo el codigo. a mi me funciono.


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim letra As String
Dim nombrecelda As String

letra = "A"
nombrecelda = Trim(Mid(ActiveCell.Address, 2, 1))

If nombrecelda = letra Then


If Target.Address = ActiveCell.Address Then
Range("B2") = ""


End If
End If


End Sub
lo copie y no me funciona tampoco :zippypozo.
 
Upvote 0

apip

Capo
Se incorporó
22 Abril 2008
Mensajes
238
el código lo que hace borra la celda b2 siempre y cuando haya un cambio en la columna A, podrías ser más especifico que parte no funciono?
 
Upvote 0
Se incorporó
15 Enero 2020
Mensajes
160
el código lo que hace borra la celda b2 siempre y cuando haya un cambio en la columna A, podrías ser más especifico que parte no funciono?
lo que hace es que si en la colmuna A dice region ARICA y en la B (aparecen luego de seleccionar ARICA) Putre y Arica, al cambiar la celda de la columna A a otra region, ponte Santiago, en la celda B debe quedar en blanco y no seguir mostrando una ciudad de la región anteriormente seleccionada.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address Like "$A$*" Then
Target.Offset(0, 1) = ""
End If
End Sub


con ese me sirvió, pero al queder usarlo nuevamente para las columnas D y E me cambia nada
 
Upvote 0

apip

Capo
Se incorporó
22 Abril 2008
Mensajes
238
obvio que no te cambio si solo le estas diciendo al Target.Offset(0, 1) = "" que el contenido de la celda B se quede en blanco, para hacer lo mismo para las columnas d y e ingresa lo siguiente debajo del Target.Offset(0, 1) = ""

Target.Offset(0, 3) = ""
Target.Offset(0, 4) = "
 
Upvote 0
Se incorporó
15 Enero 2020
Mensajes
160
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address Like "$A$*" Then
Target.Offset(0, 1) = ""
End If
If Target.Address Like "$D$*" Then
Target.Offset(0, 1) = ""
End If
End Sub

use ese y me funcinó perfe.
 
Upvote 0
Subir