Jump to content

Eliminar fila en matriz (array)


Recommended Posts

Hola, un saludo a tod@s.

Mi consulta es muy sencilla (o no) pero no he visto nada relacionado con esto por Google, quizás desconozco las palabras exactas.

Me explico, quiero eliminar una fila entera de una array de varias columnas de forma similar a como lo hace nativamente Excel, que seleccionas unas celdas, botón derecho, Eliminar, y el te desplaza todas las de debajo arriba.

He probado con un bucle y subir todo lo de debajo arriba una fila copiando datos, pero lo veo demasiado, y puede que haya algún comando o algún método que lo haga y yo lo desconozca.

Espero haberme explicado con claridad.

No subo ejemplo porque mi pregunta es más bien teórica, con que alguien me apunte algo ya me buscaría la vida.

Muchas gracias.

Edited by xboxfile
Link to post
Share on other sites

Hasta donde yo se, no existe nada parecido a Remove MiArray (i).

Existen varios trucos en función de cada situación, por ejemplo:

  • Pasar el array a una hoja, eliminar la fila y volver a cargar el array
  • Marcar el elemento de alguna manera, cero, blanco, ..., para poder identificar el elemento y actuar en consecuencia
  • ....
Edited by Antoni
Link to post
Share on other sites

Muchas gracias Antoni, como siempre, un placer saludarte. 

Es lo que me temía, lo marcaré y al pasarlo a la hoja omito esa fila y ya está. 

La idea es que aprovechando que se puede pasar a la hoja co un simple

MiRango= miarray te lo pasa sin bucles ni nada. 

Se ha intentado, gracias y hasta otra. 

Tema solucionado

Link to post
Share on other sites

Hola. Todavía estoy a tiempo de publicar.

Por si alguien llega a este post buscando eliminar filas.

Voy a poner el código que me he hecho para eliminar filas de una array, ya que no se puede directamente tal y como lo hace Excel.

En mi caso la Array se llama "IdLibres". Evidentemente, está dentro de un proyecto más grande, pero por si solo le puede valer a cualquiera cambiando a sus nombres de array.

Muchas gracias.

Private Sub BorraFilas ()

Dim i, j, n, uFila, uCol, Fila, Col, Id As Integer
Dim IdLibres, IdLibresTmp() As Variant

'Para generar nuevo Id antes buscamos en array "IdLibres" Id's libres borrados anteriormente
Do While IdLibres(i, ListActivoP0 - 1) <> Empty '<- 4 columnas de más a la derecha
    Id = IdLibres(i, ListActivoP0 - 1)

    If Id > 0 Then '<- Si había un Id disponible
        IdLibres(i, ListActivoP0 - 1) = "XXBorrarXX" '<- Lo marcamos para borrarlo luego
        Exit Do
    End If
    i = i + 1
Loop

'Subimos todas las filas borradas en array "IdLibres" usando una memoria temporal igual
IdLibresTmp = IdLibres'<- Copiamos la array
uFila = UBound(IdLibres): uCol = UBound(IdLibres, 2) '<- Guardamos número de filas y columnas para antes de redimensionar
ReDim IdLibres(uFila, uCol) '<- Borramos la array master

'Volcamos desde la array temporal a la buena todo menos lo que tiene marca "XXBorrarXX"
For j = 0 To NumListBoxP0 - 1
    i = 0: Fila = 0
    Do While IdLibresTmp(i, j) <> Empty
        If IdLibresTmp(i, j) <> "XXBorrarXX" Then
            IdLibres(Fila, j) = IdLibresTmp(i, j)
            Fila = Fila + 1
        End If
        i = i + 1
    Loop
Next j

End Sub

 

TEMA SOLUCIONADO

Link to post
Share on other sites
En 28/11/2020 at 14:57 , xboxfile dijo:

Me explico, quiero eliminar una fila entera de una array de varias columnas de forma similar a como lo hace nativamente Excel, que seleccionas unas celdas, botón derecho, Eliminar, y el te desplaza todas las de debajo arriba.

He probado con un bucle y subir todo lo de debajo arriba una fila copiando datos, pero lo veo demasiado, y puede que haya algún comando o algún método que lo haga y yo lo desconozca.

Hola

Te lo dejo mas facil... no cargues en la matriz esa(s) fila(s)

 

Saludos 

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Crear macros Excel

  • Posts

    • ¡Hola, a ambos! Siguiendo las mismas premisas de @tupy77, también puedes usar la siguiente fórmula: =FECHA(B1;1;1)-DIASEM(FECHA(B1;1;1);2)+7*B2+B3 ¡Bendiciones!
    • Aun asi esta formula te dara el resultado que tu quieres.... =(FECHA(B1;1;1)+(B2*7)+(1>=DIASEM(FECHA(B1;1;1))*7)+1-DIASEM(FECHA(B1;1;1)))+B3 donde B1 es la celda del año y B2 la celda de la semana y B3 donde estaria el numero del dia de la semana.   Da el resultado pero deberias de ser mas esplicito para que sea mas concorde con lo que cualquiera pueda esperar.... Un saludo  
    • hay que ser mas explicito porque tu supuesta Semana 1 emplieza el 4 de enero, que hacemos con los 3 dias primeros?
    • Saludos a todos. Imaginense una tabla a modo base de datos en la que se muestran las columnas Nombre/ fecha/nº recibo/Importe En otra hoja tengo otra tabla con dos columnas Nombre/nº recibo, pero con un filtro para elegir nombre o fecha Lo que quiero es que cuando se aplique el filtro me salga en la columna de "nº recibo" un comentario con el importe que corresponderia a tal fila. Con VBA o macros lo veo casi imposible y no se si hay alguna formula para poder traer el resultado de una celda a modo comentario en otra. Existe alguna formula para esto??? Muchas gracias de antemano
    • Hola a tod@s Pensé haber intentado lo suficiente, no fue así. Leyendo en otros foros lo resolví con lo siguiente Reemplazo el comodín ? por % o _ (subrayado)  LIKE '801-??-88????-???' por LIKE '801-%%-88%%%%-%%%' o LIKE '801-__-88____-___' Link que me ayudo : https://stackoverflow.com/questions/6037290/use-of-like-works-in-ms-access-but-not-vba Al parecer el operador Like de Vba Excel con respecto al operador Like de Access trabajan distinto con respecto a los comodines. Doy terminado el tema Saludos      
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy