Jump to content

Ingresar datos en Matriz de dos dimensiones


Go to solution Solved by Enid86,

Recommended Posts

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

Link to post
Share on other sites

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

 

Link to post
Share on other sites
Posted (edited)

 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

Edited by Enid86
Link to post
Share on other sites

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

Link to post
Share on other sites
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

Link to post
Share on other sites
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! 😊

Link to post
Share on other sites
  • Solution

¡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

 

Link to post
Share on other sites
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

Link to post
Share on other sites

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     

 

Edited by vaguilarpau
Link to post
Share on other sites
a


  • Crear macros Excel

  • Posts

    • Hola a todos. Quería vuestra opinión. Tengo un programa que envío las nóminas por correo y en una hoja tengo una tabla con los empleados. La empresa ha decidido cambiar todos los ID de los empleados poniendo un carácter más delante. Es decir, si alguien era el 76254 ahora es 076254. Yo en mis PDFs lo tenía como (76254)_Nómina_2020_10. Ahora que tengo más de 1.000 fichero guardados he de volver  renombrarlos con (076254)_Nómina_2020_10. Y lo que quería preguntaros es si me aconsejáis que haga una macro para cambiar el nombre de cada fichero (cosa que no veo por donde empezar) o que me busque en la Red algún programa que haga esto específicamente. Gracias. Moisés.
    • Saludos a todos, con la siguiente disyuntiva quiero con macros filtrar una base de datos para quitarle todos los espacios en blanco y copiar los valores restantes a otra hoja. Pero al momento de estar grabando la macro me marca este error "Demasiadas continuaciones de linea". Anexo archivo de ejemplo. De antemano muchas gracias.   demasiadas continuaciones de lineas .xlsm
    • Muchas gracias. Funciona perfecto 😊
    • Ayuda, tengo dificultad para obtener las sumas parciales y totales por mes, de cada hoja de control de tiempo trabajado de cada colaborador en: CCTC1, CCTC2, CCTC3 y CCTC4 en la columna de tiempo tiempo trabajado, también la conversión de la columna total en horas trabajado en horas, ésta conversión se traslada a la hoja de DATOSRESUMEN en el CUADRO 1. REGISTRO DE HORARIO TRABAJADO, de cada colaborador.    AYUDAEXCEL25.11.2020.xlsx
    • Muchísimas gracias. Es justo lo que necesitaba. Millones de gracias
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy