Rellenar una matriz automáticamente

Hola a todos, mi problema es el siguiente:
Tengo una tabla (matriz) de 1000x1000. Para dibujar la matriz he utilizado la primera fila y columna de la hoja para poder visualizar el numero de fila y columna en todo momento, por lo tanto la primera celda de mi matriz es (b, 2). En otra hoja tengo los datos a insertar de la siguiente forma:
A B
1-1 12
1-2        0
8-987 16
La primera columna indica la posición dentro de la matriz y la segunda el dato a introducir. Como podrán intuir rellenar una matriz de estas dimensiones a mano es muy tedioso y puede tener mucho errores.
La pregunta es como puedo insertar en la matriz automáticamente los datos sabiendo la celda donde deben ir. He intentado usar la función buscar de la siguiente manera
=BUSCAR(CONCATENAR(B$1;"-";$A2);Hoja2!$A:$A;Hoja2!$B:$B)
Pero me funciona correctamente solo con celdas que tiene un solo dígito 1.. 9 a partir del 10 siempre coloca el valor del primer valor de la matriz.
Espero haberme explicado correctamente para que me podáis ayudar.
Saludos a todos y gracias.

1 Respuesta

Respuesta
1
Lo he hecho de otra manera. Cópialo todo. Es una sub tendrás que cambiar los datos a mano. Solo tendrás que cambiar las variables
Public Sub colocar_datos()
    Dim hoja_origen As Worksheet
    Set hoja_origen = Hoja1
    Dim hoja_destino As Worksheet
    Set hijo_destino = Hoja2
    Dim columna_celdas As Integer
    columna_celdas = 1
    Dim delimitador As String
    delimitador = "-"
    Dim columna_datos As Integer
    columna_datos = 2
    Dim fila_empieza As Integer
    fila_empieza = 1
'Se supone que empieza en la fila 1    
     While (hoja_origen.Cells(fila_empieza, columna_celdas) <> "")
        fila = AntesDelimitador(hoja_origen.Cells(fila_empieza, columna_celdas), delimitador)
        columna = DespuesDelimitador(hoja_origen.Cells(fila_empieza, columna_celdas), delimitador)
        hoja_destino.Cells(CDbl(fila), CDbl(columna)) = hoja_origen.Cells(fila_empieza, columna_datos)
        fila_empieza = fila_empieza + 1
     Wend
End Sub
Estas funciones son para separar los datos de la primera columna.
En el dato 8-987, la primera función coge el 8 y la 2a coge el 987
Function AntesDelimitador(Texto As String, delimitador As String) As String
    Dim i As Integer
    Dim trobat As Boolean
    trobat = False
    For i = 1 To Len(Texto)
        If (Mid(Texto, i + 1, 1) = delimitador) Then
            AntesDelimitador = Left(Texto, i)
            trobat = True
            Exit For
        End If
    Next i
    If (AntesDelimitador = "") Then AntesDelimitador = Texto
End Function
Function DespuesDelimitador(Texto As String, delimitador As String) As String
    Dim i As Integer
    For i = 1 To Len(Texto)
        If (Mid(Texto, i + 1, 1) = delimitador) Then
            DespuesDelimitador = Mid(Texto, i + 2, Len(Texto) - i + 2)
            Exit For
        End If
    Next i
    If (DespuesDelimitador = "") Then DespuesDelimitador = Texto
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas