¿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

#1 Juan M
24/06/2009 - 12:43 | Informe spam
"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
#2 José-Luis
24/06/2009 - 14:04 | Informe spam
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
#3 Juan M
24/06/2009 - 22:56 | Informe spam
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
#4 José-Luis
25/06/2009 - 00:21 | Informe spam
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
#5 Juan M
25/06/2009 - 15:53 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida