Excel - Duda con bucle

 
Vista:
sin imagen de perfil

Duda con bucle

Publicado por Eduardo (6 intervenciones) el 09/04/2018 18:50:56
Buenas tardes.

Primera vez que posteo en el foro, espero puedan ayudarme y a ver si me explico.

Estoy haciendo una macro y necesito realizar la siguiente acción y no encuentro como:

En una columna tengo varios items que me generan varios subtotales, cada subtotal es un equipo y cada item un componente con su monto.

A B C

1 EQUIPO 1 SUBTOTAL
ITEM 1 MONTO
ITEM 2 MONTO
ITEM 3 MONTO
ITEM 4 MONTO
ITEM 5 MONTO

2 EQUIPO 2 SUBTOTAL
ITEM 1 MONTO
ITEM 2 MONTO
ITEM 3 MONTO
ITEM 4 MONTO
ITEM 5 MONTO

3 EQUIPO 3 SUBTOTAL
ITEM 1 MONTO
ITEM 2 MONTO
ITEM 3 MONTO
ITEM 4 MONTO
ITEM 5 MONTO

la cantidad de items y subtotales es completamente variable, la única celda que siempre es fija es la celda C2 que contiene el primer subtotal (del primer equipo que es obligatorio siempre).

Pensé dejar una celda vacía entre el último item de un equipo y el siguiente de manera que pudiera identificar donde comienza el nuevo equipo.

Tengo una idea general pero no se como escribirla:

i = número de equipos

subtotal equipo 1 & último item de equipo 1 son facil de referenciar como c2 y última celda con datos en la columna C partiendo de subtotal equipo 1.

Los siguientes se podrían referenciar con un ciclo que no consigo armar:

- subtotal equipo i = ir al subtotal anterior (subtotal equipo j ( j = i - 1 ) ) bajar a la ultima celda con datos y un offset de (2,0)

- ultima fila del equipo i = ubicar subtotal equipo i y bajar a la ultima celda con datos

ahora en la celda subtotal equipo i, colocar la suma de todos los items de allí a ultima fila del equipo i.

Ahora pasar al siguiente i.

Hacer esto tantas veces como equipos existan.

El número de equipos, se hacen con entrada manual al principio de la macro con un inputobox.

Tengo más o menos la idea pero no encuentro como escribirla en la macro.

Muchísimas gracias de antemano por la ayuda..!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de wordexperto.com
Val: 6.373
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Duda con bucle

Publicado por wordexperto.com (2803 intervenciones) el 09/04/2018 19:35:31
Creo que con tres columnas item, equipo y monto. Solo necesitas una Tabla dinámica para los subtotales o cualquier otro resumen que necesites, añadiendo las correspondientes columnas.
https://wordexperto.com/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Duda con bucle

Publicado por Eduardo (6 intervenciones) el 09/04/2018 19:44:09
Gracias por la respuestas.

El problema es que es un documento que se genera de otra macro y siempre está cambiando, es una cotización.

Entonces la idea de programar esta macro es evitar tener que cada vez que lo genere (unas 6 veces al día aprox), entre tantas cosas como darle formato, insertar columnas nuevas, agregar títulos, etc, etc.. es tener que ajustar estas sumas.

Entonces corriendo la macro, esperaría poder automatizar este proceso iterativo tan tedioso.

Gracias..!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Duda con bucle

Publicado por Antoni Masana (2473 intervenciones) el 10/04/2018 06:30:48
Una opción es modificar la macro que genera esta información para que lo haga de otra forma más amigable, por ejemplo en varias columnas como dice Pepe (WordExperto).

Otra opción es hacer una segunda macro, como dices para organizar los datos.

Para esto seria necesario que subieses un libro de ejemplo.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Duda con bucle

Publicado por eduardo (6 intervenciones) el 10/04/2018 16:04:38
Estimado.

La macro generadora del archivo no se puede modificar, sin embargo el archivo que genera es super amigable, la única cuestión es que no le da formato (y yo no tengo acceso a la programación de dicha macro, aún así me encontrara con el mismo problema porque no sabría como decirle que haga el loop para las sumas)

a continuación le anexo una imágen.

al final lo que se quiere es colocar en cada celda que dice subtotal la suma de los items inmediatos, la cuestión es que pueden ser "n" cantidad de equipos y cada equipos tener "n" cantidad de items, por lo tanto los rangos siempre son variables.

Espero, me haya explicado un poco mejor.

Agradecido.







Captura
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Duda con bucle

Publicado por eduardo (6 intervenciones) el 10/04/2018 16:43:03
Esto es más o menos lo que quiero hacer, pero obviamente no está bien redactado para VBA.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
For i = 2 To 10
 
j = i - 1
 
toteqi = Range("C" & toteqj).End(xlDown).Offset(2, 0).Row
 
ultfi = Range("C" & toteqi).End(xlDown).Row
 
Set rango = Range("C" & toteqi + 1, "C" & ultfi)
 
Range("C" & toteqi).Formula = "=SUM(" & rango.Address(0, 0) & ")"
 
Exit For
 
Next i


Es la idea general, pero no consigo que me cambie el toteqi por toteq2, toteq3 y así.. igualmente para ultfi por ultf2, ultf3...

Lo tengo comenzando en 2, porque los valores para i=1 son fijos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Duda con bucle

Publicado por Antoni Masana (2473 intervenciones) el 11/04/2018 06:33:50
Aquí tienes la macro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Option Explicit
 
Sub SubTotal()
    Dim Lin As Long, Blanco As Byte, Desde As Long, Hasta As Long
 
    Lin = 1
    Blanco = 0
 
    ' ---Bucle hasta que encuentre 5 lineas en blanc
 
    While Blanco < 5
        ' --- Busca en la columna B El texto EQUIPO
 
        While InStr(LCase(Cells(Lin, 2)), LCase("EQUIPO")) = 0 And Blanco < 5
            Lin = Lin + 1
            If Cells(Lin, 2) = "" Then Blanco = Blanco + 1
        Wend
        ' --- Si no es el final busca los ITEMS hasta una línea en blanco o el otro EQUIPO
 
        If Blanco < 5 Then
           Desde = Lin + 1
           Hasta = Lin + 1
 
           While Cells(Hasta, 2) <> "" And InStr(LCase(Cells(Hasta, 2)), LCase("EQUIPO")) = 0
               Hasta = Hasta + 1
           Wend
 
           ' -- Pone la formula
 
           Hasta = Hasta - 1
           Cells(Lin, 3).Select
           ActiveCell.FormulaR1C1 = "=SUM(R" & Desde & "C3:R" & Hasta & "C3)"
           Lin = Hasta + 1
           Blanco = 0
        End If
    Wend
End Sub

Adjunto un ejemplo.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con bucle

Publicado por Eduardo (6 intervenciones) el 11/04/2018 17:31:11
Muchas gracias Antoni por su respuesta.

El código funciona perfecto.

Pero quisiera preguntarle algo más, y me disculpo de antemano por la molestia.

¿Cómo haría si el equipo no se llama equipo, sino que cada uno tiene nombre distinto y no se repiten siempre en el mismo orden? Ej.: bomba, compresor, chiller, motor.. ¿Cómo sería el criterio de búsqueda?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Duda con bucle

Publicado por Antoni Masana (2473 intervenciones) el 12/04/2018 05:52:03
Posteriormente pensé en ello. Que el texto EQUIPO era simbólico y no una palabra que estuviese en la celda.

Te pongo el codigo con los cambios remarcados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Option Explicit
 
Sub SubTotal()
    Dim Lin As Long, Blanco As Byte, Desde As Long, Hasta As Long
 
    Lin = 1
    Blanco = 0
 
    ' ---Bucle hasta que encuentre 5 lineas en blanc
 
    While Blanco < 5
        ' --- Busca en la columna B El texto EQUIPO
 
        While Len(Cells(Lin, 1)) > 0 And Blanco < 5
            Lin = Lin + 1
            If Cells(Lin, 2) = "" Then Blanco = Blanco + 1
        Wend
        ' --- Si no es el final busca los ITEMS hasta una línea en blanco o el otro EQUIPO
 
        If Blanco < 5 Then
           Desde = Lin + 1
           Hasta = Lin + 1
 
           While Cells(Hasta, 2) <> "" And Len(Cells(Hasta, 1)) = 0
               Hasta = Hasta + 1
           Wend
 
           ' -- Pone la formula
 
           Hasta = Hasta - 1
           Cells(Lin, 3).Select
           ActiveCell.FormulaR1C1 = "=SUM(R" & Desde & "C3:R" & Hasta & "C3)"
           Lin = Hasta + 1
           Blanco = 0
        End If
    Wend
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con bucle

Publicado por Eduardo (6 intervenciones) el 16/04/2018 18:54:13
Antoni.

En el caso del nuevo código, excel comprueba una a una todas las celdas de la columnas hasta la última de la hoja, aún cuando esté blanca y coloca un 0, nunca se detiene.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar