Varias columnas a matriz

Hola necesito ayuda con el siguiente problema:
Tengo varias columnas de este tipo
AA  BB  CC  DD
AA  BB  CC  DD
AA  BB  CC  DD
AA BB DD
aa BB
      BB
Y tengo que armar una matriz de 3 filas y varias columnas hasta 20, ordenados de la siguiente forma:
    A B C D E F
1 AA AA BB BB CC DD
2 AA BB BB DD
3 AA BB
Osea los valores de las columnas deben quedar "discontinuos". Yo he realizado una rutina pero logro ordenar los valores "continuados"
Sdos
Muchas gracias

1 Respuesta

Respuesta
1
Sub Rematriz()
   micolumna = 7: miFila = 3 'celda destino inicial
   Cells(miFila, micolumna).CurrentRegion.Clear
   Cells(miFila, micolumna).Value = Range("b3").Value
   DatoAnt = Range("b3").Value
   For c = Range("b3").Column To Range("b3").CurrentRegion.Columns.Count + Range("b3").Column
   For f = Range("b3").Row + 1 To Range("b3").CurrentRegion.Rows.Count + Range("b3").Row
     dato = Cells(f, c).Value
     If dato = Empty Then Exit For
     If DatoAnt = dato Then miFila = miFila + 1
     If (miFila >= Range("b3").Row + 3 Or DatoAnt <> dato) Then
      micolumna = micolumna + 1
      miFila = 3
     End If
     Cells(miFila, micolumna).Value = dato
     DatoAnt = dato
   Next f
   Next c
End Sub
Hola muchas gracias por tu respuesta, la rutina esta barbara pero solo me funciona para dos columnas yo en el ejemplo de arriba olvide poner bien la salida en la matriz "discontinua", tendría que ser así
A B C DE E F G H
1 AA AA BB BB CC DD DD
2 AA      BB BB CC DD
3 AA BB CC DD
La rutina que tu me enviaste solo realiza el "ordenamiento" para los AA y los BB y omite el resto ademas el numero de columnas AA, BB puede variar considerablemente...
De todas formas tu código esta muy bueno yo hice algo parecido pero no logre hacer la "discontinuidad" entre los valores distintos en la matriz. Voy a ver si puedo modificarlo...
Sdos
Muchas gracias
Cambia donde pone range("b3") por Selection
Y antes de ejecutar el código selecciona tu rango discontinuo de origen, y me cuentas
Hola Ivnxls, mira agradezco tu ayuda. Estoy tratando de modificar ciertos parámetros del código que me has enviado.
Si la cantidad de filas de valores es menor que tres no me los "ordena" en la matriz. Por otro lado me cambiaron los parámetros de la matriz y ahora es "fija" el numero de filas es de 16 y el de columnas es de 24. Los valores que yo escribo como AA BB CC... son distintas muestras de ADN los AA están con un reactivo POR los BB con otro reactivo etc.
Puede haber una sola columna o más de muestras en el ejemplo yo puse 4 columnas (AA, BB, CC, DD...) pero pueder ser el caso que solo muestren el individuo AA con solo 5 repeticiones y se deben trasladar a la matriz esos solos valores o puede haber 10 individuos AA.. JJ y todos se deben trasladar a la matriz de forma "discontinua"
Espero tu opinión, por mi lado igual sigo tratando de resolverlo...
Muchas gracias
Sdos
(xxxxxx)
Mi código parte de la celda superior izquierda del rango de muestras, en mi ejemplo inicial utilicé B3, pero según me muestras lo correcto sería A1 (por eso si no tenías 3 filas no hacía nada, eso lo arregla)
En cuanto al discontinuo en tu origen de datos, mejor intenta que estén tan juntos como me muestras en tus ejemplos de 12/04/09, si es así tampoco debiera darte problemas.
Hola! Mira ya puede hacer andar el código solo me falta que no me toma valores string solo me toma textos AA o 55 pero si escribo cualquier cadena no funciona yo escribí AA BB para simplificar el ejemplo pero un ejemplo real seria:
  A                      B               C
aavnr#1         vna#2         qqq#3
ssvnr#1          vne#2         ww#3
wvnr#1           vng#2         sdd#3
...                    vnh#2          dfd#3
                       vnj#2           ssd#3
                       ert#2           ...
                       ...
Esto es una simplificación por ejemplo en la columna de los #1 puedo tener 3 filas o cien igual para los otros # y en la matriz los tengo que agrupar de a 16 osea cada columna debe tener 16 filas.
Desde ya agradezco infinitamente tu invalorable aporte
Sdos
He revisado y corregido el código, ahora creo que sí te valdrá, también funciona con textos...
Sub Rematriz()
   micolumna = 7: miFila = 3 'celda destino inicial
   Cells(miFila, micolumna).CurrentRegion.Clear
   micolumna = micolumna - 1
   For c = Range("a1").Column To Range("a1").CurrentRegion.Columns.Count +  Range("a1").Column
   For f = Range("a1").Row To Range("a1").CurrentRegion.Rows.Count + Range("a1").Row
   dato = Cells(f, c).Value
    If dato = Empty Then Exit For
    If DatoAnt = dato Then miFila = miFila + 1
    If (miFila >= 3 + 16 Or DatoAnt <> dato) Then
     micolumna = micolumna + 1
     miFila = 3
     End If
   Cells(miFila, micolumna).Value = dato
   DatoAnt = dato
   Next f
   Next c
End Sub

Añade tu respuesta

Haz clic para o