Tengo esta matriz de Excel:

enter image description here

Para cada etiqueta tengo una variable correspondiente en la memoria. Me gustaría que para cada línea agreguemos los puntos de complejidad en la variable respectiva.

Sé cómo calcular la suma de todos los puntos de complejidad con este código:

Sub Macro1()

    Dim cellule As Range: Dim memoire As String: Dim sum As Integer

    sum = 0

    For Each cellule In Selection
        memoire = memoire & cellule.Value & "-"
        sum = sum + cellule.Value

    Next cellule

    MsgBox memoire
    MsgBox sum


End Sub

Para resolver mi problema, intenté implementar la solución para la etiqueta "Fonctionnel". Este es mi código:

Sub Macro2()


    Dim DerniereLigne As Long
   Dim ligne As Long
   Dim memoire As String
   Dim sumFonctionnel As Integer

   sumFonctionnel = 0

 Dim le_chiffre As Long
    DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row
    For ligne = 1 To DerniereLigne
            If Cells(ligne, 2) = "Fonctionnel" Then
                sumFonctionnel = sumFonctionnel + Cells(ligne, 1).Value
            End If
    Next ligne


End Sub

Pero no funciona. Gracias por tu ayuda

0
alain 27 feb. 2020 a las 02:20

2 respuestas

La mejor respuesta

Puede usar un objeto Dictionary para esto: puede realizar un seguimiento de las etiquetas únicas y sus sumas correspondientes.

Sub SumVals()

    Dim rng As Range, c As Range, dict, v, k

    Set dict = CreateObject("scripting.dictionary")

    'get the input range for the labels
    With ActiveSheet
        Set rng = .Range(.Range("B1"), .Cells(.Rows.Count, 2).End(xlUp))
    End With

    For Each c In rng.Cells
        v = Trim(c.Value)
        'if there's a label, add to the count
        If Len(v) > 0 Then dict(v) = dict(v) + c.Offset(0, -1).Value
    Next c

    'output the counts
    For Each k In dict
        Debug.Print "Sum for '" & k & "' is " & dict(k)
    Next k

End Sub
0
Tim Williams 27 feb. 2020 a las 01:16

Veo dos posibles problemas, ¿puede publicar un ejemplo de sus datos? Esto podría ser un problema: Dim sumFonctionnel As Integer si tiene más de 32,767 en la suma, explotará el búfer ya que ese es el límite para los enteros.

Cámbielo a Largo para aumentar su límite; sin embargo, si tiene puntos decimales en cualquier número, tanto largo como int los cortarán, así que use algo como el doble.

Tampoco hagas esto:

DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row

Haga esto en su lugar:

DerniereLigne = Range("A" & rows.count).end(xlup).Row

La última celda también tiende a tomar espacio en blanco, esto tomará la última fila de datos reales en la columna A.

No puedo hacer mucho más por ti sin datos de muestra

0
Dan Donoghue 27 feb. 2020 a las 00:58