Jump to content
Sign in to follow this  
delvalle

Buscar en LISTA!

Recommended Posts

Perfecto logroastur, un ultima cosa que he visto en el foro pero no tengo ni idea de como lo han hecho, te paso estos links para que puedas ver capturas:

http://www.flickr.com/photos/62263946@N06/5671675031/in/photostream/

http://www.flickr.com/photos/62263946@N06/5671675403/in/photostream

http://www.flickr.com/photos/62263946@N06/5671675751/in/photostream

Con esto mientras escribes en la casilla las letras que quieres te van saliendo los resultados, y así te saltas el paso de ir a la otra casilla de selección B6, supongo que es poner alguna macro haciendo referencia a la hojaValores ColumnaV ListaFiltrada.

Tambien te paso el archivo donde lo vi, pero solo me funciona esto cuando abro el libro en el excel de Mac cuando lo abro en Windows no se me despliega la lista, ni idea de porque!

salu2 y muxisimas gracias!!!

Busqueda tipo Google.zip

Share this post


Link to post
Share on other sites

Buenas es que el archivo que colocas posee una macro que realiza un filtro avanzado, seria adaptar el codigo a mac pero recuerda que en mac2007 y superior no funcionan las macros sino recuerdo mal, si comentas que es lo que deseas obtener se puede realizar modificación adecuando a lo que precisas

por ejemplo la lista filtrada de la columna V de la hoja Valores puede aparecer en la hoja1 sin tener que usar la celda de selección, pero seria conveniente que uindicaras que idea de uso es la que tienes para buscar la solucción más adecuada

un saludo

un saludo

Share this post


Link to post
Share on other sites

hola de nuevo no se si vistes las capturas?, las capturas son cogidas Excel para Mac 2011 asi que supongo que si funcionan las macros en MAC.

Lo que quiero es: selecciono pais, por ejemplo CHINA, selecciono pestaña cualquier letra ciudad y entonces escribo "da" por ejemplo y que automaticamente salgan los 3 resultados que aparecen en la hojaValores Columna V, como se ve en las capturas del otro archivo. basicamente es que los resultados que aparecen en la pestaña B6 seleccione Ciudad aparezcan en E3 tras escribir "da", y que me de la posibilidad de seleccionarlos como aparece en las capturas.

salu2

Share this post


Link to post
Share on other sites

Quiero que si por ejemplo en D6 pongo un PAIS, poe ejemplo CHINA la Columna Auxiliar busque los resultados de CHINA y que la celda A1 de la hoja!Valores se diriga a coger los datos de la celda F6 y que por consiguiente la G6 se despliegen los valores de busqueda correspondiente a CHINA y así cuando en la celda D3 quiera cambiar el pais existente FINLANDIA en este caso a NORUEGA pues que las formulas se fijen en el pais NORUEGA en la celda F3 para devolver los resultados, supongo que para hacer esto haya que cambiar la celda A1 de la hoja!Valores y toda la Columna Auxiliar.

Un salu2 a todos!

Lista5.0.xls.zip

Share this post


Link to post
Share on other sites

Gracias!!!! funciona perfectamente, me puedes decir que significa Option Explicit en el codigo VBA ya que aparece en todas las hojas en la parte de arriba, y si podria quitarlo (YA LO QUITÉ Y NO VEO QUE CAMBIE NADA) ya que tengo otro codigo y con esto me da error, no se porque.

Otra cosa si en una celda tengo: aaaabbbbbbccccc - AABB podria poner en otra celda una fórmula para que me coja los datos a partir del guion, es decir que aparezca AABB. Para que me entiendas en el archivo de arriba, en la celda F cuando pongo las letras para hacer la busqueda y paso a la celda G para coger una de las opciones, pues una vez cogida la opcion que quiero, para que no se quede en F las letras que puse antes, pues poner una formula para que coja lo que pone en la celda G a partir del guión, como dije antes que aparezca AABB o si tiene 2 letras despues del guion pues CC, la cosa es que aparezca todo lo que haya despues del guion, y lo suyo seria pues quitar o que aparezca del color del fondo de la celda a partir del guión de la celda G para que no aparezca repetido.

Resumiendo:

Actualmente aparece asi:

F aa G aaabbbbccccc - AABBC o aaabbbbbccccc - AB

Me gustaría que se viera asi:

F AABBC o AB G aaabbbbccccc o aaabbbbbccccc

Un salu2 y gracias por dedicar tu tiempo en ayudarme!!

Share this post


Link to post
Share on other sites

Buenas teniendo los datos en la celda A1

=SIERROR(DERECHA(A1;LARGO(A1)-SI(CODIGO(IZQUIERDA(DERECHA(A1;LARGO(A1)-
HALLAR("-";A1;1));1))<>32;HALLAR("-";A1;1);HALLAR("-";A1;1)+1));"")

sobre el tema de option explicit es para obligar a declarar las variables, es recomendable su uso precisamente para que no ocurra lo que te paso que posees una macro sin tener declarada alguna variable ( por eso te arrojaba error), puesto que una variable no tiene el mismo funcionmiento si se coloca como String o como Long, Date etc.

un saludo

Share this post


Link to post
Share on other sites

Hola de nuevo, antes no tuve mucho tiempo y por eso no te pude subir el archivo con la explicación, ahora ya en casa te lo puedo subir y así lo ves con tranquilidad y con la explicación que he puesto dentro espero que lo puedas entender, ya que antes no me expliqué muy bien.

Lo miras cuando tengas tiempo y me dices a ver si es posible lo que me gustaria hacer.

Un salu2 a todos y a disfrutar del clásico!!!

PD: si alguien sabe como hacer lo que digo que conteste por favor, no penseis que solo le hago las preguntas a logroastur, que el pobre debe de estar cansado de mi!! :jeje

Lista6.0.xls.zip

Share this post


Link to post
Share on other sites

Muy buena logroastur!!! que grande!!! lo unico que te faltó lo que te puse en el tercer párrafo que dice asi:

si en la celda G decido cambiar, y en el desplegable pongo la casilla en blanco pues que en la celda F se ponga en blanco tambien, ya que ahora si hago esto, por ejemplo en G tengo: KESKO - KESBV, en F sale KESBV perfect!!!! pero si cambio G a blanco, en F sige apareciendo KESBV; por lo que aqui es donde se deberia añadir algun codigo que yo he intentado para que desaparezca KESBV de F y aparezca en blanco G y F.

Yo he intentado añadiendo lo último:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Long

On Error Resume Next

With Target

If .Count > 1 Then Exit Sub

If .Column <> 7 Or .Row < 3 Or .Row > 203 Then Exit Sub

If Range("D" & .Row) <> Empty And .Value <> Empty Then

For i = 1 To Len(.Value)

If Right(Left(.Value, i), 1) = "-" Then Exit For

Next i

Range("F" & .Row).Value = Right(.Value, (Len(.Value) - (i + 1)))

i = Abs(.Row - (WorksheetFunction.Round(.Row / 55, 0) * 55))

End If

End With

If Union(Target, Range("G3:G203")).Address = Range("G3:G203").Address Then

Target.Offset(, -1) = ""

End If

End Sub

Pero directamente una vez que cambie en el desplegable de opcion, siempre aparece en blanco F y no aparece la terminación como aparecia sin la modificación, supongo que sera modificar para que solo se ejecute esta ultima linea de codigo, cuando la celda G la ponga yo en blanco.

Por cierto con el formato condicional no se puede poner las letras de una misma celda en 2 colores diferentes no???

salu2

Share this post


Link to post
Share on other sites

Buenas si te fijas en todo el codigo existe una linea donde si se borra el contenido de la celda de la columna G o el valor es vacio en la lista, se borra el contenido de la celda de la columna F

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
On Error Resume Next
    With Target
        If .Count &gt; 1 Then Exit Sub
        If .Column &lt;&gt; 7 Or .Row &lt; 3 Or .Row &gt; 203 Then Exit Sub
        If Range("D" &amp; .Row) &lt;&gt; Empty And .Value &lt;&gt; Empty Then
            For i = 1 To Len(.Value)
                If Right(Left(.Value, i), 1) = "-" Then Exit For
            Next i
            Range("F" &amp; .Row).Value = Right(.Value, (Len(.Value) - (i + 1)))
            i = Abs(.Row - (WorksheetFunction.Round(.Row / 55, 0) * 55))
            Range("B" &amp; .Row).Font.ColorIndex = i
            Range("D" &amp; .Row).Font.ColorIndex = i
            Range("F" &amp; .Row).Font.ColorIndex = i
            Range("G" &amp; .Row).Font.ColorIndex = i
            Range("B" &amp; .Row).Font.Bold = True
            Range("D" &amp; .Row).Font.Bold = True
            Range("F" &amp; .Row).Font.Bold = True
            Range("G" &amp; .Row).Font.Bold = True
        Else
            Range("B" &amp; .Row).Font.ColorIndex = 0
            Range("D" &amp; .Row).Font.ColorIndex = 0
            Range("F" &amp; .Row).Font.ColorIndex = 0
            Range("G" &amp; .Row).Font.ColorIndex = 0
            Range("B" &amp; .Row).Font.Bold = False
            Range("D" &amp; .Row).Font.Bold = False
            Range("F" &amp; .Row).Font.Bold = False
            Range("G" &amp; .Row).Font.Bold = False
            Range("F" &amp; .Row) = Empty
        End If
    End With
End Sub

en la linea

Range("F" &amp; .Row) = Empty

sobre el tema del color ya te lo realiza la macro en las lineas del font color index, asignando un color según en la fila que se encuentre, pero si lo deseas realizar con formato condicional es colocar dos formatos

por ejemplo

=Y(G3<>0)

y otra

=Y(G3=0)

le asignas un color a cada condición

un saludo

Share this post


Link to post
Share on other sites

Buenas prueba con

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
On Error Resume Next
    With Target
        If .Count &gt; 1 Then Exit Sub
        If .Column &lt;&gt; 7 Or .Row &lt; 3 Or .Row &gt; 203 Then Exit Sub
        If Range("D" &amp; .Row) &lt;&gt; Empty And .Value &lt;&gt; Empty Then
            For i = 1 To Len(.Value)
                If Right(Left(.Value, i), 1) = "-" Then Exit For
            Next i
            Range("F" &amp; .Row).Value = Right(.Value, (Len(.Value) - (i + 1)))
            i = RGB(0, 176, 80)
            If WorksheetFunction.IsEven(.Row) = True Then i = RGB(221, 8, 6)
            Range("B" &amp; .Row).Font.Color = i
            Range("D" &amp; .Row).Font.Color = i
            Range("F" &amp; .Row).Font.Color = i
            Range("G" &amp; .Row).Font.Color = i
            Range("B" &amp; .Row).Font.Bold = True
            Range("D" &amp; .Row).Font.Bold = True
            Range("F" &amp; .Row).Font.Bold = True
            Range("G" &amp; .Row).Font.Bold = True
        Else
            Range("B" &amp; .Row).Font.Color = 0
            Range("D" &amp; .Row).Font.Color = 0
            Range("F" &amp; .Row).Font.Color = 0
            Range("G" &amp; .Row).Font.Color = 0
            Range("B" &amp; .Row).Font.Bold = False
            Range("D" &amp; .Row).Font.Bold = False
            Range("F" &amp; .Row).Font.Bold = False
            Range("G" &amp; .Row).Font.Bold = False
            Range("F" &amp; .Row) = Empty
        End If
    End With
End Sub

un saludo

Share this post


Link to post
Share on other sites

Hola de nuevo!! he probado el código y no me sirve, lo que sigue haciendo es cambiar cada fila de color, pero yo trasteando un poco he dado (modificando tu código) con la cura, que seria esta:

For i = 1 To Len(.Value)

If Left(Right(.Value, i), 1) = "-" Then Exit For

Next i

Range("G" & .Row).Value = Left(.Value, (Len(.Value) - (i + 1)))

Con esto consigo que la Columna G, se quede con todo excepto lo que va del guion(-) hacia delante.

Y con el resto del código que me has proporcionada:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Long

On Error Resume Next

With Target

If .Count > 1 Then Exit Sub

If .Column <> 7 Or .Row < 3 Or .Row > 203 Then Exit Sub

If Range("D" & .Row) <> Empty And .Value <> Empty Then

For i = 1 To Len(.Value)

If Right(Left(.Value, i), 1) = "-" Then Exit For

Next i

Range("F" & .Row).Value = Right(.Value, (Len(.Value) - (i + 1)))

Else

Range("F" & .Row) = Empty

End If

End With

End Sub

Consigo que la Columna F, se quede solo con el texto que va del guion(-) hacia delante.

Lo que no he conseguido y mira que lo he intentado es integrar los dos códigos, por eso pido tu ayuda.

salu2

Share this post


Link to post
Share on other sites

Buenas que es lo que no te funciona pues haber si se coloca algo en la columna F y G se coloroea las celdas según sea par o impar la fila si es par en rojo y sino en verde con codigo de RGB, si se borra o se selcciona blanco en la celda G se restablece el color y se borra el dato de la columna F que es lo que no te funcion?

un saludo

Share this post


Link to post
Share on other sites

Hola logroastur seguramente con tantos mensajes nos hemos liado jeje pero vuelve a mirar la FILA 2 del archivo que te puse en el mensaje anterior (te lo pongo akí de nuevo), resumiendo:

el codigo esta PERFECTO! y hace lo que yo queria pero la ultima cosa que queria es que una vez que en la COLUMNA F se ponga ING.AS como te lo puse en la FILA 2, pues que en la COLUMNA G se ponga solo ING GROEP (quitando la parte que se ha puesto en F).

Pero yo me lie con el tema de los colores y te dije que se pusiera con el color de fondo y tal, asi que olvida eso y mil disculpass!!!

Y yo creo que se soluciona unificando el codigo que te puse en el mensaje anterior, que opinas!!!

salu2

Lista7.0.xls.zip

Share this post


Link to post
Share on other sites

Gracias!!! exactamente lo que estaba buscando, pero da un error cuando hay algun valor que tiene mas de 1 guion. Te paso el archivo para que lo veas, en la fila 7 lo tienes.

Con esta pequeña modificación que he hecho se solventa a medias el problema:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Long, DatBreve As String, Xok As Boolean

On Error Resume Next

Xok = False

With Target

If .Count > 1 Then Exit Sub

If .Column <> 7 Or .Row < 3 Or .Row > 203 Then Exit Sub

If Range("D" & .Row) <> Empty And .Value <> Empty Then

For i = 1 To Len(.Value)

If Left(Right(.Value, i), 1) = "-" Then Xok = True: Exit For

Next i

If Xok = False Then Exit Sub

DatBreve = Left(.Value, (Len(.Value) - (i + 1)))

Range("F" & .Row).Value = DatBreve

i = RGB(0, 176, 80)

If WorksheetFunction.IsEven(.Row) = True Then i = RGB(221, 8, 6)

Range("B" & .Row).Font.Color = i

Range("D" & .Row).Font.Color = i

Range("F" & .Row).Font.Color = i

Range("G" & .Row).Font.Color = i

Range("B" & .Row).Font.Bold = True

Range("D" & .Row).Font.Bold = True

Range("F" & .Row).Font.Bold = True

Range("G" & .Row).Font.Bold = True

i = Len(.Value) - (Len(DatBreve) + 2)

.Value = Right(.Value, i)

End

Else

Range("B" & .Row).Font.ColorIndex = 0

Range("D" & .Row).Font.ColorIndex = 0

Range("F" & .Row).Font.ColorIndex = 0

Range("G" & .Row).Font.ColorIndex = 0

Range("B" & .Row).Font.Bold = False

Range("D" & .Row).Font.Bold = False

Range("F" & .Row).Font.Bold = False

Range("G" & .Row).Font.Bold = False

Range("F" & .Row) = Empty

End If

End With

End Sub

Pero lo que debería de ir en G se pasa a F y lo de F pasa a G, mira a ver si le ves solución.

salu2

Lista8.xls.zip

Share this post


Link to post
Share on other sites

Buenas si lo que se desea es que busque el ultimo guión lo unico es iniciar el for desde el final al inicio

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long, DatBreve As String, Xok As Boolean
On Error Resume Next
Xok = False
    With Target
        If .Count &gt; 1 Then Exit Sub
        If .Font.Color &lt;&gt; RGB(0, 0, 0) And .Value &lt;&gt; Empty Then Exit Sub
        If .Column &lt;&gt; 7 Or .Row &lt; 3 Or .Row &gt; 203 Then Exit Sub
        If Range("D" &amp; .Row) &lt;&gt; Empty And .Value &lt;&gt; Empty Then
            For i = Len(.Value) To 1 Step -1
                If Right(Left(.Value, i), 1) = "-" Then Xok = True: Exit For
            Next i
            If Xok = False Then Exit Sub
            DatBreve = Right(.Value, (Len(.Value) - (i + 1)))
            Range("F" &amp; .Row).Value = DatBreve
            i = RGB(0, 176, 80)
            If WorksheetFunction.IsEven(.Row) = True Then i = RGB(221, 8, 6)
            Range("B" &amp; .Row).Font.Color = i
            Range("D" &amp; .Row).Font.Color = i
            Range("F" &amp; .Row).Font.Color = i
            Range("G" &amp; .Row).Font.Color = i
            Range("B" &amp; .Row).Font.Bold = True
            Range("D" &amp; .Row).Font.Bold = True
            Range("F" &amp; .Row).Font.Bold = True
            Range("G" &amp; .Row).Font.Bold = True
            i = Len(.Value) - (Len(DatBreve) + 3)
            .Value = Left(.Value, i)
            End
        Else
            Range("B" &amp; .Row).Font.ColorIndex = 0
            Range("D" &amp; .Row).Font.ColorIndex = 0
            Range("F" &amp; .Row).Font.ColorIndex = 0
            Range("G" &amp; .Row).Font.ColorIndex = 0
            Range("B" &amp; .Row).Font.Bold = False
            Range("D" &amp; .Row).Font.Bold = False
            Range("F" &amp; .Row).Font.Bold = False
            Range("G" &amp; .Row).Font.Bold = False
            Range("F" &amp; .Row) = Empty
        End If
    End With
End Sub

un saludo

Share this post


Link to post
Share on other sites

Que crackkk!!!! ahora si que me lo hace perfect aunque tenga varios guioness!!!

Una ultima pregunta que vi en otro hilo, donde debo de poner esto:

Application.SendKeys ("%{DOWN}")

para que cuando pase de la celda F a G con el teclado una vez llegado a G se despliegue la lista sin tener que pulsar Alt + flecha abajo.

Este codigo supongo que abrá que ponerlo encima del que tu me pusiste como se ve abajo, pero no me funciona.

Application.SendKeys ("%{DOWN}")

Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Long, DatBreve As String, Xok As Boolean

On Error Resume Next

Xok = False

With Target

If .Count > 1 Then Exit Sub

If .Font.Color <> RGB(0, 0, 0) And .Value <> Empty Then Exit Sub

If .Column <> 7 Or .Row < 3 Or .Row > 203 Then Exit Sub

If Range("D" & .Row) <> Empty And .Value <> Empty Then

For i = Len(.Value) To 1 Step -1

If Right(Left(.Value, i), 1) = "-" Then Xok = True: Exit For

Next i

If Xok = False Then Exit Sub

DatBreve = Right(.Value, (Len(.Value) - (i + 1)))

Range("F" & .Row).Value = DatBreve

i = RGB(0, 176, 80)

If WorksheetFunction.IsEven(.Row) = True Then i = RGB(221, 8, 6)

Range("B" & .Row).Font.Color = i

Range("D" & .Row).Font.Color = i

Range("F" & .Row).Font.Color = i

Range("G" & .Row).Font.Color = i

Range("B" & .Row).Font.Bold = True

Range("D" & .Row).Font.Bold = True

Range("F" & .Row).Font.Bold = True

Range("G" & .Row).Font.Bold = True

i = Len(.Value) - (Len(DatBreve) + 3)

.Value = Left(.Value, i)

End

Else

Range("B" & .Row).Font.ColorIndex = 0

Range("D" & .Row).Font.ColorIndex = 0

Range("F" & .Row).Font.ColorIndex = 0

Range("G" & .Row).Font.ColorIndex = 0

Range("B" & .Row).Font.Bold = False

Range("D" & .Row).Font.Bold = False

Range("F" & .Row).Font.Bold = False

Range("G" & .Row).Font.Bold = False

Range("F" & .Row) = Empty

End If

End With

End Sub

salu2 y mil gracias por solucionarme lo de los guioness!!!!!!

Share this post


Link to post
Share on other sites

Buenas coloca lo siguiente

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
With Target
    If .Count &gt; 1 Then Exit Sub
    If .Column &lt;&gt; 7 Or .Row &lt; 3 Or .Row &gt; 203 Then Exit Sub
    If .Column = 7 Then Application.SendKeys ("%{DOWN}")
    If Range("D" &amp; .Row) &lt;&gt; Empty Then
        Range("C1").Value = WorksheetFunction.Match(Range("D" &amp; .Row), Sheets("Valores").Rows("2:2"), 0)
        Range("C2").Value = .Row
    Else
        Range("C2").Value = 1
    End If
End With
End Sub

un saludo

Share this post


Link to post
Share on other sites

buah! parece que la función SendKeys no funciona en los Excel para MAC en ninguna de sus versiones, otra cosa mas que es incompatible con los Excel de Windows, en el fondo tampoco cuesta tanto darle al Alt + flecha abajo, que le vamos a hacer jeje

Gracias logroastur por tu dedicación al foro, los foreros estamos de enhorabuena al poder contar con gente como tu, lo dicho, MUCHAS GRACIAS por todo los quebraderos de cabeza que me has solucionado, sin tu ayuda hubiera sido misión imposible!!

salu2 y ya podeis poner este tema como solucionado!

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

×
×
  • Create New...

Important Information

Privacy Policy