=AYUDA=COMO ELIMINAR

yra_vj

New Member
Joined
Mar 29, 2007
Messages
18
Hola que tal
Estoy tratando de hacer una macro que elimine filas completas atraves de una condicion, solo que en mi lista existen filas vacias, y no me doy idea de como hacer para que solo borre las filas que no necesito, les mostrare un ejemplo de como esta mi informacion:

<table border="1" bordercolor="#C0C0C0" bordercolordark="#FFFFFF" cellspacing="0" > <tr valign="top"> <th width="63" height="21" valign="bottom"><font face="Monospace" size="1"><nobr>Tipo</nobr></font></th> <th width="63" height="21" valign="bottom"><font face="Monospace" size="1"><nobr>Cantidad</nobr></font></th> <th width="63" height="21" valign="bottom"><font face="Monospace" size="1"><nobr>Precio</nobr></font></th> </tr> <tr valign="top"> <td width="63" height="21" valign="bottom"><font face="Monospace" size="1"><nobr>ENB</nobr></font></td> <td width="63" height="21" align="right" valign="bottom"><font face="Monospace" size="1"><nobr>456900</nobr></font></td> <td width="63" height="21" align="right" valign="bottom"><font face="Monospace" size="1"><nobr>809777</nobr></font></td> </tr> <tr valign="top"> <td width="63" height="21" valign="bottom"><font face="Monospace" size="1"><nobr>ENB</nobr></font></td> <td width="63" height="21" align="right" valign="bottom"><font face="Monospace" size="1"><nobr>567</nobr></font></td> <td width="63" height="21" align="right" valign="bottom"><font face="Monospace" size="1"><nobr>5000</nobr></font></td> </tr> <tr valign="top"> <td width="63" height="21" valign="bottom"><font face="Monospace" size="1"><nobr>KG</nobr></font></td> <td width="63" height="21" align="right" valign="bottom"><font face="Monospace" size="1"><nobr>34</nobr></font></td> <td width="63" height="21" align="right" valign="bottom"><font face="Monospace" size="1"><nobr>456</nobr></font></td> </tr> <tr valign="top"> <td width="63" height="21" valign="bottom"><font face="Monospace" size="1"><nobr>PZA</nobr></font></td> <td width="63" height="21" align="right" valign="bottom"><font face="Monospace" size="1"><nobr>567</nobr></font></td> <td width="63" height="21" align="right" valign="bottom"><font face="Monospace" size="1"><nobr>56789</nobr></font></td> </tr> <tr valign="top"> <td width="63" height="21" align="right" valign="bottom"><font face="Monospace" size="1"><nobr></nobr></font></td> <td width="63" height="21" align="right" valign="bottom"><font face="Monospace" size="1"><nobr></nobr></font></td> <td width="63" height="21" align="right" valign="bottom"><font face="Monospace" size="1"><nobr></nobr></font></td> </tr> <tr valign="top"> <td width="63" height="21" valign="bottom"><font face="Monospace" size="1"><nobr>ENB</nobr></font></td> <td width="63" height="21" align="right" valign="bottom"><font face="Monospace" size="1"><nobr>678</nobr></font></td> <td width="63" height="21" align="right" valign="bottom"><font face="Monospace" size="1"><nobr>678900</nobr></font></td> </tr> <tr valign="top"> <td width="63" height="21" valign="bottom"><font face="Monospace" size="1"><nobr>PZA</nobr></font></td> <td width="63" height="21" align="right" valign="bottom"><font face="Monospace" size="1"><nobr>777</nobr></font></td> <td width="63" height="21" align="right" valign="bottom"><font face="Monospace" size="1"><nobr>89770</nobr></font></td> </tr></table>

Yo solo quiero quedarme con todo lo que sea = a ENB, lo demas no me sirve, este es el codigo que estoy usando, pero no me doy idea de como saltarme las filas para que continue borrando lo que no me sirve:
Code:
Sub Eliminar()
  ActiveCell.Offset(1, 0).Range("A1").Select
    While ActiveCell.Value <> ""
        If ActiveCell.Value = "PZA" Or "KG" Then
           Selection.Delete Shift:=xlUp
        Else
          ActiveCell.Offset(1, 0).Range("A1").Select
        End If
    Wend
End Sub
Porfavor cualquier idea sera muy agradecida!! :roll:

<hr />editado por Greg para poner los datos en una tabla y el VBA dentro de etiquetas de "code"
 

Excel Facts

Copy PDF to Excel
Select data in PDF. Paste to Microsoft Word. Copy from Word and paste to Excel.
Bienvenido a MrExcel.com. Disculpe que no tengo tiempo para explicar bien qué es lo que hace la rutina que le ofrezco, pero estoy ocupadisimo hoy en el trabajo. Si puedo, regreso con una explicación de los «por qués» la semana entrante.

Code:
Sub BorrarNoENB()
    Dim rngCorriente As Range, rngColumna As Range, rngNoENB As Range
    
    Set rngCorriente = Range("A1").CurrentRegion
    Set rngColumna = rngCorriente.Columns(1)
    With rngColumna
        Set rngColumna = .Offset(1).Resize(.Rows.Count - 1)
    End With
    
    rngCorriente.AutoFilter Field:=1, Criteria1:="<>ENB"
    
    Set rngNoENB = Nothing
    On Error Resume Next
    Set rngNoENB = rngColumna.SpecialCells(xlCellTypeVisible)
    If Err.Number <> 0 Then
        rngCorriente.AutoFilter
        Exit Sub
    End If
    
    rngNoENB.ClearContents
    With rngCorriente
        .AutoFilter
        .Sort Key1:=Range("A1"), _
              Order1:=xlAscending, _
              Header:=xlYes, _
              Orientation:=xlTopToBottom
    End With
    rngColumna.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
 
Upvote 0
¡Uy! Díme... ¿sus datos tienen líneas (filas) completamente blancos/vacios como en su ejemplo?
 
Upvote 0
Hola otra vez

Q tal
Gracias por darme la bienvenida a este foro, confio en que poco a poco ire aprendiendo nuevas cosas y espero algun dia porder retribuir un poco de esta ayuda.
Respecto a tu pregunta en mi informacion se encuentran filas vacias,tal como mi ejemplo,voy a experimentar usando el codigo que me sugieres, gracias por orientarme un poco....
 
Upvote 0
=Nuevamente Ayuda=

He probado el codigo que me has sugerido y funciona, solo que al toparse con una fila vacia ya no me es funcional, de que manera puedo eliminar las filas que se encuentren vacias y las que contengan datos distintos a ENB??

<hr />
Respuesto directo: Sí, yo sabía que el código arriba fallará c/ filas vacias. Fue por eso que pregunté. Vea abajo para la solución.
~Greg
 
Upvote 0
Si usted va a tener filas vacias entonces el siguiente le sirvería mejor. Pero sepa que este agarra todas las celdas usadas en la hoja. Entonces si hay filas que no debe de estar incluidas en el proceso (la cabeza está ignorado) entonces hágame saber para buscar una solución que excluye las filas apropriadas
Code:
Sub BorrarNoIguales()
    Dim rngCorriente As Range, rngColumna As Range, _
        rngNoENB As Range, rngUltima As Range
    
    Set rngUltima = udfLastCell(ActiveSheet)
    Set rngCorriente = Range(Range("A1"), rngUltima)
    Set rngColumna = rngCorriente.Columns(1)
    With rngColumna
        Set rngColumna = .Offset(1).Resize(.Rows.Count - 1)
    End With
    
    rngCorriente.AutoFilter Field:=1, Criteria1:="<>ENB"
    
    Set rngNoENB = Nothing
    On Error Resume Next
    Set rngNoENB = rngColumna.SpecialCells(xlCellTypeVisible)
    If Err.Number <> 0 Then
        rngCorriente.AutoFilter
        Exit Sub
    End If
    
    rngNoENB.ClearContents
    With rngCorriente
        .AutoFilter
        .Sort Key1:=Range("A1"), _
              Order1:=xlAscending, _
              Header:=xlYes, _
              Orientation:=xlTopToBottom
    End With
    rngColumna.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Function udfLastCell(ws As Worksheet) As Range
    Dim LastRow&, LastCol%
    LastRow = 1: LastCol = 1
    ' Error-handling is here in case there is not any
    ' data in the worksheet
    On Error Resume Next
    With ws
        ' Find the real last row
        LastRow = .Cells.Find(What:="*", _
            SearchDirection:=xlPrevious, _
            SearchOrder:=xlByRows).Row
        ' Find the real last column
        LastCol = .Cells.Find(What:="*", _
            SearchDirection:=xlPrevious, _
            SearchOrder:=xlByColumns).Column
    End With
    Set udfLastCell = ws.Cells(LastRow, LastCol)
End Function

comentario: uno sí puede correr un bucle para hacer esto. Pero es más rápido usar AutoFilter. Además uno sí puede usar AutoFilter sencillamente y borrar así, pero si hay mucha filas esto también va a ser muy lento porque las filas para conservar están intercalados (mezclados) con las que quiere suprimir. Lo más rápido es:
  1. Usar Autofilter para esconder las filas que uno quiere conservar.
  2. Borrar (clearcontents) los datos de las celdas claves.
  3. Apagar Autofilter
  4. Sortear en la columna donde acaba de borrar porque celdas vacias se sortea hacia el final
  5. Borrar las filas que ahora están agrupados al final del bloque
 
Upvote 0
Gracias

Gracias por la ayuda brindada, me ha sido muy util,podria sugerirme el titulo de algun libro que pueda ayudarme a adentrarme en el desarrollo de macros en vb?? o inclusive algun link ?
Muchas gracias.
 
Upvote 0
Modificacion a ayuda sugerida

He probado el codigo que me sugieres pero por cuestiones de diseño se han movido de columna mis datos, al ejecutar el codigo antes mencionado efectivamente elimina toodo lo que no sea ENB pero ahora que mis datos estan en otra celda me elimina otros datos que si necesito...que debo de modificarle al codigo que me sugieres para que ahora elimine lo que se encuentra a la izquierda??,es decir toda la fila.
 
Upvote 0
¿Donde están los datos con el criterio (ENB)? ¿Y cuantas columnas a la izquierda tienen datos?
 
Upvote 0

Forum statistics

Threads
1,223,962
Messages
6,175,654
Members
452,664
Latest member
alpserbetli

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top