** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - eliminar columnas
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoeliminar columnas

 Responder Responder
Autor
Mensaje
moctezuma48 Ver desplegable
Nuevo
Nuevo


Unido: 01/Octubre/2010
Estado: Sin conexión
Puntos: 38
Enlace directo a este mensaje Tema: eliminar columnas
    Enviado: 04/Enero/2011 a las 11:25
Feliz año nuevo a tod@s
 
Tengo un problema con la siguiente macro, que lo que debería hacer es borrar la columna si el valor de la fila 218 es mayor de 0, pero me dice que hay que definir una variable, pero no sé cuál es la variable que me falta.
 
--------
 
Option Explicit
Sub eliminarcolumnas()
Dim I As Integer
Dim celda As Range
For I = 1 To 168
If celda(218, I).Value > 0 Then
celda(218, I).Select
Selection.EntireColumn.Delete
End If
Next I
End Sub
---------
 
Gracias por la ayuda
 
Arriba
sdgm Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 21/Abril/2005
Localización: Guatemala
Estado: Sin conexión
Puntos: 906
Enlace directo a este mensaje Enviado: 04/Enero/2011 a las 15:07
Prueba cambiar "celda" por "Cells"
Cordialmente, David
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5614
Enlace directo a este mensaje Enviado: 04/Enero/2011 a las 18:05

Además de lo comentado por David, yo sustituiría...

If Cells(218, I).Value > 0 Then
  Cells(218, I).Select
  Selection.EntireColumn.Delete
End If
 
... por...
 If Cells(218, I).Value > 0 Then Columns(I).ClearContents
 
... que no necesita selecionar ningún rango.
 
 
Aprendemos intentando resolver dudas ajenas (ayuda cuando puedas/sepas).

Mi sitio_web con ejemplos Excel.
Arriba
moctezuma48 Ver desplegable
Nuevo
Nuevo


Unido: 01/Octubre/2010
Estado: Sin conexión
Puntos: 38
Enlace directo a este mensaje Enviado: 04/Enero/2011 a las 21:11
DeadDeadDead He ejecutado la macro y me borra todas las columnas impares, sin tener en cuenta el valor de la celda.
 
Gracias por ayudar
 
 
Arriba
sdgm Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 21/Abril/2005
Localización: Guatemala
Estado: Sin conexión
Puntos: 906
Enlace directo a este mensaje Enviado: 04/Enero/2011 a las 21:18
El cambio debería ser a:
 
Option Explicit
Sub eliminarcolumnas()
   Dim I As Integer
  'Dim celda As Range
  For I = 1 To 168
    If cells(218, I).Value > 0 Then
      cells(218, I).Select
      Selection.EntireColumn.Delete
    End If
  Next I
End Sub
Observa también que la instrucción Dim celda As Range ya no la necesitarías.
Cordialmente, David
Arriba
sdgm Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 21/Abril/2005
Localización: Guatemala
Estado: Sin conexión
Puntos: 906
Enlace directo a este mensaje Enviado: 04/Enero/2011 a las 21:33
Una corrección:  Al encontrar dos columnas seguidas con datos >0, tu código falla, pues no elimina la segunda.  Para evitar ese problema, prueba con esta otra variante:
 
Option Explicit
Sub eliminarcolumnas()
   Dim I As Integer
  'Dim celda As Range
  For I = 1 To 168
    If Cells(218, I).Value > 0 Then
      Cells(218, I).Select
      Selection.EntireColumn.Delete
      I = I - 1
    End If
  Next I
End Sub
Adaptándola al código de Antonio, quedaría:
 
Option Explicit
Sub eliminarcolumnas()
   Dim I As Integer
  'Dim celda As Range
  For I = 1 To 168
    If Cells(218, I).Value > 0 Then
      Columns(I).Delete
      I = I - 1
    End If
  Next I
End Sub
Ya probé ambas, y funcionan sin problema.  ¿Habrá alguna otra cosa que no se ha considerado?
 
Cordialmente, David
Arriba
oirausu Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 25/Diciembre/2005
Localización: España
Estado: Sin conexión
Puntos: 4217
Enlace directo a este mensaje Enviado: 04/Enero/2011 a las 23:09

Si recorremos columnas para evaluarlas y borrarlas, cuando evaluemos la columna A y la borremos, la que antes era la B pasa a ser la A y la que era la C pasa a ser la B.

Si despues de evaluar la A pasamos a la siguiente, pasamos a la que antes era la C y nos saltamos la que antes era la B porque ha pasado a ser la A.
 
Creo que debes recorrer las columnas desde la ultima hacia la primera.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5614
Enlace directo a este mensaje Enviado: 05/Enero/2011 a las 12:06
Reporte a moderadores de moctezuma48 (es preferible agregar un mensaje al hilo):
 
(Pego)
 
Gracias por tu ayuda y sobre todo por tu paciencia. Cuando me refería a borrar lo utilicé como sinónimo de eliminar, cuando en este caso no lo era.

Ya sé que tengo que fijar ideas y conceptos, y en eso estoy (propósitos de año nuevo).

La macro ya la he retocado y probado y funciona perfectamente, con lo cual ya puedes dar por cerrado el hilo.

Option Explicit
Sub eliminarcolumnas()

Application.ScreenUpdating = False

Dim I As Integer
For I = 1 To 168
If Cells(218, I).Value <> "" Then
Columns(I).Delete
I = I - 1
End If
Next I
Application.ScreenUpdating = True

End Sub

(fin pego)
 
 


Editado por AnSanVal - 05/Enero/2011 a las 12:12
Aprendemos intentando resolver dudas ajenas (ayuda cuando puedas/sepas).

Mi sitio_web con ejemplos Excel.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable