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

Tema cerradoBucle

 Responder Responder
Autor
Mensaje
Galathea Ver desplegable
Habitual
Habitual
Avatar

Unido: 15/Septiembre/2012
Localización: España
Estado: Sin conexión
Puntos: 134
Enlace directo a este mensaje Tema: Bucle
    Enviado: 08/Julio/2018 a las 18:14
Tengo este bucle, pero no hace lo que pretendo:


    Dim fila1 As Integer
    uf = Sheets("Ejecutable").Range("U" & Rows.Count).End(xlUp).Row
    fila1 = 1
    While fila1 < uf
    If Sheets("Ejecutable").Cells(fila1, 21) > 1 Then
    a = Sheets("Ejecutable").Cells(fila1, 21)
    Else
    Sheets("Ejecutable").Cells(fila1, 21) = a
    End If
    fila1 = fila1 + 1
    Wend

Así es como está antes del bucle:        
         
 ABCDEU  
1        
2        
3    comextnd.sql2008  
4NT. CANT. CANT. CANT.    
5AUTOADELMANUAPRVPEDI   
6-------------------------   
700000   
800000   
950008   
1000000   
1100000   
1200000   
1300000   
1400000   
15100062010  
1600000   
1710005   
1800000   
1900000   
2000000   
2100000   
         
Y así es como debe quedarme, la columna U que me rellene hacia abajo el primer valor que encuentra hasta dar con el siguiente,         
y vuelta a empezar hasta que no encuentre más.        
         
 ABCDEU  
1        
2        
3    comextnd.sql2008  
4NT. CANT. CANT. CANT. 2008  
5AUTOADELMANUAPRVPEDI2008  
6-------------------------2008  
7000002008  
8000002008  
9500082008  
10000002008  
11000002008  
12000002008  
13000002008  
14000002008  
15100062010  
16000002010  
17100052010  
18000002010  
19000002010  
20000002010  
21000002010  
       
he escrito tanta inútil cosa, sin descubrirme, sin dar conmigo.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5371
Enlace directo a este mensaje Enviado: 09/Julio/2018 a las 00:10
Te marco en rojo lo que debes añadir/modificar.

Dim fila1 As Integer, uf&, a&

  uf = Sheets("Ejecutable").Range("A" & Rows.Count).End(xlUp).Row

  fila1 = 1

  a = Sheets("Ejecutable").Cells(fila1, 21)

  While fila1 < uf

    If Sheets("Ejecutable").Cells(fila1, 21) > 1 Then

      a = Sheets("Ejecutable").Cells(fila1, 21)

    Else

      Sheets("Ejecutable").Cells(fila1, 21) = a

    End If

    fila1 = fila1 + 1

  Wend



Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi sitio_web con ejemplos Excel.
Arriba
Galathea Ver desplegable
Habitual
Habitual
Avatar

Unido: 15/Septiembre/2012
Localización: España
Estado: Sin conexión
Puntos: 134
Enlace directo a este mensaje Enviado: 09/Julio/2018 a las 00:41
Gracias AnSanVal 

Funciona correctamente, aunque tengo que hacer algo manual antes.

Y es que en la columna 21 (U) pongo una fórmula que después de ponerla en la columna U la pego como valores, y esto hace que celdas que aunque no tenga datos; y que a la vista está vacía tengo que filtrarla y dar al suprimir, solo así sí funciona el bucle. ¿Sabrías decirme a qué se debe esto?

Un saludo.
he escrito tanta inútil cosa, sin descubrirme, sin dar conmigo.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5371
Enlace directo a este mensaje Enviado: 09/Julio/2018 a las 14:59
No termino de entender lo que quieres decir.

¿Que fórmula tienes en U?
¿Que es lo que filtras (criterio)?
¿Que es lo que ocurre si no efectúas ese proceso?

Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi sitio_web con ejemplos Excel.
Arriba
Galathea Ver desplegable
Habitual
Habitual
Avatar

Unido: 15/Septiembre/2012
Localización: España
Estado: Sin conexión
Puntos: 134
Enlace directo a este mensaje Enviado: 11/Julio/2018 a las 12:23
En la columna U tengo esta función:

Range("U1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.FormulaR1C1 = "1"
For fila = Cells(150000, "A").End(xlUp).Row To 1 Step -1
    If Cells(fila, 21).Value = 1 Then
   
    Cells(fila, 22).ClearContents 
'con esta lína borro todo lo que tenga la celda y después pongo la función, si no lo hago así el bucle con el que me ayudaste me da erro y se para. Creo es porque entiende que la celda tiene algo aunque a simple vista no.
    Cells(fila, 22).Value = "=IF(RC[-17]=""FECHA"",MID(RC[-20],6,1)&MID(RC[-19],1,3),"""")"
   
    End If
   
Next

Dim i%, Fin%
With Sheets("Ejecutable")
Fin = Application.CountA(.Range("V:V"))
'Mediante un bucle indicamos que si una celda está vacía
'el valor sea el de la celda anterior.
For i = 2 To Fin
If .Cells(i, 22) = Empty Then .Cells(i, 22) = .Cells(i - 1, 22)
Next
End With
he escrito tanta inútil cosa, sin descubrirme, sin dar conmigo.
Arriba
Galathea Ver desplegable
Habitual
Habitual
Avatar

Unido: 15/Septiembre/2012
Localización: España
Estado: Sin conexión
Puntos: 134
Enlace directo a este mensaje Enviado: 22/Julio/2018 a las 00:49
Se puede cerrar el hilo. Gracias
he escrito tanta inútil cosa, sin descubrirme, sin dar conmigo.
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Prisión Brieva
Estado: Sin conexión
Puntos: 3214
Enlace directo a este mensaje Enviado: 22/Julio/2018 a las 04:28
¿Se ha solucionado?
Those are my principles, and if you don't like them... well, I have others. Groucho Marx
Arriba
Galathea Ver desplegable
Habitual
Habitual
Avatar

Unido: 15/Septiembre/2012
Localización: España
Estado: Sin conexión
Puntos: 134
Enlace directo a este mensaje Enviado: 22/Julio/2018 a las 11:50
Si lo hago como decía primero de forma manual sí, ya que si no limpio las celdas el bucle se detiene. Esto pasa por poner una fórmula que después copio y pego como valores, entiende el bucle que no está vacía.
he escrito tanta inútil cosa, sin descubrirme, sin dar conmigo.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable