Generar una SubLista de una Lista

¿Serían tan amables de ayudarme a resolver un problema que tengo?

Deseo listar de una Lista muy larga de respuestas, una Sublista que cumpla con una condición. Tengo una Lista muy larga de Preguntas diferentes y cada una tiene sus respuestas, identificadas con los 2 primeros dígitos de la izquierda de la Lista de Respuestas.

En el ejemplo, la respuesta sólo debe listar de la Lista de Respuestas, todos los registros que cumplan con la siguiente condición: Los 2 primeros caracteres sean igual al "Item" de la pregunta.

Ejm:
PREGUNTAS:
Item Pregunta Respuesta
01 El enunciado es... Correcto
02 Le parecido... Malo
03 Está interesado... Quizás


LISTA DE RESPUESTAS:
01 - Correcto
01 - Errado
02 - Bueno
02 - Malo
02 - Regular
03 - Quizás
03 - Puede ser

3 Respuestas

Respuesta
2

Disculpa para no entendí lo que necesitas.

¿A dónde quieres poner la "sublista"?

Puedes poner el ejemplo de cómo están tus datos y cómo y dónde quieres el resultado.

Saludos. DAM

Hola,

A ver si puedo ser más explícito....

Imaginemos tener 100 preguntas (Ver 1), una detrás de otra, y con 3 columnas (Item, Preguntas y Respuestas).

Donde cada una de las Preguntas tiene hasta 4 diferentes opciones, de las cuales se debe elegir una sola respuesta. Es decir, la respuesta debe ser elegida de las opciones que se le muestre en una Sub Lista desplegable que forma parte de una Lista Principal de Respuestas (ver 2) que se encuentra relacionada con la 3ra. columna (Respuestas).

La validación de ingreso de datos de la 3ra. columna Respuestas, está validado con la Lista Principal de Respuestas, con la opción del Excel: Menú Datos / Validación / Configuración / Lista.

Ejm:

1. PREGUNTAS:

Item Preguntas Respuestas Opciones que se deberían mostrar
01 El enunciado es... Correcto (01 - Correcto / 01 - Errado)
02 Le parecíó.... Malo (02 - Bueno / 02 - Malo)
03 Está interesado.... Quizás (03 - Quizás / 03 - Puede ser)

2. LISTA PRINCIPAL DE RESPUESTAS:
01 - Correcto
01 - Errado
02 - Bueno
02 - Malo
02 - Regular
03 - Quizás
03 - Puede ser

Como verás, los 2 primeros caracteres de la descripción de cada una de las respuestas (Ver 2), están relacionadas con el número de Item de la pregunta (Ver 1).

Sé que una salida podría ser crear tantas listas como preguntas existan, pero la idea es que de una sola Lista Principal, solo se muestren las opciones que correspondan a la pregunta en que nos encontramos, y que no aparezcan toda la lista completa de respuestas.

Imaginate necesito realizar 1,000 preguntas... te puedes imaginar las 1,000 sublista que tendría que crear, o que se me muestren las 4,000 opciones de respuestas.

Espero haya sido muy explicito esta vez...

Gracias por tu interés en ayudarme!

Realicé una macro para que haga la listas de validaciones.

Tienes que tener ordenadas las respuestas en tu lista principal de respuestas (tal como lo pusiste en tu ejemplo).

Sigue las Instrucciones para ejecutar la macro
1. Abre tu hoja de excel
2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
3. En el menú elige Insertar / Módulo
4. En el panel del lado derecho copia la macro
5. Para ejecutarla presiona F5

Sub poner_lista_de_validacion()
'por.dam
cp = "A" 'columna preguntas
cr = "C" 'columna respuestas
cl = "N" 'colimna lista de respuestas
fp = 2 'fila donde empiezan las preguntas
fr = 2 'fila donde empieza la lista de respuestas
For i = fp To Range(cp & Rows.Count).End(xlUp).Row
    Cells(i, cr).Select
    With Selection.Validation
        .Delete
        una = 1: ini = 1: fin = 1
        For n = fr To Range(cl & Rows.Count).End(xlUp).Row + 1
            If Left(Cells(n, cl), 2) = Left(Cells(i, cp), 2) Then
                If una = 1 Then ini = n: una = 2
            Else
                If una = 2 Then fin = n - 1: una = 3
            End If
        Next
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=$N$" & ini & ":$N$" & fin
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
Next
End Sub

Indicaciones:

Cambia en la macro, en estas líneas, la siguiente información, en cuál columna están las preguntas, en cuál las respuestas, en cuál la lista de respuestas, en cuál fila empiezan las preguntas y en cuál fila empiezan las respuestas en tu lista de respuestas.
cp = "A" 'columna preguntas
cr = "C" 'columna respuestas
cl = "N" 'colimna lista de respuestas
fp = 2 'fila donde empiezan las preguntas
fr = 2 'fila donde empieza la lista de respuestas

Saludos. Dam
Si es lo que necesitas.

Estimado Dam,

Aprecio mucho tu valioso Apoyo...

Sinceramente, Muchas gracias... eres un MAESTRO!

Solo hice algunos pequeñísimos ajustes para que me funcione, y te los detallo:

1. Antes solo podía manejar hasta 99 preguntas.

If Left(Cells(n, cl), 2)) = Left(Cells(i, cp), 2)) Then

Ahora hasta 999:

If Trim(Left(Cells(n, cl), 3)) = Trim(Left(Cells(i, cp), 3)) Then

2. Antes no salía del bucle del segundo FOR, y esto ocasionaba que no calcule correctamente la variable "fin" de cada pregunta, y le agregue el EXIT FOR:

If una = 2 Then fin = n - 1: una = 3

Ahora:

If una = 2 Then fin = n - 1: una = 3: Exit For

<strong style="line-height: 1.5em;">

<strong style="line-height: 1.5em;">--------------------------------------------------------------------------------------

3. Antes la columna "N" estaba fija:

xlBetween, Formula1:="=$N$" & ini & ":$N$" & fin

Ahora:

xlBetween, Formula1:="=$" & cl & "$" & ini & ":$" & cl & "$" & fin

GRACIAS!

Respuesta

Just a single click are grapes bad for bearded dragon and get the more information.

Respuesta

Para generar una sublista de una lista basada en una condición en VBA. Aquí tienes un ejemplo de cómo hacerlo:

Sub GenerarSublista()
    Dim ListaRespuestas As Variant
    Dim Pregunta As String
    Dim Sublista() As String
    Dim i As Long, j As Long, k As Long
    ' Lista de respuestas
    ListaRespuestas = Array("01 - Correcto", "01 - Errado", "02 - Bueno", "02 - Malo", "02 - Regular", "03 - Quizás", "03 - Puede ser")
    ' Pregunta para filtrar la sublista
    Pregunta = "01"
    ' Dimensionar el tamaño de la sublista
    k = 0
    ' Recorrer la lista de respuestas y agregar los elementos que cumplan con la condición a la sublista
    For i = LBound(ListaRespuestas) To UBound(ListaRespuestas)
        If Left(ListaRespuestas(i), 2) = Pregunta Then
            ReDim Preserve Sublista(k)
            Sublista(k) = ListaRespuestas(i)
            k = k + 1
        End If
    Next i
    ' Imprimir la sublista
    For j = LBound(Sublista) To UBound(Sublista)
        Debug.Print Sublista(j)
    Next j
End Sub

En este ejemplo, hemos creado una subrutina llamada "GenerarSublista". Dentro de ella, definimos la lista de respuestas utilizando un arreglo "ListaRespuestas". Luego, especificamos la pregunta que se utilizará para filtrar la sublista en la variable "Pregunta".

A continuación, utilizamos un bucle "For" para recorrer la lista de respuestas. Si los dos primeros caracteres de una respuesta coinciden con la pregunta, se agrega esa respuesta a la sublista utilizando la función "Left" para extraer los dos primeros caracteres.

Finalmente, imprimimos la sublista utilizando el bucle "For" y la función "Debug.Print".

Puedes ajustar el código según tus necesidades, cambiando la lista de respuestas y la pregunta que deseas utilizar para filtrar la sublista.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas