Distribuir resultados válidos en dos columnas

A ver si me podéis echar una mano, tengo una macro (funcionando) que lo que hace es buscar en una columna proporcionada por un inputbox un dato (en este ejemplo "XXXXX") y cuando lo encuentra copia la celda que corresponde de la columna A en la hoja del día correspondiente, uno detrás de otro. La macro es la siguiente:

    Sheets("MES").Select
    ufila = Range("AM" & Rows.Count).End(xlUp).Row
    col = Range("AM2").Column
    K = 4
    For i = 2 To ufila
    If Cells(i, col) Like "XXXXX" Then
    Sheets(selecciondia).Range("A" & K) = Sheets("MES").Range("A" & i)
    K = K + 1
    Sheets(selecciondia).Range("A" & K) = "SIGUIENTE"
    End If
    Next
    Sheets("MES").Select

Aquí mis dudas: ¿Cómo seria para que los resultados los colocase en dos columnas (por el tema de ahorrar espacio en la hoja)? Primer resultado en la celda A1 el segundo el la A2, el tercero en la B1... Por más que pruebo cosas soy incapaz

Y otra duda que me ha surgido, estoy aprendiendo, esto es parte de una macro mayor que son varios "datos", primero buscando "XXXXX" y cuando termina busca el "XXXX2" y así sucesivamente. Bien lo que he hecho es copiar y pegar la macro y modificar el "dato" a buscar por lo que funciona, pero me imagino que eso es una "chapuza", ¿alguien me puede orientar?

2 respuestas

Respuesta
2

Puedes poner los valores a buscar en un arreglo.

El primer dato encontrado se pondrá en la celda A4, el segundo en la celda B4, el tercero en la celda A5, el cuarto en la celda B5, y así sucesivamente, de esa manera estarás poniendo los resultados en 2 columnas.

Prueba con la siguiente macro

 'lista de valores a buscar
    'Pon el siguiente arreglo los valores a buscar
    valores = Array("XXXXX", "XXXX2", "etc")
    '
    Sheets("MES").Select
    ufila = Range("AM" & Rows.Count).End(xlUp).Row
    col = Range("AM2").Column
    k = 4   'fila inicial
    c = 1   'columna inicial para poner los datos
    For n = LBound(valores) To UBound(valores)
        For i = 2 To ufila
            If Cells(i, col) Like valores(n) Then
                Sheets(selecciondia).Cells(k, c) = Sheets("MES").Range("A" & i)
                If c = 1 Then
                    'si la columana es 1 entonces la siguiente columna para
                    'poner los datos será la 2
                    c = 2
                Else
                    'y si la columna es la 2 entonces regresa a la columna 1
                    c = 1
                    'se incrementa el número de fila
                    k = k + 1
                End If
                'Sheets(selecciondia).Range("A" & k) = "SIGUIENTE"
            End If
        Next
    Next
    Sheets("MES").Select

sal u dos. Dante Amor. Si es lo que necesitas, no olvides valorar la respuesta.

Respuesta
1

No queda tan claro el problema pero creo que te refieres a hacer algo así:

 If Cells(i, col) Like "XXXXX" Then
    Sheets(selecciondia).Range("A" & K) = Sheets("MES").Range("A" & i)
    Sheets(selecciondia).Range("B" & K) = "SIGUIENTE"
        K = K + 1
 End If

Sobre lo de buscar varias ¿palabras? si las tienes en algún lado podrías hacer un bucle que englobe a tu "búsqueda" y a su vez ese bucle va dando el valor necesario.

Una cosa más sugiero leer sobre "Find", quizá te sea más útil, además de que es más rápido que usar un "For - Next"

Abraham Valencia

hola y gracias por responder

No, no es eso a lo que me refiero, imaginemos que encuentra x1, x2, x3 y x4 que cumplen la condición, según esta ahora los iría colocando en una columna tal que asi: A1>x1, A2>x2, A3>x3 y A4>x4, lo que necesitaría es que fuera así: A1>x1, B1>x2, A2>x3 y B2>x4. Osea, que lo vaya repartiendo en dos columnas (esto yo lo conseguí haciendo que las celdas de las filas impares las coloque en las pares y luego borrando las filas en blanco, pero supongo que habrá una manera mas "profesional")

Con lo de bucle, te refieres a un Array?  es lo que he estado mirando ya que me pareció que podía ser la solución. Como dije estoy aprendiendo por mi cuenta con tutoriales que encuentro por internet y haciendo casos prácticos que me invento. (en esto no quiero la solución, sino una guía para intentarlo yo, que es la forma que mejor aprendo)

Muchas gracias por su tiempo

Ahora ando en el celular, por eso no puedo enviarte algo más, más tarde podré, claro, si es que aún no has resuelto el dilema. Y no te preocupes, para mí es obvio que no andas buscando que te hagan el trabajo. Cuando te metas más a este mundo del VBA, verás que es formidable. Un abrazo.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas