¿Cómo puedo obtener el nº de fila en función del contenido de la c

24/06/2009 - 12:28 por José-Luis | Informe spam
Hola a todos
Quería saber si se puede obtener el nº de fila a partir del contenido de la
celda, si este a su vez lo puedo localizar con un IF (u otro método mejor)
que haga la comparación correspondiente para encontrar dicha celda.
Más o menos sería (lógicamente está mal pues no funciona o no logro hacerlo
funcionar)

'Rellena el combo 4
'Antes he llegado a la hoja adecuada por medio del combo 3

Private Sub Combobox3_Change()

ComboBox4.Clear

'Seleccionamos la fila correspondiente

Do While Not IsEmpty(ActiveCell)

If Left(ActiveCell.Value, 4) =
Left(ComboBox3.List(ComboBox3.ListIndex), 4) Then

Fila = ¿? 'Esto es lo que quiero saber y si la estructura está bien
o la tengo que cambiar

Cells(Fila, 2).Select

'vamos a llenar dinámicamente el combobox
'dependiendo de lo elegido
'Hasta que no encuentre una columna vacía
'que llene todo con datos
ComboBox4.AddItem ActiveCell.Value
End If
'saltamos columnna
ActiveCell.Offset(0, 1).Select
Loop

End Sub

Si hay un método mejor (que seguro lo habrá) me gustaría que me lo
comentarais.
Gracias de antemano por vuestra atención.
José-Luis

Preguntas similare

Leer las respuestas

#6 José-Luis
25/06/2009 - 17:36 | Informe spam
Hola Juan
Por cierto, Felicidades! pues ayer (24 Jun) fue San Juan (no se de donde
eres o estás pero en España es una de las fiestas del santoral más conocida y
se celebra mucho con hogueras por la noche y mejor en la playa).
Antes de probar (intentando cambiar lo del rango ya veremos si me aclaro) lo
que me has mandado, decirte que el rango en A es variable y accedo
previamente a cada una de las hojas posibles (son 9 posibilidades
A,B,C,D,E,F,G,H e I como iniciales de los códigos posibles, recuerda el G01A
que te indicaba, también existen el A01A, el B01A. todos ellos
clasificados por hojas). Como bien dices, los datos a cargar en el combo4
están en la columna B siempre (de cada hoja) e igualmente son variables, es
decir que de cada código pueden "colgar" 1, 2, 3...n columnas.
Si puedes modificar el código con esta penúltima aclaración mientras yo voy
"intentando aprender" cambiando lo que me has mandado.
Gracias, de nuevo.
Saludos
José-Luis

"Juan M" wrote:

Hola Jose Luis,

Ahora está más claro,

a ver si esto te sirve:


Private Sub ComboBox3_Change()
Dim c As Range
Dim celda As Range
Me.ComboBox4.Clear

Set c = Range("A1:A20").Find(Me.ComboBox3.List(Me.ComboBox1.ListIndex),
_
LookIn:=xlValues, lookat:=xlPart)

For Each celda In Range(Range("B" & c.Row), Range("B" &
c.Row).End(xlToRight))
Me.ComboBox4.AddItem celda.Value
Next celda
End Sub


He supuesto que los datos van desde A1 a A20 para cargar el combobox3 y que
los datos que quieres cargar en el combobox4 se encuentran a partir de la
columna B

Un saludo,
Juan



"José-Luis" escribió
> Hola Juan M
>
> Lo que busco es posicionarme (activar y situarme en la celda que contenga
> el
> dato a encontrar) en la celda porque de ella "cuelgan" (en la misma fila
> pero
> en columnas sucesivas) una serie de datos que pretendo colocar en un
> combo(4)
> para elegir finalmente uno. Al combo 3 le "pertenecen" los datos que
> tienen
> los 4 dígitos primeros de cada dato (situados siempre en la columna A1 del
> libro correspondiente. En el combo 4 aparecerían los datos ordenados todos
> con los 4 primeros dígitos y un quinto que empieza por una nueva letra que
> hace diferentes a cada uno de ls datos (sólo pondré los códigos)
> Así los datos
> G01A. (Fila1,Columna A1)
> G01B. (Fila2,Columna A1)
> G01C. (Fila3,Columna A1)
> .
> .
> .
> estarían colocados en el combo 3 y a partir de la selección en ese combo
> me debería rellenar el combo 4, suponiendo que he elegido el G01A
> lo siguiente
> G01AA .(Fila1,Columna2)
> G01AB .(Fila1,Columna3)
> G01AC .(Fila1,Columna4)
> .
> .
> .
> En resumen, seleccionando (si se y la puedo activar) la celda donde está
> el
> G01A o la correspondiente que me rellene el combo 4 con todo lo que
> dependa
> de ella (en columnas suceivas) en la misma fila que su "origen" G01A
> Espero que ahora si me haya explicado.
> Saludos y gracias de nuevo
> José-Luis
>
>
> "Juan M" wrote:
>
>> Hola Jose Luis,
>>
>> Pues la verdad, a mi no me ha quedado del todo claro. Pero vamos a
>> intentar
>> a ver que sale:
>>
>> Si la columna A está llena de ese tipo de referencias
>> > G01A Grupos electrógenos y motores eléctricos G01AA Con motor diesel,
>> > accionamiento directo y más columnas dependientes de G01A
>> > G01B Transformadores G01BA Transformadores y más columnas dependientes
>> > de
>> > G01B
>> > G01C Producción y transformación de energía hidráulica G01CA Centrales
>> > hidráulicas y más columnas dependientes de G01C
>>
>> El método find tiene la posibilidad de buscar en una parte de la celda
>>
>> set c=range("A1:A10").find(Left(ComboBox3.List(ComboBox3.ListIndex), 4),_
>> LookIn:=xlValues, lookat:=xlPart)
>>
>> de esta manera busca en el rango algo que sea igual a los cuatro primeros
>> caracteres de lo seleccionado en el combo.
>>
>> Luego para conocer la fila le preguntamos a c cual es la fila : c.row
>>
>> Y ya estaría, pero es probable que todo esto sea más complejo de lo que
>> indicas, en cuyo caso intenta explicar un poco más como es el modelo.
>>
>> Un saludo,
>> Juan
>>
>> "José-Luis" escribió
>> > Hola Juan M
>> >
>> > Los datos a utilizar en el left están todos y siemppre en la columna A1
>> > de
>> > la hoja seleccionada (son varias posibles), por filas y de esa columna
>> > "cuelgan" o dependen, por las columnas siguientes los datos que quiero
>> > que
>> > me
>> > rellene automáticamente en el combo.
>> > Ejemplo:
>> > G01A Grupos electrógenos y motores eléctricos G01AA Con motor diesel,
>> > accionamiento directo y más columnas dependientes de G01A
>> > G01B Transformadores G01BA Transformadores y más columnas dependientes
>> > de
>> > G01B
>> > G01C Producción y transformación de energía hidráulica G01CA Centrales
>> > hidráulicas y más columnas dependientes de G01C
>> > y así sucesivamente.
>> > Así los 4 primeros caracterespor la izquierda son los que creo que me
>> > definen mejor la busqueda pues No se repiten.
>> > Con ello debería obtener el nº de fila para posicionarme en la celda
>> > correspondiente y a través de la segunda columna (la que ya empieza a
>> > discriminar por el quinto digito) me llene el combo.
>> > No se si me he explicado
>> > Gracias
>> > José-Luis
>> >
>> >
>> >
>> >
>> > "Juan M" wrote:
>> >
>> >>
>> >> "José-Luis" escribió
>> >> > Hola a todos
>> >> > Quería saber si se puede obtener el nº de fila a partir del
>> >> > contenido
>> >> > de
>> >> > la
>> >> > celda, si este a su vez lo puedo localizar con un IF (u otro método
>> >> > mejor)
>> >> > que haga la comparación correspondiente para encontrar dicha celda.
>> >> > Más o menos sería (lógicamente está mal pues no funciona o no logro
>> >> > hacerlo
>> >> > funcionar)
>> >> >
>> >> > 'Rellena el combo 4
>> >> > 'Antes he llegado a la hoja adecuada por medio del combo 3
>> >> >
>> >> > Private Sub Combobox3_Change()
>> >> >
>> >> > ComboBox4.Clear
>> >> >
>> >> > 'Seleccionamos la fila correspondiente
>> >> >
>> >> > Do While Not IsEmpty(ActiveCell)
>> >> >
>> >> > If Left(ActiveCell.Value, 4) > >> >> > Left(ComboBox3.List(ComboBox3.ListIndex), 4) Then
>> >> >
>> >> > Fila = ¿? 'Esto es lo que quiero saber y si la estructura
>> >> > está
>> >> > bien
>> >> > o la tengo que cambiar
>> >> >
>> >> > Cells(Fila, 2).Select
>> >> >
>> >> > 'vamos a llenar dinámicamente el combobox
>> >> > 'dependiendo de lo elegido
>> >> > 'Hasta que no encuentre una columna vacía
>> >> > 'que llene todo con datos
>> >> > ComboBox4.AddItem ActiveCell.Value
>> >> > End If
>> >> > 'saltamos columnna
>> >> > ActiveCell.Offset(0, 1).Select
>> >> > Loop
>> >> >
>> >> > End Sub
>> >> >
>> >> > Si hay un método mejor (que seguro lo habrá) me gustaría que me lo
>> >> > comentarais.
>> >> > Gracias de antemano por vuestra atención.
>> >> > José-Luis
>> >>
>> >> Hola José Luis,
>> >>
>> >> Sin saber que es lo que pretendes hacer, para encontrar un valor en un
>> >> listado puedes emplear el método find del objeto range.
>> >>
>> >> Como no tienes definido un rango en el código expuesto he improvisado
>> >> una
>> >> lista en el rango C5:C12
>> >> El valor a buscar lo he puesto en A1 y el resultado se muestra en un
>> >> mensaje.
>> >> Al no conocer el motivo del empleo del left, ni que es lo que buscas y
>> >> comparas te dejo un ejemplo un poco genérico.
>> >>
>> >> Comentas más detalles?
>> >>
>> >> Un saludo,
>> >> Juan
>> >>
>> >>
>> >> Sub BuscaDato()
>> >>
>> >> Dim c As Range
>> >> Set c = Range("C5:C12").Find(Range("a1"), LookIn:=xlValues,
>> >> lookat:=xlWhole)
>> >> Debug.Print c.Row
>> >> Set c = Nothing
>> >>
>> >> End Sub
>> >>
>> >>
>> >>
>> >>
>>



Respuesta Responder a este mensaje
#7 Juan M
25/06/2009 - 17:54 | Informe spam
Hola Jose Luis,

decirte que el rango en A es variable y accedo
previamente a cada una de las hojas posibles (son 9 posibilidades
A,B,C,D,E,F,G,H e I como iniciales de los códigos posibles



Ups, esto es nuevo, ¿como haces para llenar el combo3 con los códigos
correspondientes?

El código captura los datos de la hoja activa. Si necesitas que sea alguna
en particular puedes anteponer a range la hoja de donde quieras capturar los
datos de esta manera:

Worksheets("A").Range("A1:A20") .

Para cargar los datos en el combobox3 emplea el siguiente código
ComboBox3.RowSource = Range(Range("A1"), Range("A" &
Rows.Count).End(xlUp)).Address

Claro está que debes modificar la hoja de la que toma los datos, ya que en
un principio, repito, es de la hoja activa.

El otro código debe rellenar el combo4 con los valores que hay en la fila
donde se encuentra el código desde la columna B hasta donde acabe.

Espero aclararte algo.

Un saludo y gracias,
Juan.

"José-Luis" escribió
Hola Juan
Por cierto, Felicidades! pues ayer (24 Jun) fue San Juan (no se de donde
eres o estás pero en España es una de las fiestas del santoral más
conocida y
se celebra mucho con hogueras por la noche y mejor en la playa).
Antes de probar (intentando cambiar lo del rango ya veremos si me aclaro)
lo
que me has mandado, decirte que el rango en A es variable y accedo
previamente a cada una de las hojas posibles (son 9 posibilidades
A,B,C,D,E,F,G,H e I como iniciales de los códigos posibles, recuerda el
G01A
que te indicaba, también existen el A01A, el B01A. todos ellos
clasificados por hojas). Como bien dices, los datos a cargar en el combo4
están en la columna B siempre (de cada hoja) e igualmente son variables,
es
decir que de cada código pueden "colgar" 1, 2, 3...n columnas.
Si puedes modificar el código con esta penúltima aclaración mientras yo
voy
"intentando aprender" cambiando lo que me has mandado.
Gracias, de nuevo.
Saludos
José-Luis

"Juan M" wrote:

Hola Jose Luis,

Ahora está más claro,

a ver si esto te sirve:


Private Sub ComboBox3_Change()
Dim c As Range
Dim celda As Range
Me.ComboBox4.Clear

Set c =
Range("A1:A20").Find(Me.ComboBox3.List(Me.ComboBox1.ListIndex),
_
LookIn:=xlValues, lookat:=xlPart)

For Each celda In Range(Range("B" & c.Row), Range("B" &
c.Row).End(xlToRight))
Me.ComboBox4.AddItem celda.Value
Next celda
End Sub


He supuesto que los datos van desde A1 a A20 para cargar el combobox3 y
que
los datos que quieres cargar en el combobox4 se encuentran a partir de la
columna B

Un saludo,
Juan



"José-Luis" escribió
> Hola Juan M
>
> Lo que busco es posicionarme (activar y situarme en la celda que
> contenga
> el
> dato a encontrar) en la celda porque de ella "cuelgan" (en la misma
> fila
> pero
> en columnas sucesivas) una serie de datos que pretendo colocar en un
> combo(4)
> para elegir finalmente uno. Al combo 3 le "pertenecen" los datos que
> tienen
> los 4 dígitos primeros de cada dato (situados siempre en la columna A1
> del
> libro correspondiente. En el combo 4 aparecerían los datos ordenados
> todos
> con los 4 primeros dígitos y un quinto que empieza por una nueva letra
> que
> hace diferentes a cada uno de ls datos (sólo pondré los códigos)
> Así los datos
> G01A. (Fila1,Columna A1)
> G01B. (Fila2,Columna A1)
> G01C. (Fila3,Columna A1)
> .
> .
> .
> estarían colocados en el combo 3 y a partir de la selección en ese
> combo
> me debería rellenar el combo 4, suponiendo que he elegido el G01A
> lo siguiente
> G01AA .(Fila1,Columna2)
> G01AB .(Fila1,Columna3)
> G01AC .(Fila1,Columna4)
> .
> .
> .
> En resumen, seleccionando (si se y la puedo activar) la celda donde
> está
> el
> G01A o la correspondiente que me rellene el combo 4 con todo lo que
> dependa
> de ella (en columnas suceivas) en la misma fila que su "origen" G01A
> Espero que ahora si me haya explicado.
> Saludos y gracias de nuevo
> José-Luis
>
>
> "Juan M" wrote:
>
>> Hola Jose Luis,
>>
>> Pues la verdad, a mi no me ha quedado del todo claro. Pero vamos a
>> intentar
>> a ver que sale:
>>
>> Si la columna A está llena de ese tipo de referencias
>> > G01A Grupos electrógenos y motores eléctricos G01AA Con motor
>> > diesel,
>> > accionamiento directo y más columnas dependientes de G01A
>> > G01B Transformadores G01BA Transformadores y más columnas
>> > dependientes
>> > de
>> > G01B
>> > G01C Producción y transformación de energía hidráulica G01CA
>> > Centrales
>> > hidráulicas y más columnas dependientes de G01C
>>
>> El método find tiene la posibilidad de buscar en una parte de la celda
>>
>> set c=range("A1:A10").find(Left(ComboBox3.List(ComboBox3.ListIndex),
>> 4),_
>> LookIn:=xlValues, lookat:=xlPart)
>>
>> de esta manera busca en el rango algo que sea igual a los cuatro
>> primeros
>> caracteres de lo seleccionado en el combo.
>>
>> Luego para conocer la fila le preguntamos a c cual es la fila : c.row
>>
>> Y ya estaría, pero es probable que todo esto sea más complejo de lo
>> que
>> indicas, en cuyo caso intenta explicar un poco más como es el modelo.
>>
>> Un saludo,
>> Juan
>>
>> "José-Luis" escribió
>> > Hola Juan M
>> >
>> > Los datos a utilizar en el left están todos y siemppre en la columna
>> > A1
>> > de
>> > la hoja seleccionada (son varias posibles), por filas y de esa
>> > columna
>> > "cuelgan" o dependen, por las columnas siguientes los datos que
>> > quiero
>> > que
>> > me
>> > rellene automáticamente en el combo.
>> > Ejemplo:
>> > G01A Grupos electrógenos y motores eléctricos G01AA Con motor
>> > diesel,
>> > accionamiento directo y más columnas dependientes de G01A
>> > G01B Transformadores G01BA Transformadores y más columnas
>> > dependientes
>> > de
>> > G01B
>> > G01C Producción y transformación de energía hidráulica G01CA
>> > Centrales
>> > hidráulicas y más columnas dependientes de G01C
>> > y así sucesivamente.
>> > Así los 4 primeros caracterespor la izquierda son los que creo que
>> > me
>> > definen mejor la busqueda pues No se repiten.
>> > Con ello debería obtener el nº de fila para posicionarme en la celda
>> > correspondiente y a través de la segunda columna (la que ya empieza
>> > a
>> > discriminar por el quinto digito) me llene el combo.
>> > No se si me he explicado
>> > Gracias
>> > José-Luis
>> >
>> >
>> >
>> >
>> > "Juan M" wrote:
>> >
>> >>
>> >> "José-Luis" escribió
>> >> > Hola a todos
>> >> > Quería saber si se puede obtener el nº de fila a partir del
>> >> > contenido
>> >> > de
>> >> > la
>> >> > celda, si este a su vez lo puedo localizar con un IF (u otro
>> >> > método
>> >> > mejor)
>> >> > que haga la comparación correspondiente para encontrar dicha
>> >> > celda.
>> >> > Más o menos sería (lógicamente está mal pues no funciona o no
>> >> > logro
>> >> > hacerlo
>> >> > funcionar)
>> >> >
>> >> > 'Rellena el combo 4
>> >> > 'Antes he llegado a la hoja adecuada por medio del combo 3
>> >> >
>> >> > Private Sub Combobox3_Change()
>> >> >
>> >> > ComboBox4.Clear
>> >> >
>> >> > 'Seleccionamos la fila correspondiente
>> >> >
>> >> > Do While Not IsEmpty(ActiveCell)
>> >> >
>> >> > If Left(ActiveCell.Value, 4) >> >> >> > Left(ComboBox3.List(ComboBox3.ListIndex), 4) Then
>> >> >
>> >> > Fila = ¿? 'Esto es lo que quiero saber y si la estructura
>> >> > está
>> >> > bien
>> >> > o la tengo que cambiar
>> >> >
>> >> > Cells(Fila, 2).Select
>> >> >
>> >> > 'vamos a llenar dinámicamente el combobox
>> >> > 'dependiendo de lo elegido
>> >> > 'Hasta que no encuentre una columna vacía
>> >> > 'que llene todo con datos
>> >> > ComboBox4.AddItem ActiveCell.Value
>> >> > End If
>> >> > 'saltamos columnna
>> >> > ActiveCell.Offset(0, 1).Select
>> >> > Loop
>> >> >
>> >> > End Sub
>> >> >
>> >> > Si hay un método mejor (que seguro lo habrá) me gustaría que me
>> >> > lo
>> >> > comentarais.
>> >> > Gracias de antemano por vuestra atención.
>> >> > José-Luis
>> >>
>> >> Hola José Luis,
>> >>
>> >> Sin saber que es lo que pretendes hacer, para encontrar un valor en
>> >> un
>> >> listado puedes emplear el método find del objeto range.
>> >>
>> >> Como no tienes definido un rango en el código expuesto he
>> >> improvisado
>> >> una
>> >> lista en el rango C5:C12
>> >> El valor a buscar lo he puesto en A1 y el resultado se muestra en
>> >> un
>> >> mensaje.
>> >> Al no conocer el motivo del empleo del left, ni que es lo que
>> >> buscas y
>> >> comparas te dejo un ejemplo un poco genérico.
>> >>
>> >> Comentas más detalles?
>> >>
>> >> Un saludo,
>> >> Juan
>> >>
>> >>
>> >> Sub BuscaDato()
>> >>
>> >> Dim c As Range
>> >> Set c = Range("C5:C12").Find(Range("a1"), LookIn:=xlValues,
>> >> lookat:=xlWhole)
>> >> Debug.Print c.Row
>> >> Set c = Nothing
>> >>
>> >> End Sub
>> >>
>> >>
>> >>
>> >>
>>



Respuesta Responder a este mensaje
#8 José-Luis
25/06/2009 - 19:25 | Informe spam
Hola Juan
este es el código que utilizo para el combo 3 y el 4 ya modificado con lo
que me has mandado anteriormente (no me funciona como debiera, por lo que
algo he hecho mal)
Comentarte que (el mio) es primitivo porque no se mucho de esto. (Casi mejor
decir que se más bien poco)

'Rellena el combo 3 (Este a su vez proviene del 2 y el 2 del 1)

Private Sub Combobox2_Change()

ComboBox3.Clear

'Al inciar el formulario,

'seleccionamos la hoja con los datos del grupo elegido

Dim I_n As String 'I_n = Inicial naturalezas
Dim Familia As String 'Familia = Familia

I_n = Left(ComboBox2.List(ComboBox2.ListIndex), 1)

'I_n, que es un string, sería igual a: la primera letra

If I_n = "A" Then Worksheets("Hoja2").Select

If I_n = "B" Then Worksheets("Hoja3").Select

If I_n = "C" Then Worksheets("Hoja4").Select

If I_n = "D" Then Worksheets("Hoja5").Select

If I_n = "E" Then Worksheets("Hoja6").Select

If I_n = "F" Then Worksheets("Hoja7").Select

If I_n = "G" Then Worksheets("Hoja8").Select

If I_n = "H" Then Worksheets("Hoja9").Select

If I_n = "I" Then Worksheets("Hoja10").Select

'Seleccionamos la celda que toca según la elección en el combo 2

Familia_elegida = ComboBox2.List(ComboBox2.ListIndex)

Fila = 1

Cells(Fila, 1).Select

Do While Not IsEmpty(ActiveCell)

If Left(ActiveCell.Value, 3) = Left(ComboBox2.List(ComboBox2.ListIndex), 3)
Then

'añadimos el dato

ComboBox3.AddItem ActiveCell.Value

End If

'bajamos una fila

ActiveCell.Offset(1, 0).Select
Loop

End Sub

'Rellena el combo 4

Private Sub ComboBox3_Change()
Dim c As Range
Dim celda As Range
Me.ComboBox4.Clear

Set c = Range("A1",
Range("A1").End(xlDown)).Find(Me.ComboBox3.List(Me.ComboBox1.ListIndex),
LookIn:=xlValues, lookat:=xlPart)

For Each celda In Range(Range("B" & c.Row), Range("B" &
c.Row).End(xlToRight))
Me.ComboBox4.AddItem celda.Value
Next celda
End Sub

Gracias
José-Luis

"Juan M" wrote:

Hola Jose Luis,

> decirte que el rango en A es variable y accedo
> previamente a cada una de las hojas posibles (son 9 posibilidades
> A,B,C,D,E,F,G,H e I como iniciales de los códigos posibles

Ups, esto es nuevo, ¿como haces para llenar el combo3 con los códigos
correspondientes?

El código captura los datos de la hoja activa. Si necesitas que sea alguna
en particular puedes anteponer a range la hoja de donde quieras capturar los
datos de esta manera:

Worksheets("A").Range("A1:A20") .

Para cargar los datos en el combobox3 emplea el siguiente código
ComboBox3.RowSource = Range(Range("A1"), Range("A" &
Rows.Count).End(xlUp)).Address

Claro está que debes modificar la hoja de la que toma los datos, ya que en
un principio, repito, es de la hoja activa.

El otro código debe rellenar el combo4 con los valores que hay en la fila
donde se encuentra el código desde la columna B hasta donde acabe.

Espero aclararte algo.

Un saludo y gracias,
Juan.

"José-Luis" escribió
> Hola Juan
> Por cierto, Felicidades! pues ayer (24 Jun) fue San Juan (no se de donde
> eres o estás pero en España es una de las fiestas del santoral más
> conocida y
> se celebra mucho con hogueras por la noche y mejor en la playa).
> Antes de probar (intentando cambiar lo del rango ya veremos si me aclaro)
> lo
> que me has mandado, decirte que el rango en A es variable y accedo
> previamente a cada una de las hojas posibles (son 9 posibilidades
> A,B,C,D,E,F,G,H e I como iniciales de los códigos posibles, recuerda el
> G01A
> que te indicaba, también existen el A01A, el B01A. todos ellos
> clasificados por hojas). Como bien dices, los datos a cargar en el combo4
> están en la columna B siempre (de cada hoja) e igualmente son variables,
> es
> decir que de cada código pueden "colgar" 1, 2, 3...n columnas.
> Si puedes modificar el código con esta penúltima aclaración mientras yo
> voy
> "intentando aprender" cambiando lo que me has mandado.
> Gracias, de nuevo.
> Saludos
> José-Luis
>
> "Juan M" wrote:
>
>> Hola Jose Luis,
>>
>> Ahora está más claro,
>>
>> a ver si esto te sirve:
>>
>>
>> Private Sub ComboBox3_Change()
>> Dim c As Range
>> Dim celda As Range
>> Me.ComboBox4.Clear
>>
>> Set c =
>> Range("A1:A20").Find(Me.ComboBox3.List(Me.ComboBox1.ListIndex),
>> _
>> LookIn:=xlValues, lookat:=xlPart)
>>
>> For Each celda In Range(Range("B" & c.Row), Range("B" &
>> c.Row).End(xlToRight))
>> Me.ComboBox4.AddItem celda.Value
>> Next celda
>> End Sub
>>
>>
>> He supuesto que los datos van desde A1 a A20 para cargar el combobox3 y
>> que
>> los datos que quieres cargar en el combobox4 se encuentran a partir de la
>> columna B
>>
>> Un saludo,
>> Juan
>>
>>
>>
>> "José-Luis" escribió
>> > Hola Juan M
>> >
>> > Lo que busco es posicionarme (activar y situarme en la celda que
>> > contenga
>> > el
>> > dato a encontrar) en la celda porque de ella "cuelgan" (en la misma
>> > fila
>> > pero
>> > en columnas sucesivas) una serie de datos que pretendo colocar en un
>> > combo(4)
>> > para elegir finalmente uno. Al combo 3 le "pertenecen" los datos que
>> > tienen
>> > los 4 dígitos primeros de cada dato (situados siempre en la columna A1
>> > del
>> > libro correspondiente. En el combo 4 aparecerían los datos ordenados
>> > todos
>> > con los 4 primeros dígitos y un quinto que empieza por una nueva letra
>> > que
>> > hace diferentes a cada uno de ls datos (sólo pondré los códigos)
>> > Así los datos
>> > G01A. (Fila1,Columna A1)
>> > G01B. (Fila2,Columna A1)
>> > G01C. (Fila3,Columna A1)
>> > .
>> > .
>> > .
>> > estarían colocados en el combo 3 y a partir de la selección en ese
>> > combo
>> > me debería rellenar el combo 4, suponiendo que he elegido el G01A
>> > lo siguiente
>> > G01AA .(Fila1,Columna2)
>> > G01AB .(Fila1,Columna3)
>> > G01AC .(Fila1,Columna4)
>> > .
>> > .
>> > .
>> > En resumen, seleccionando (si se y la puedo activar) la celda donde
>> > está
>> > el
>> > G01A o la correspondiente que me rellene el combo 4 con todo lo que
>> > dependa
>> > de ella (en columnas suceivas) en la misma fila que su "origen" G01A
>> > Espero que ahora si me haya explicado.
>> > Saludos y gracias de nuevo
>> > José-Luis
>> >
>> >
>> > "Juan M" wrote:
>> >
>> >> Hola Jose Luis,
>> >>
>> >> Pues la verdad, a mi no me ha quedado del todo claro. Pero vamos a
>> >> intentar
>> >> a ver que sale:
>> >>
>> >> Si la columna A está llena de ese tipo de referencias
>> >> > G01A Grupos electrógenos y motores eléctricos G01AA Con motor
>> >> > diesel,
>> >> > accionamiento directo y más columnas dependientes de G01A
>> >> > G01B Transformadores G01BA Transformadores y más columnas
>> >> > dependientes
>> >> > de
>> >> > G01B
>> >> > G01C Producción y transformación de energía hidráulica G01CA
>> >> > Centrales
>> >> > hidráulicas y más columnas dependientes de G01C
>> >>
>> >> El método find tiene la posibilidad de buscar en una parte de la celda
>> >>
>> >> set c=range("A1:A10").find(Left(ComboBox3.List(ComboBox3.ListIndex),
>> >> 4),_
>> >> LookIn:=xlValues, lookat:=xlPart)
>> >>
>> >> de esta manera busca en el rango algo que sea igual a los cuatro
>> >> primeros
>> >> caracteres de lo seleccionado en el combo.
>> >>
>> >> Luego para conocer la fila le preguntamos a c cual es la fila : c.row
>> >>
>> >> Y ya estaría, pero es probable que todo esto sea más complejo de lo
>> >> que
>> >> indicas, en cuyo caso intenta explicar un poco más como es el modelo.
>> >>
>> >> Un saludo,
>> >> Juan
>> >>
>> >> "José-Luis" escribió
>> >> > Hola Juan M
>> >> >
>> >> > Los datos a utilizar en el left están todos y siemppre en la columna
>> >> > A1
>> >> > de
>> >> > la hoja seleccionada (son varias posibles), por filas y de esa
>> >> > columna
>> >> > "cuelgan" o dependen, por las columnas siguientes los datos que
>> >> > quiero
>> >> > que
>> >> > me
>> >> > rellene automáticamente en el combo.
>> >> > Ejemplo:
>> >> > G01A Grupos electrógenos y motores eléctricos G01AA Con motor
>> >> > diesel,
>> >> > accionamiento directo y más columnas dependientes de G01A
>> >> > G01B Transformadores G01BA Transformadores y más columnas
>> >> > dependientes
>> >> > de
>> >> > G01B
>> >> > G01C Producción y transformación de energía hidráulica G01CA
>> >> > Centrales
>> >> > hidráulicas y más columnas dependientes de G01C
>> >> > y así sucesivamente.
>> >> > Así los 4 primeros caracterespor la izquierda son los que creo que
>> >> > me
>> >> > definen mejor la busqueda pues No se repiten.
>> >> > Con ello debería obtener el nº de fila para posicionarme en la celda
>> >> > correspondiente y a través de la segunda columna (la que ya empieza
>> >> > a
>> >> > discriminar por el quinto digito) me llene el combo.
>> >> > No se si me he explicado
>> >> > Gracias
>> >> > José-Luis
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > "Juan M" wrote:
>> >> >
>> >> >>
>> >> >> "José-Luis" escribió
>> >> >> > Hola a todos
>> >> >> > Quería saber si se puede obtener el nº de fila a partir del
>> >> >> > contenido
>> >> >> > de
>> >> >> > la
>> >> >> > celda, si este a su vez lo puedo localizar con un IF (u otro
>> >> >> > método
>> >> >> > mejor)
>> >> >> > que haga la comparación correspondiente para encontrar dicha
>> >> >> > celda.
>> >> >> > Más o menos sería (lógicamente está mal pues no funciona o no
>> >> >> > logro
>> >> >> > hacerlo
>> >> >> > funcionar)
>> >> >> >
>> >> >> > 'Rellena el combo 4
>> >> >> > 'Antes he llegado a la hoja adecuada por medio del combo 3
>> >> >> >
>> >> >> > Private Sub Combobox3_Change()
>> >> >> >
>> >> >> > ComboBox4.Clear
>> >> >> >
>> >> >> > 'Seleccionamos la fila correspondiente
>> >> >> >
>> >> >> > Do While Not IsEmpty(ActiveCell)
>> >> >> >
>> >> >> > If Left(ActiveCell.Value, 4) > >> >> >> > Left(ComboBox3.List(ComboBox3.ListIndex), 4) Then
>> >> >> >
>> >> >> > Fila = ¿? 'Esto es lo que quiero saber y si la estructura
>> >> >> > está
>> >> >> > bien
>> >> >> > o la tengo que cambiar
>> >> >> >
>> >> >> > Cells(Fila, 2).Select
>> >> >> >
>> >> >> > 'vamos a llenar dinámicamente el combobox
>> >> >> > 'dependiendo de lo elegido
>> >> >> > 'Hasta que no encuentre una columna vacía
>> >> >> > 'que llene todo con datos
>> >> >> > ComboBox4.AddItem ActiveCell.Value
>> >> >> > End If
>> >> >> > 'saltamos columnna
>> >> >> > ActiveCell.Offset(0, 1).Select
>> >> >> > Loop
>> >> >> >
>> >> >> > End Sub
>> >> >> >
>> >> >> > Si hay un método mejor (que seguro lo habrá) me gustaría que me
>> >> >> > lo
>> >> >> > comentarais.
>> >> >> > Gracias de antemano por vuestra atención.
>> >> >> > José-Luis
>> >> >>
>> >> >> Hola José Luis,
>> >> >>
>> >> >> Sin saber que es lo que pretendes hacer, para encontrar un valor en
>> >> >> un
>> >> >> listado puedes emplear el método find del objeto range.
>> >> >>
>> >> >> Como no tienes definido un rango en el código expuesto he
>> >> >> improvisado
>> >> >> una
>> >> >> lista en el rango C5:C12
>> >> >> El valor a buscar lo he puesto en A1 y el resultado se muestra en
>> >> >> un
>> >> >> mensaje.
>> >> >> Al no conocer el motivo del empleo del left, ni que es lo que
>> >> >> buscas y
>> >> >> comparas te dejo un ejemplo un poco genérico.
>> >> >>
>> >> >> Comentas más detalles?
>> >> >>
>> >> >> Un saludo,
>> >> >> Juan
>> >> >>
>> >> >>
>> >> >> Sub BuscaDato()
>> >> >>
Respuesta Responder a este mensaje
#9 Juan M
25/06/2009 - 21:31 | Informe spam
Hola José Luis,

en el procedimiento
Private Sub ComboBox3_Change()



la linea
Set c = Range("A1",
Range("A1").End(xlDown)).Find(Me.ComboBox3.List(Me.ComboBox1.ListIndex),
LookIn:=xlValues, lookat:=xlPart)



está equivocada, debes cambiarla por esta otra
Set c = Range(Range("A1", _
Range("A1").End(xlDown)).Find(Me.ComboBox3.List(Me.ComboBox1.ListIndex),
LookIn:=xlValues, lookat:=xlPart)

En principio al seleccionar previamente la hoja de la que vas a extraer los
datos no deberías tener problemas para cargar los datos en los combo.

Un saludo,
Juan

PD. Voy a estar unos días sin conexión a internet, si ves te urge mucho
intenta volver a poner la consulta o espera a ver si alguien le da
seguimiento a hilo.

"José-Luis" escribió
Hola Juan
este es el código que utilizo para el combo 3 y el 4 ya modificado con lo
que me has mandado anteriormente (no me funciona como debiera, por lo que
algo he hecho mal)
Comentarte que (el mio) es primitivo porque no se mucho de esto. (Casi
mejor
decir que se más bien poco)

'Rellena el combo 3 (Este a su vez proviene del 2 y el 2 del 1)

Private Sub Combobox2_Change()

ComboBox3.Clear

'Al inciar el formulario,

'seleccionamos la hoja con los datos del grupo elegido

Dim I_n As String 'I_n = Inicial naturalezas
Dim Familia As String 'Familia = Familia

I_n = Left(ComboBox2.List(ComboBox2.ListIndex), 1)

'I_n, que es un string, sería igual a: la primera letra

If I_n = "A" Then Worksheets("Hoja2").Select

If I_n = "B" Then Worksheets("Hoja3").Select

If I_n = "C" Then Worksheets("Hoja4").Select

If I_n = "D" Then Worksheets("Hoja5").Select

If I_n = "E" Then Worksheets("Hoja6").Select

If I_n = "F" Then Worksheets("Hoja7").Select

If I_n = "G" Then Worksheets("Hoja8").Select

If I_n = "H" Then Worksheets("Hoja9").Select

If I_n = "I" Then Worksheets("Hoja10").Select

'Seleccionamos la celda que toca según la elección en el combo 2

Familia_elegida = ComboBox2.List(ComboBox2.ListIndex)

Fila = 1

Cells(Fila, 1).Select

Do While Not IsEmpty(ActiveCell)

If Left(ActiveCell.Value, 3) = Left(ComboBox2.List(ComboBox2.ListIndex),
3)
Then

'añadimos el dato

ComboBox3.AddItem ActiveCell.Value

End If

'bajamos una fila

ActiveCell.Offset(1, 0).Select
Loop

End Sub

'Rellena el combo 4

Private Sub ComboBox3_Change()
Dim c As Range
Dim celda As Range
Me.ComboBox4.Clear

Set c = Range("A1",
Range("A1").End(xlDown)).Find(Me.ComboBox3.List(Me.ComboBox1.ListIndex),
LookIn:=xlValues, lookat:=xlPart)

For Each celda In Range(Range("B" & c.Row), Range("B" &
c.Row).End(xlToRight))
Me.ComboBox4.AddItem celda.Value
Next celda
End Sub

Gracias
José-Luis

Respuesta Responder a este mensaje
#10 José-Luis
25/06/2009 - 22:13 | Informe spam
Hola Juan

Con el cambio que me sugieres tampoco va (o no soy capaz de hacerlo ir). Me
he puesto a "probar" (qué fuerza y valor nos da el desconocimiento!) y me va
con

Set c = Range("A1",
Range("A1").End(xlDown)).Find(Me.ComboBox3.List(Me.ComboBox3.ListIndex),
LookIn:=xlValues, lookat:=xlPart)

donde le he "quitado" el primer Range después del "=" y he cambiado el 1 por
el 3 donde ponías Me.Combobox1.ListIndex
Supongo que habrá sido pura SUERTE.
Muchas gracias por tu ayuda.
José-Luis
P.D.: ¿Vas a poder resistir unos días sin Internet? je,je,je.

"Juan M" wrote:


Hola José Luis,

en el procedimiento
> Private Sub ComboBox3_Change()

la linea
> Set c = Range("A1",
> Range("A1").End(xlDown)).Find(Me.ComboBox3.List(Me.ComboBox1.ListIndex),
> LookIn:=xlValues, lookat:=xlPart)

está equivocada, debes cambiarla por esta otra
Set c = Range(Range("A1", _
Range("A1").End(xlDown)).Find(Me.ComboBox3.List(Me.ComboBox1.ListIndex),
LookIn:=xlValues, lookat:=xlPart)

En principio al seleccionar previamente la hoja de la que vas a extraer los
datos no deberías tener problemas para cargar los datos en los combo.

Un saludo,
Juan

PD. Voy a estar unos días sin conexión a internet, si ves te urge mucho
intenta volver a poner la consulta o espera a ver si alguien le da
seguimiento a hilo.

"José-Luis" escribió
> Hola Juan
> este es el código que utilizo para el combo 3 y el 4 ya modificado con lo
> que me has mandado anteriormente (no me funciona como debiera, por lo que
> algo he hecho mal)
> Comentarte que (el mio) es primitivo porque no se mucho de esto. (Casi
> mejor
> decir que se más bien poco)
>
> 'Rellena el combo 3 (Este a su vez proviene del 2 y el 2 del 1)
>
> Private Sub Combobox2_Change()
>
> ComboBox3.Clear
>
> 'Al inciar el formulario,
>
> 'seleccionamos la hoja con los datos del grupo elegido
>
> Dim I_n As String 'I_n = Inicial naturalezas
> Dim Familia As String 'Familia = Familia
>
> I_n = Left(ComboBox2.List(ComboBox2.ListIndex), 1)
>
> 'I_n, que es un string, sería igual a: la primera letra
>
> If I_n = "A" Then Worksheets("Hoja2").Select
>
> If I_n = "B" Then Worksheets("Hoja3").Select
>
> If I_n = "C" Then Worksheets("Hoja4").Select
>
> If I_n = "D" Then Worksheets("Hoja5").Select
>
> If I_n = "E" Then Worksheets("Hoja6").Select
>
> If I_n = "F" Then Worksheets("Hoja7").Select
>
> If I_n = "G" Then Worksheets("Hoja8").Select
>
> If I_n = "H" Then Worksheets("Hoja9").Select
>
> If I_n = "I" Then Worksheets("Hoja10").Select
>
> 'Seleccionamos la celda que toca según la elección en el combo 2
>
> Familia_elegida = ComboBox2.List(ComboBox2.ListIndex)
>
> Fila = 1
>
> Cells(Fila, 1).Select
>
> Do While Not IsEmpty(ActiveCell)
>
> If Left(ActiveCell.Value, 3) = Left(ComboBox2.List(ComboBox2.ListIndex),
> 3)
> Then
>
> 'añadimos el dato
>
> ComboBox3.AddItem ActiveCell.Value
>
> End If
>
> 'bajamos una fila
>
> ActiveCell.Offset(1, 0).Select
> Loop
>
> End Sub
>
> 'Rellena el combo 4
>
> Private Sub ComboBox3_Change()
> Dim c As Range
> Dim celda As Range
> Me.ComboBox4.Clear
>
> Set c = Range("A1",
> Range("A1").End(xlDown)).Find(Me.ComboBox3.List(Me.ComboBox1.ListIndex),
> LookIn:=xlValues, lookat:=xlPart)
>
> For Each celda In Range(Range("B" & c.Row), Range("B" &
> c.Row).End(xlToRight))
> Me.ComboBox4.AddItem celda.Value
> Next celda
> End Sub
>
> Gracias
> José-Luis
>

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida