Saltar al contenido

Ingresar datos en Matriz de dos dimensiones


Recommended Posts

publicado

Al fin.....?

Las Macros aparecen descritas en la hoja "Macros". Las descripciones que no están coloreadas, es porque están sin hacer todavía.
 

Me interesaría que me ayudáseis, si sabéis/podéis, en dos cosas fundamentales:


1-Módulos 3 y 5: Ver si conocéis un código mejor que el que he utilizado para pasar los datos que aparecen en la pestaña GS, al resto de hojas, según el listado "listacamionesKm" (módulo 3) y listado "listacalidad"(módulo 5). Aunque he comprobado que los datos se pasan correctamente, siempre da un error al final del proceso de "Subíndice fuera de rango" y no entiendo el motivo, porque todos los elementos en listacalidad y listacamiones, tienen una hoja creada.

2 -Módulos 3 y 5: Ver la forma de cumplimentar una matriz bidimensional con los datos de "listacamioneskms" que después se pueda comparar con la variable "vehículo" sin que dé error de tipos al usar If UBound(Filter(listacalidad, vehiculo)) >= 0 Then .

Bueno, y cualquier mejora de código, aunque trate otros aspectos, será bienvenida y aprovechada, porque esto del VBA me encanta y escuchando críticas es como se aprende mejor... Así que no sintáis lástima y sed todo lo duros que queráis...? 

Mil gracias y que empiece la fiesta! ??

MACROMODELO(web) - copia.xlsm

publicado

Subido!

 

Hace 15 horas, Toldeman dijo:

Hola.

Haz un pequeño ejemplo y subelo.

 

Saludos.

 

publicado
En 7/4/2020 at 18:48 , Antoni dijo:

Sin el archivo es muy complicado averiguar el porqué de tu problema.

Subido!

publicado

Subido!

En 7/4/2020 at 22:59 , Gerson Pineda dijo:

¿Que esperas para subir una muestra en Excel?

 

publicado

Hola, como relacionas tu tabla Hoja(GS") y Hoja("listacamioneskm") o  Hoja("listacamioneskms").

En tu Hoja("GS") deberías insertar en la columna "A"  Vehículo y sus respectivos números. Porque para extraer la informacion de la Hoja(GS") a las Hoja("1111") y sucesivo, se necesita que en la Hoja(GS") tenga una relación con las otras hojas.

Cita

"Subíndice fuera de rango"

Después Option Explicit coloca

Option Base 1

 

publicado

 Hola Gerson!! ?

Muchas gracias, he puesto tu código en el módulo 2 y me da error de Subíndice fuera de intervalo tras enviar la primera línea de datos.

El tema está en que cuando los camiones que aparecen en GS pertenecen al listado de Calidad, en ese caso se añaden dos columnas nuevas que no están en GS.

Cuando los camiones están en el listado de camiones, en ese caso no se añaden esas dos columnas, sólo lo que aparece en GS. 

Y lo que me gustaría entender es por qué si todos los camiones de ambos listados tienen una hoja con su nombre para pegar los datos, por qué sale el error de Subíndice fuera del intervalo cuando finaliza el proceso... Entiendo que ese error sólo debería aparecer si en GS y en el listado de camiones hubiese datos del 1111, por ejemplo, y al ir a pegar esos datos, no existe hoja llamada 1111, pero no es el caso y sin embargo, sale el error... 

A ver si sois capaces de averiguar el motivo.. 

Hace 21 horas, Gerson Pineda dijo:

Saludos a todos

@Enid86

Revisa el adjunto, espero entender lo que necesitas

 

ADJUNTO EL FICHERO:

MACROMod.xlsm

publicado

Hola Rolano! ?

Fue un error al reducir el archivo a una pequeña muestra... En el original, la columna A es la de los vehículos, como muy bien apuntas.

Poniendo BASE 1, me sale directamente el error de Subíndice sin llegar a enviar ningún dato.

Puedes explicar un poco para qué debo poner Option Base 1, por favor? A qué afecta eso? Porque pensaba que la gente que lo ponía era por comodidad al trabajar arrays, no porque afectase luego a las instrucciones, funciones, métodos o lo que se a... Muchas gracias!! ?

En 14/4/2020 at 18:55 , rolano dijo:

Hola, como relacionas tu tabla Hoja(GS") y Hoja("listacamioneskm") o  Hoja("listacamioneskms").

En tu Hoja("GS") deberías insertar en la columna "A"  Vehículo y sus respectivos números. Porque para extraer la informacion de la Hoja(GS") a las Hoja("1111") y sucesivo, se necesita que en la Hoja(GS") tenga una relación con las otras hojas.

Después Option Explicit coloca

Option Base 1

 

 P.D: Subo el fichero correcto:

MACROMod.xlsm

publicado
Hace 2 horas, Enid86 dijo:

Hola Gerson!! ?

Muchas gracias, he puesto tu código en el módulo 2 y me da error de Subíndice fuera de intervalo tras enviar la primera línea de datos.

El tema está en que cuando los camiones que aparecen en GS pertenecen al listado de Calidad, en ese caso se añaden dos columnas nuevas que no están en GS.

Cuando los camiones están en el listado de camiones, en ese caso no se añaden esas dos columnas, sólo lo que aparece en GS. 

Y lo que me gustaría entender es por qué si todos los camiones de ambos listados tienen una hoja con su nombre para pegar los datos, por qué sale el error de Subíndice fuera del intervalo cuando finaliza el proceso... Entiendo que ese error sólo debería aparecer si en GS y en el listado de camiones hubiese datos del 1111, por ejemplo, y al ir a pegar esos datos, no existe hoja llamada 1111, pero no es el caso y sin embargo, sale el error... 

A ver si sois capaces de averiguar el motivo.. 

Hola!

Queda claro que debes esforzarte un poco mas para dominar este lenguaje, especialmente porque estamos colaborando con tu examen/ejercicios, mi recomendación es que trates de estudiar a profundidad para que lo hagas por tu propia cuenta, porque de mi parte no acostumbro hacer tareas de alumnos, espero no lo tomes a "mal"

Te adjunto mi aporte, a partir de aquí, dale tiempo e investiga para entender cada linea de código VBA

 

Saludos!

Copiar rango a multiples hojas VBA_GP.zip

publicado
Hace 12 minutos , Gerson Pineda dijo:

Hola!

Queda claro que debes esforzarte un poco mas para dominar este lenguaje, especialmente porque estamos colaborando con tu examen/ejercicios, mi recomendación es que trates de estudiar a profundidad para que lo hagas por tu propia cuenta, porque de mi parte no acostumbro hacer tareas de alumnos, espero no lo tomes a "mal"

Te adjunto mi aporte, a partir de aquí, dale tiempo e investiga para entender cada linea de código VBA

 

Saludos!

Copiar rango a multiples hojas VBA_GP.zip 573.35 kB · 0 descargas

Gracias Gerson! Obviamente no pretendo que lo hagáis vosotros, lo que quería era saber por qué el Código que yo he escrito da ese error, si según lo que he visto por YouTube, el Código está correcto... 

Respecto al código que tú me habías pasado, como le he dado a ejecutar y no funcionaba, pues no me he parado a mirarlo, pero si dices que lo mire en detalle, por algo será.. (Qué misterioso..jejeje). Seguiré tú consejo, a ver qué me encuentro. ?

Gracias! ?

publicado

¡Buenas noches, Gerson!

Ya he estudiado el código y me ha encantado, he visto un montón de cosas en docs.microsoft que no conocía...

Al principio un poco complicado, con tanta variable y tanto rango, pero creo que lo he entendido.

Voy a ver si lo amplío para el resto de condiciones que quiero que se apliquen y ya os contaré!

 ??

Hace 23 horas, Gerson Pineda dijo:

Hola!

Queda claro que debes esforzarte un poco mas para dominar este lenguaje, especialmente porque estamos colaborando con tu examen/ejercicios, mi recomendación es que trates de estudiar a profundidad para que lo hagas por tu propia cuenta, porque de mi parte no acostumbro hacer tareas de alumnos, espero no lo tomes a "mal"

Te adjunto mi aporte, a partir de aquí, dale tiempo e investiga para entender cada linea de código VBA

 

Saludos!

Copiar rango a multiples hojas VBA_GP.zip 573.35 kB · 2 descargas

 

publicado
Option Explicit
Option Base 1

'EXPORTAR DATOS
Sub Botón3_Haga_clic_en_R()

'On Error GoTo etiqueta

Application.ScreenUpdating = False
Dim vehiculo As String, fila As Long, colum As Long

Dim NCarga As String, FechaSalida As String, FechaLlegada As String, PoblaciónOrigen As String, PoblaciónDestino As String
Dim KmsNac As Integer, KmsInt As Integer, Precioventa As Double, PrecioKmsNac As Double, PrecioKmsInt As Double
Dim filadest As Integer, columdest As Integer
Dim pasardatos As Long, ultimafila As Long
Dim Hoja As String
Dim listacamioneskm() As String, i As Integer, matriz As Range
Dim CantFila As Long
Dim HojaEstado As Object


'funciona

Worksheets("listacamioneskm").Select
CantFila = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Range("A1:A" & CantFila).Select

'funciona

i = 1
For Each matriz In Selection
    ReDim Preserve listacamioneskm(CantFila)
    listacamioneskm(i) = matriz.Value
        i = i + 1
Next matriz


fila = 2
colum = 0
'filadest = 2
columdest = 1


        
        Do
        Worksheets("GS").Select
        'hoja = Cells(fila, colum + 1).Value 'fila 2, columna 1
        vehiculo = Cells(fila, 1).Value

        If vehiculo = "" Then Exit Sub
        
        If UBound(Filter(listacamioneskm, vehiculo)) >= 0 Then
       
        vehiculo = Cells(fila, 1).Value
        NCarga = Cells(fila, 2).Value
        FechaSalida = Cells(fila, 3).Value
        FechaLlegada = Cells(fila, 4).Value
        PoblaciónOrigen = Cells(fila, 5).Value
        PoblaciónDestino = Cells(fila, 6).Value
        KmsNac = Cells(fila, 7).Value
        KmsInt = Cells(fila, 8).Value
        Precioventa = Cells(fila, 9).Value
        PrecioKmsNac = Cells(fila, 10).Value
        PrecioKmsInt = Cells(fila, 11).Value
        
        
        'enviamos datos
        'hay que enviar antes de que salte de fila
        
        Worksheets(vehiculo).Select
        filadest = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Sheets(vehiculo).Cells(filadest + 1, columdest).Value = vehiculo
        Sheets(vehiculo).Cells(filadest + 1, columdest + 1).Value = NCarga
        Sheets(vehiculo).Cells(filadest + 1, columdest + 2).Value = FechaSalida
        Sheets(vehiculo).Cells(filadest + 1, columdest + 3).Value = FechaLlegada
        Sheets(vehiculo).Cells(filadest + 1, columdest + 4).Value = PoblaciónOrigen
        Sheets(vehiculo).Cells(filadest + 1, columdest + 5).Value = PoblaciónDestino
        Sheets(vehiculo).Cells(filadest + 1, columdest + 6).Value = KmsNac
        Sheets(vehiculo).Cells(filadest + 1, columdest + 7).Value = KmsInt
        Sheets(vehiculo).Cells(filadest + 1, columdest + 8).Value = PrecioKmsNac
        Sheets(vehiculo).Cells(filadest + 1, columdest + 9).Value = PrecioKmsInt
        Sheets(vehiculo).Cells(filadest + 1, columdest + 10).Value = Precioventa

        
        End If
        fila = fila + 1
        Loop While vehiculo <> ""

Application.ScreenUpdating = True
End Sub

Hola a todos, es tu misma rutina (Módulo3), con algunas modificaciones,. revisalo. Si tienes otra pregunta abre un nuevo tema para que tengas mas oportunidad de ayuda.

MACROMod.xlsm

publicado

Si tienes 147 registros de 3 campos o columnas 

tu arreglo seria matriz(147,3)

donde:

fila=1

for each dato in selection 

 

 

publicado

dim matriz(147,3)

registro=1

campo=1

for each dato in selection

     if campo > 3 then

          registro=registro+1

          campo=1

     endif

     matriz(registro,campo)=dato

     campo=campo+1

next

Espero te sirva la idea     

 

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.