Sumar diagonal de una matriz excel vba

[Buenos días Dante 

Deseo sumar la diagonal de una matriz de 3x3. 

Respuesta
4

Sé que el mensaje no está dirigido a mí pero, al ser un foro público y más aún al no tener respuesta, te propongo una alternativa: Una UDF.

Dicha UDF no solo actúa en matrices de 3x3 sino que en cualquiera que desees siempre y cuando tenga el mismo número de filas y columnas. También suma cualquiera de ambas diagonales, solo debes elegir cuál usando un uno (1) para la que comienza "arriba a la derecha" y un dos (2) para la que comienza "arriba a la izquierda" (variable "linea").

Function Sumandodiagonal(Rango As Range, linea As Byte) As Double
Application.Volatile True
Dim Celda As Range
Dim Coleccion As New Collection
Dim Suma As Double, UltimaFila As Long, Factor As Long, x As Long
If Rango.Rows.Count = 2 Then
MsgBox "El número mínimo de filas y columnas es de tres", vbOKOnly + vbCritical, "Sumandodiagonal"
GoTo Etiqueta_Error
End If
If Rango.Rows.Count <> Rango.Columns.Count Then
MsgBox "El número de filas y columnas no coincide", vbOKOnly + vbCritical, "Sumandodiagonal"
GoTo Etiqueta_Error
End If
If linea <> 1 And linea <> 2 Then
MsgBox "El valor de la diagonal debe ser 1 o 2", vbOKOnly + vbCritical, "Sumandodiagonal"
GoTo Etiqueta_Error
End If
Let UltimaFila = Rango.Rows.Count
For Each Celda In Rango
Coleccion.Add Celda.Value
Next Celda
If linea = 1 Then
Let Factor = Rango.Rows.Count + 1
For x = 1 To (UltimaFila * UltimaFila) Step Factor
Let Suma = Suma + Coleccion(x)
Next x
Else
Let Factor = Rango.Rows.Count - 1
For x = Rango.Rows.Count To ((UltimaFila * UltimaFila) - Factor) Step Factor
Let Suma = Suma + Coleccion(x)
Next x
End If
Let Sumandodiagonal = Suma
Exit Function
Etiqueta_Error:
Let Sumandodiagonal = ""
End Function

Para aplicarla solo coloca en cualquier celda algo así:

=Sumandodiagonal(A1:E5,2)

Comentas

Abraham Valencia

¡Gracias! 

De nada. Feliz año

Abraham Valencia

1 respuesta más de otro experto

Respuesta
1

Te anexo una macro

Sub Suma_diagonal()
'Por.Dante Amor
    Set rango = Range("C3:E5")
    f_ini = rango.Cells(1, 1).Row
    f_fin = rango.Cells(rango.Rows.Count, 1).Row
    c_ini = rango.Cells(1, 1).Column
    For i = f_fin To f_ini Step -1
        wsuma = wsuma + Cells(i, c_ini)
        c_ini = c_ini + 1
    Next
    MsgBox wsuma
End Sub

sal u dos y feliz año 2018!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas