Eliminar criterios con una macro

Un soporte por favor,

Tengo un archivo donde en la columna "C" se detallan unos centros de cada pedido.

Ver foto1

En esa columna tengo varios centros, pero los que nunca voy a necesitar son los centros "PE1T" y "PE23"

Lo que hago manualmente es filtrar, selecciono esos centros (Ver foto2) y elimino las filas que comprenden dichos registros.

.

Quisiera que me ayuden a ver si una macro puede hacer ese proceso, teniendo en cuenta que mi archivo puede tener n registros, pero siempre los centros van a caer en la columna C.

Es la primera parte que quiero que haga una macro, luego formulare nuevas preguntas para que quede al 100%

4 Respuestas

Respuesta
1

Estos ejemplos realizan un bucle, tal vez te aporten algo más sobre lo que necesitas

https://youtu.be/Rac3rYG9Jqs

https://youtu.be/yFNlSsYZZF0

https://youtu.be/_XvTiwgPHzo

Respuesta
1

H o l a

te paso la macro

Sub EliminarFila()
'Fuente:Dante Amor
'Act. Adriel Ortiz
    Set h = Sheets("Sheet1")
    cond = Array("PE1T", "PE23")
    For i = h.Range("C" & Rows.Count).End(xlUp).Row To 2 Step -1
        For j = LBound(cond) To UBound(cond)
            If h.Cells(i, "C") = cond(j) Then
                h.Rows(i).Delete
                Exit For
            End If
        Next
    Next
    MsgBox "Terminado"
End Sub

valora la respuesta para finalizar saludos!

Respuesta
1

Te anexo la macro para eliminar centros

Sub Eliminar_Centro()
'Por.Dante Amor
    For i = Range("C" & Rows.Count).End(xlUp).Row To 2 Step -1
        Select Case Cells(i, "C")
            Case "PE1T", "PE23": Rows(i).Delete
        End Select
    Next
    MsgBox "Fin"
End Sub
Respuesta
1

30.03.17

Hola,

Había empezado a ensayar alguna solución en Visual Basic que extrajera en otro rango la selección que hicieras.

Pero me dí cuenta de que eso lo hace MS Excel - y lejos más eficientemente que una macro- a través de sus Tablas Dinámicas.

Si te interesara como solución a tu necesidad, aquí te explico cómo se crea:

Una tabla dinámica es una herramienta de MS Excel para obtener un reporte agrupado de distintas maneras basado en datos incluidos en una tabla o base de datos.

Es dinámica porque, una vez armada, permite agregar, mover, o eliminar campos en ella hasta lograr el reporte deseado. Además, si cambian los datos en la base original, basta actualizarla (con botón derecho del mouse sobre ella y elegir Actualizar) para tener los resultados inmediatamente sin necesidad de fórmulas ni rutinas de VBA. Para armarla, sigue los siguientes pasos:

1.– Es necesario que cada columna tenga un título único, aún aquellas que estuvieran vacías.

Selecciona tu lista desde esta primera fila (títulos) hasta el último registro en ella. Continúa expandiendo hacia abajo este rango para que futuros registros (por si se agregaran) se incluyan en la Tabla dinámica.

Manténla seleccionada.

2.- Pulsa el botón en "insertar" encontrado en la barra del menú principal y selecciona "Tabla dinámica".

3.- Una ventana pide seleccionar la fuente de los datos. Marca "Lista o base de datos de MS Excel".

4.- Si hubieras dejado tu rango seleccionado, se asumirá ésta como la base de datos fuente. En caso contrario, puedes seleccionar el área en este paso.

Allí también le indicas dónde quieres ubicarla.

5.- Verás que te dejó el Diseño en blanco:

Y, en un panel a la derecha, se mostrarán los títulos de las columnas disponibles. Verás, por ejemplo, en tu caso:

Material

Texto breve de material

Centro

Almacen

Libre Utilización

En control de calidad

Bloqueado

Trans./Trasl.

Devoluciones

6.- El próximo paso depende de ti, porque esto es muy "personalizable". Sólo tienes que arrastrar etiquetas al área donde quieres que ellas sean mostradas.

Por ejemplo:

- Arrastra las etiquetas "Centro", "Producto" y "Texto breve de material" al área de FILAS.

Con botón derecho del mouse sobre las etiquetas de las columnas en la tabla podrás quitarles los subtotales que suele colocar (o agregárselos si no estuvieren).

En la parte superior de la columna "Centro", tendrás una flecha abajo como aquella de los filtros automáticos donde pordrás quitar el tilde de los centros "PE1T" y "PE23".

De esta manera podrás construir reportes que NO consideren esos dos centros.

Luego, eventualmente podrás mover ese campo al area de filtro para que no haga el resumen por cada centro.

- Luego arrastrarla etiqueta "Libre Utilización" al área de los VALORES

Esto es para que los Sume. Si dijera "Contar de" haz click derecho sobre ese campo y, en configuración del campo de Valor, elije "Sumar" y allí mismo puedes cambiar el título y darle formato a los números que vayan a aparecer.

(Nota: otras funciones posibles sobre campos numéricos son:
Contar/Promedio/Min/Max//Producto/ entre otros)

Así conseguirás una tabla donde podrás mostrar sólo los casos seleccionados.

Verás en la parte superior de la pantalla -cuando seleccionas la tabla dinámica- un botón que dice "Diseño del informe", que sirve para modificar el formato de tu tabla. Como viene con autoformato, yo suelo cambiar a Formato Tabular, pero puedes dejarlo como mejor te luzca.

Aparte de lograr lo que querías lograr, contar con una tabla dinámica sobre una base sólida, te permite hacer un sinnúmero de análisis y reportes, simplemente moviendo los campos disponibles a las áreas de construcción.

.

Buenas noches, Juan

De todos modos, si aún necesitas que se depure esa base, la siguiente rutina lo hará.

Accede al Editor de VBA (Atajo: Alt + F11), allí inserta un módulo (Insertar-Módulo) y pega el siguiente código:

Sub ElimCentros()
'---- Variables modificables ----
'=== JUAN, modifica estos datos de acuerdo a tu proyecto:
    Celdaini = "C2" 'Celda donde inicia la columna de centros
    Centro1 = "PE1T" 'clave para eliminar
    Centro2 = "PE23" 'clave para eliminar
'---- fin Variables
'
'---- inicio de rutina:
'  
Application.ScreenUpdating = True
UltCelda = Cells(Rows.Count, Range(Celdaini).Column).End(xlUp).Address
cont = 0
For LaFila = 0 To Range(UltCelda).Row - Range(Celdaini).Row
Elimina = False
With Range(UltCelda).Offset(-LaFila)
    LaCelda = .Value
    Select Case LaCelda
        Case Centro1, Centro2: Elimina = True
    End Select
    If Elimina Then
        .EntireRow.Delete
        cont = cont + 1
    End If
End With
Next
ElMensaje = IIf(cont = 0, "NO SE ELIMINO LINEA ALGUNA, porque" & Chr(10) & "no se encontró " & Centro1 & " ni " & Centro2 & Chr(10) & "en la base", "Fueron eliminadas: " & cont & " linea" & IIf(cont > 1, "s", "") & Chr(10) & "de la base de " & Range(UltCelda).Row - Range(Celdaini).Row & " lineas.")
TipoMens = IIf(cont = 0, vbCritical, vbInformation)
ElTitulo = IIf(cont = 0, "NO SE HIZO NADA", "DEPURACION TERMINADA!")
Application.ScreenUpdating = True
MsgBox ElMensaje, TipoMens, ElTitulo
End Sub

Notarás al principio del código unas variables que podrás modificar en caso de que necesitaras cambiarlas.

Dado que se trata de una rutina de eliminación, te recomiendo que la pruebes en una copia de tu hoja.

Espero que cualquiera de las dos soluciones propuestas te sean de utilidad.

Un abrazo

Fer

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas