Sub totales de columnas con macros excel

Si alguien puede ayudarme a resolver este problema.

Tengo una hoja en (Hoja2) que tiene los datos de orden y pesos en la columna Ay B 40 datos

Salta una columna libre y en la DE aparecen los siguientes 40.. Salta otra columna y en la G y H ... Aparecen otros datos., así sucesivamente hasta culminar con la cantidad no necesariamente termina.. En la fila 41. Es decir el termino de columnas y filas es variables.

Lo que es fijo es que los datos siempre están dejando una columna libre

Encontré este código, pero este suma sin diferenciar el N°orden y los pesos.. Necesito que en la columna de Orden, se escriba "SubTotal" y en la columna de pesos la suma.. Así sucesivamente

Sub SumarPesos()
Dim Suma, Acumulado As Double
Dim UF, UC As Long
Dim I As Integer
Dim Ncolum As Integer
UF = Hoja3.Range("B" & Rows.Count).End(xlUp).Row + 1
UC = Hoja3.Range("AV4").End(xlToLeft).Column + 1
 For Ncolum = 2 To UC ' como hacer para que salte una columna
 Suma = 0
 For I = 4 To UF
 Suma = Suma + Hoja3.Cells(I, Ncolum)
 If Hoja3.Cells(I, Ncolum) = "" Then
    Hoja3.Cells(I, Ncolum) = CDbl(Suma)
     Hoja3.Cells(I, Ncolum).Font.Bold = True
     Suma = 0
     End If
Next I
'Ncolumn = Ncolumn + 3 no salta la columna en donde esta el orden
Next Ncolum
End Sub

2 respuestas

Respuesta
2

Comentas: Tengo una hoja en (Hoja2) que tiene los datos de orden y pesos en la columna Ay B 40 datos.

Pero luego la macro menciona Hoja3 por lo que no se si el orden de la Hoja2 coincide con el de la Hoja3.

Pero, para hacer saltos de columnas en un bucle del tipo For ... Next debes utilizar Step e indicar la cantidad de columnas a saltar.

En tu ejemplo, si los importes están en B, E y H, la instrucción sería:

For Ncolum = 2 To UC Step 3 ' como hacer para que salte una columna

Si esto no resuelve tu consulta debieras aclarar un poco más la ubicación de los datos de origen y de destino. O enviame una muestra al correo cibersoft.arg de gmail.com

¡Gracias! 

con su ayuda ya esta solucionado.

Este es el código..ya solucionado, solo que al final  cuando ya no hay datos  copia total y pone cero..deberia saltar si no hay datos

Sub SumarPesos()
Dim Suma, Acumulado As Double
Dim UF, UC As Long
Dim I As Integer
Dim Ncolum As Integer
UF = Hoja3.Range("B" & Rows.Count).End(xlUp).Row + 1
UC = Hoja3.Range("AV4").End(xlToLeft).Column + 1
For Ncolum = 2 To UC Step 3 ' como hacer para que salte una columna
Suma = 0
For I = 4 To UF
Suma = Suma + Hoja3.Cells(I, Ncolum)
If Hoja3.Cells(I, Ncolum) = "" Then
Hoja3.Cells(I, Ncolum) = CDbl(Suma)
Hoja3.Cells(I, Ncolum).Font.Bold = True
Suma = 0
Hoja3.Cells(I, Ncolum - 1) = "Total" '''solo que cuando no encuentra datos no sale,continua hasta la fila I
Hoja3.Cells(I, Ncolum - 1).Font.Bold = True
End If

Hoja3.Cells(I, Ncolum).Borders(xlEdgeBottom).Weight = xlMedium


Next I


Next Ncolum
End Sub

Debieras dejar aquí (o enviarmela) una imagen de tu hoja, porque en mi ejemplo la macro funciona correctamente.

No queda clara esta nota: Hoja3. Cells(I, Ncolum - 1) = "Total" '''solo que cuando no encuentra datos no sale, continua hasta la fila I

Porque en el bucle For I = 4 to UF, si la celda es 0 coloca el total de la suma y el texto TOTAL.

Ahora, si lo que intentas es que en ese momento ya no avance con el resto de las filas porque consideras que hasta aquí solamente deben sumarse, tendrás que salir del For con la instrucción Exit For de este modo:

For I = 4 To UF
    Suma = Suma + Hoja3.Cells(I, Ncolum)
    If Hoja3.Cells(I, Ncolum) = "" Then
        Hoja3.Cells(I, Ncolum) = CDbl(Suma)
        Hoja3.Cells(I, Ncolum).Font.Bold = True
        Suma = 0
        Hoja3. Cells(I, Ncolum - 1) = "Total" '''solo que cuando no encuentra datos no sale, continua hasta la fila I
        Hoja3.Cells(I, Ncolum - 1).Font.Bold = True
        Exit For
    End If
    Hoja3.Cells(I, Ncolum).Borders(xlEdgeBottom).Weight = xlMedium
Next I

Fijate que la instrucción de borde está fuera del IF...END IF. por lo tanto coloca el borde en todas las filas y no en la del total. Creo que lo ideal sería dar  borde al Total por lo que debieras colocar esa instrucción antes del Exit For,

Lamentablemente no se pueden subir imágenes aquí ;(

Si el tema queda resuelto no dejes de marcar una votación o valoración para dar el tema por cerrado.

Sdos!

Respuesta
1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas