Como solucionar Error #¡DIV!0 en VBA

Tengo una macro que de un listado de una BD arma una tabla con sumas y divisiones. El problema es que cuando divide dos 0 es decir 0 entre 0, da el famoso #¡DIV! 0 a pesar de tener el IFError, cuando hay un 0 y el otro es cualquier numero mayor o igual a 0 entonces si divide correctamente.
Private Sub AddTotales(targetSheet As String, pivotColumn As String, custom_total As String)
Dim sht As Worksheet
Dim LastRow As Long
Dim col As Integer
Dim arrColumns() As String: arrColumns = Split("B,C,D,E,F,G,H,I,J,K,L,M,N", ",")
Dim first, last, size As Integer
first = LBound(arrColumns)
last = UBound(arrColumns)
size = last - first
Set sht = ThisWorkbook.Worksheets(targetSheet)
LastRow = sht.Cells(sht.Rows.count, pivotColumn).End(xlUp).Row
sht.Range("M" & fila_arrojar_informacion).Copy
sht.Range("N" & fila_arrojar_informacion).PasteSpecial Paste:=xlPasteFormats
sht.Range("N" & fila_arrojar_informacion).Value = "TOTAL ANUAL"
sht.Range("N" & fila_arrojar_informacion + 1).Formula = "=SUM(B" & fila_arrojar_informacion + 1 & ":M" & fila_arrojar_informacion + 1 & ")"
sht.Range("N" & fila_arrojar_informacion + 2).Formula = "=SUM(B" & fila_arrojar_informacion + 2 & ":M" & fila_arrojar_informacion + 2 & ")"
For col = 0 To size
sht.Range(arrColumns(col) & LastRow + 1).Formula = "=IFERROR(" & arrColumns(col) & fila_arrojar_informacion + 2 & " - " & arrColumns(col) & fila_arrojar_informacion + 1 & ",0) / " & arrColumns(col) & fila_arrojar_informacion + 1
sht.Range(arrColumns(col) & LastRow + 1).NumberFormat = "0.00%"
Next col
sht.Columns("A:N").ColumnWidth = 15
fila_arrojar_
Luego me funciono con la formula así: sht.Range(arrColumns(col) & LastRow + 1).Formula = "=IFERROR(" & arrColumns(col) & fila_arrojar_informacion + 2 & " - " & arrColumns(col) & fila_arrojar_informacion + 1 & " / " & arrColumns(col) & fila_arrojar_informacion + 1 & ",0)"
Pero cuando dividía entre números < ó  > a 0 hacia mal las divisiones, por ejemplo: (10807575,00-1014033,00) /1014033,00= 1080757400,00% cuando anteriormente hacia bien la operación que debería ser 965,80%.
Intente la funcion IF pero me da Error Next sin For.

Private Sub AddTotales(targetSheet As String, pivotColumn As String, custom_total As String)
Dim sht As Worksheet
Dim LastRow As Long
Dim col As Integer
Dim arrColumns() As String: arrColumns = Split("B,C,D,E,F,G,H,I,J,K,L,M,N", ",")
Dim first, last, size As Integer
Dim x
Dim y
first = LBound(arrColumns)
last = UBound(arrColumns)
size = last - first
x = arrColumns(col) & fila_arrojar_informacion + 2
y = arrColumns(col) & fila_arrojar_informacion + 1
Set sht = ThisWorkbook.Worksheets(targetSheet)
LastRow = sht.Cells(sht.Rows.count, pivotColumn).End(xlUp).Row
sht.Range("M" & fila_arrojar_informacion).Copy
sht.Range("N" & fila_arrojar_informacion).PasteSpecial Paste:=xlPasteFormats
sht.Range("N" & fila_arrojar_informacion).Value = "TOTAL ANUAL"
sht.Range("N" & fila_arrojar_informacion + 1).Formula = "=SUM(B" & fila_arrojar_informacion + 1 & ":M" & fila_arrojar_informacion + 1 & ")"
sht.Range("N" & fila_arrojar_informacion + 2).Formula = "=SUM(B" & fila_arrojar_informacion + 2 & ":M" & fila_arrojar_informacion + 2 & ")"
For col = 0 To size
If x = 0 Or y = 0 Then
sht.Range(arrColumns(col) & LastRow + 1).Formula = "=IFERROR(" & arrColumns(col) & fila_arrojar_informacion + 2 & " - " & arrColumns(col) & fila_arrojar_informacion + 1 & " / " & arrColumns(col) & fila_arrojar_informacion + 1 & ",0)"
sht.Range(arrColumns(col) & LastRow + 1).NumberFormat = "0.00%"
Next col
sht.Columns("A:N").ColumnWidth = 15
fila_arrojar_informacion = LastRow + 7
End If

If x <> 0 Or y <> 0 Then
sht.Range(arrColumns(col) & LastRow + 1).Formula = "=IFERROR(" & arrColumns(col) & fila_arrojar_informacion + 2 & " - " & arrColumns(col) & fila_arrojar_informacion + 1 & ",0) / " & arrColumns(col) & fila_arrojar_informacion + 1
sht.Range(arrColumns(col) & LastRow + 1).NumberFormat = "0.00%"
Next col
sht.Columns("A:N").ColumnWidth = 15
fila_arrojar_informacion = LastRow + 7
End If

End Sub

¿Alguien me puede darme una solución para esto?

1 respuesta

Respuesta
1

H o l a : Prueba con lo siguiente:

sht.Range(arrColumns(col) & LastRow + 1).Formula = "=IFERROR((" & arrColumns(col) & fila_arrojar_informacion + 2 & " - " & arrColumns(col) & fila_arrojar_informacion + 1 & ")/" & arrColumns(col) & fila_arrojar_informacion + 1 & ",0)"
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas