Macro datos en matriz

Hola a todos, necesito una mano con el siguiente problema: tengo una lista de valores hasta 100 ordenados verticlamente y tengo que ordenarlos en una matriz de 12 columnas por 8 filas de dos maneras una es de la siguiente forma
1 9 17
2 10 ... Hasta 100 o menos
3 11
4 12
5 13
6 14
7 15
8 16
Esto lo pude resolver
Pero ahora me piden que los datos los ordene de la siguiente manera:
1 2 17 18
3 4 19 20
5 6 ... Hasta 100 o menos dependiendo de la cantidad de valores que tenga
7 8
9 10
11 12
13 14
15 16
Cualquiera que pueda ayudarme sra bienvenido
muchas gracias

1 Respuesta

Respuesta
1
He escrito las 2 primeras columnas.
Donde está el 17 colocas:
=16+(casilla donde está el 1)
Arrastras todas las filas, porque sólo te deja la fila o la columna. Y después las columnas, hasta las 100. Y después borras las que sobran
Si has de hacerlo con una función que sólo coja el rango de los datos y que te lo haga automáticamente sin borrar nada, dímelo. Si quieres la versión medio cutre esta es.
Hola Antares recién hoy veo la respuesta... no se porque el sistema no me aviso al mail, la verdad es que este tema lo tenia medio de lado porque estaba realizando otras macros probé tu solución y esta buena pero también me gustaría ver como hacerlo desde una función sdos y gracias
El num_filas es 8 y Hasta_que_Numero es 100. El num_filas lo he puesto como variable vaya a ser que a tus jefes les dé el puntazo y en vez de cada 8 lo quieran cada 10 o 15
Has de colocarte en la fila que quieres que empiece. Si hay datos en donde pasa los borrará y no se podrá recuperar
La función offset es como la de Range("A1"). Offset(0,1) pero esta función es de sólo lectura. La que te escrito es de escritura
Sub dato(Num_filas As Double, Hasta_que_Numero As Double)
'
' dato Macro
'
    Dim i As Double
    Dim j As Double
    Dim valor As Double
    For j = 0 To CInt(Hasta_que_Numero / Num_filas)
        For i = 0 To Num_filas - 1
            valor = 16 * j + 2 * i
            If ((valor + 1) > Hasta_que_Numero) Then
                Exit For
            Else
                Offset(ActiveCell.Address, i, 0 + 2 * j).Value = 1 + 16 * j + 2 * i
            End If
            If ((valor + 2) > Hasta_que_Numero) Then
                Exit For
            Else
                Offset(ActiveCell.Address, i, 1 + 2 * j).Value = 2 + 16 * j + 2 * i
            End If
        Next i
    Next j
'
End Sub
Private Function Offset(Celda, Fila As Double, Columna As Double) As Range
    Set Offset = Range(Celda).Offset(Fila, Columna)
End Function
Menos mal que ha salido esto otra vez. La función buena es esta
Sub dato(Num_filas As Double, Hasta_que_Numero As Double)
'
' dato Macro
'
    Dim i As Double
    Dim j As Double
    Dim valor As Double
    Dim final As Boolean
    For j = 0 To Round(Hasta_que_Numero / (2 * Num_filas), 0)
        For i = 0 To Num_filas - 1
            valor = (2 * Num_filas) * j + 2 * i
            If ((valor + 1) > Hasta_que_Numero) Then
                final = True
                Exit For
            Else
                Offset(ActiveCell.Address, i, 0 + 2 * j).Value = 1 + (2 * Num_filas) * j + 2 * i
            End If
            If ((valor + 2) > Hasta_que_Numero) Then
                final = True
                Exit For
            Else
                Offset(ActiveCell.Address, i, 1 + 2 * j).Value = 2 + (2 * Num_filas) * j + 2 * i
            End If
        Next i
        If (final) Then Exit For
    Next j
'
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas