Compartir a través de

segmentacion de datos

Anónimas
2011-11-16T17:38:06+00:00

Dada una relación de datos, quiero distribuir las filas de esa relación en distintas hojas, de modo que una fila esté sólo en una hoja y que toda las filas estén en alguna hoja. Las condiciones que determinan a qué hoja va cada fila quiero que se puedan modificar por el usuario.

He pensado resolverlo de este modo:

mediante código añadir, en una nueva columna de la relación de datos inicial, la 'categoría' a la que pertenece esa fila, después, mediante una tabla dinámica,  generar las hojas que necesite. 

el código que genera el dato de la categoría, es la parte compleja del asunto. He pensado utilizar algo parecido a los filtros avanzados: una serie de filas con las condiciones que determinan la categoría a la que pertenece cada fila (si se utilizan 15 categorías habria 15 filas - o tal vez 30, una para el comaprador y otra para el dato-, una por cada categoría). El código aplicaría la condición (empezando por la primera), hasta que encuentre la que es de aplicación al registro en comparación y escribiría en la columna de categoría el indicador de esa categoría.

La pregunta es si existe una forma mejor de hacerlo.

Microsoft 365 y Office | Excel | Para la casa | Windows

Pregunta bloqueada. Esta pregunta se migró desde la Comunidad de Soporte técnico de Microsoft. Puede votar si es útil, pero no puede agregar comentarios o respuestas ni seguir la pregunta.

0 comentarios No hay comentarios

11 respuestas

Ordenar por: Muy útil
  1. Héctor Miguel 71,595 Puntos de reputación
    2011-11-20T20:50:23+00:00

    Mi idea no es insertar fórmulas en la hoja, sino escribir directamente el texto que identifica la categoría mediante la macro (creo que sería mucho más rápido).Ten en cuenta que prodria haber muchas categorias (imagínate con 10 o 12 categorias) y con condiciones complejas.

    hola, Javier !

    precisamente, anticipando que fueran mas de 3 condiciones es que encuentro las formulas de mas rapida resolucion, no quisiera encontrarme en una situacion de condiciones complejas tratando de dilucidar (a ojo de buen cubero ?) cual es la que debiera dar por buena (?), y si no quieres las formulas... las conviertes a sus constantes (como en la macro del ejemplo ?)

    claro, conociendo (todas ?) las categorias (y su posible complejidad)... "la formula" aplicable podria ser diferente a la usada en el ejemplo (?)

    saludos,

    hector.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  2. Anónimas
    2011-11-20T18:48:14+00:00

    Hola Hector:

    Te gustan mucho las fórmulas y las manejas muy bien (no sé qué fue antes, si el gusto por las fórmulas o el manejo virtuoso).

    Mi idea no es insertar fórmulas en la hoja, sino escribir directamente el texto que identifica la categoría mediante la macro (creo que sería mucho más rápido).Ten en cuenta que prodria haber muchas categorias (imagínate con 10 o 12 categorias) y con condiciones complejas.

     un saludo.

         javier

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  3. Héctor Miguel 71,595 Puntos de reputación
    2011-11-20T00:43:49+00:00

    ... Se trataría de leer cada fila y hacerla pasar por la serie de filtros hasta que en uno de ellos queda el registro (como filtrar tierra por una serie de tamices uno debajo del otro).

    Lo que me está dando más trabajo es la forma de escribir el filtro, me parece que terminaré escribiéndolo directamente (en el formato del código). Los filtros estarían en otra hoja en la misma columna.  algo así:

    Condicion                                               Categoria

    campo1 > 1000000                                Categoria1

    campo2= 0 and campo1 < 500               categoria2

    ...........

    hola, Javier !

    dejame insistir en lo dificil que es (adivinar y) ACERTAR a las condiciones y arreglo de datos que solo conoce quien consulta con preguntas al estilo de "adivinen lo que estoy pensando" (???)

    en el supuesto de que el rango sea desde [A1] hasta [C_n] (con titulos en la fila 1) y las condiciones fueran; (1) columna A >= 1000; (2) columna A = 0 y columna B <= 500; (3) columna A = 0 y columna B > 500

    (yo ?) pondria las categorias por formula con una macro +/- como la siguiente (en la columna D):

    Sub Categoriza()

      With Range("d2:d" & [a65536].End(xlUp).Row)

        .Formula = "=""categoria""&(a2>=1000)+2*and(a2=0,b2<=500)+3*and(a2=0,b2>500)"

        .Value = .Value

      End With

    End Sub

    saludos,

    hector.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  4. Anónimas
    2011-11-19T16:15:08+00:00

    Hola Hector:

    Ya lo tengo medio pensado. Se trataría de leer cada fila y hacerla pasar por la serie de filtros hasta que en uno de ellos queda el registro (como filtrar tierra por una serie de tamices uno debajo del otro).

    Lo que me está dando más trabajo es la forma de escribir el filtro, me parece que terminaré escribiéndolo directamente (en el formato del código). Los filtros estarían en otra hoja en la misma columna.  algo así:

    Condicion                                               Categoria

    campo1 > 1000000                                Categoria1

    campo2= 0 and campo1 < 500               categoria2

    ...........

    en pseudocódigo sería más o menos asi:

    do    ; bucle que recorre todas las filas con los datos

          read fila

          do     ; bucle para aplicar los filtros

             read filtro

             if filtro then

                  escribir categoria en el registro de datos

                  exit do

             end if

          loop

    loop until final

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  5. Héctor Miguel 71,595 Puntos de reputación
    2011-11-19T02:17:19+00:00

    ... mediante código añadir, en una nueva columna de la relación de datos inicial, la 'categoría' a la que pertenece esa fila, después, mediante una tabla dinámica,  generar las hojas que necesite. 

    el código que genera el dato de la categoría, es la parte compleja del asunto...

    La pregunta es si existe una forma mejor de hacerlo.

    hola, Javier !

    como dices, la parte "dificil" es (adivinar) como y donde indicar la "categoria" por la que se dividira el listado (???)

    por lo demas, si quieres pasar por una TD o tomar como base el mismo listado de origen (agregando la categoria), mira si te sirve adaptar filtros avanzados de conversaciones como las siguientes:

    Crear pestañas con cada cliente dentro de una planilla

    Filtrar, copiar, pegar, guardar... pero con Macro

    Temas varios

    saludos,

    hector.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios