Увеличьте правильную переменную на основе ячейки с - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть этот массив Excel:

enter image description here

Для каждой метки у меня есть соответствующая переменная в памяти. Я хотел бы, чтобы для каждой строки мы добавляли точки сложности в соответствующую переменную.

Я знаю, как рассчитать сумму всех точек сложности с помощью этого кода:

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

Чтобы решить мою проблему Я попытался реализовать решение для метки «Fonctionnel». Это мой код:

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

Но это не работает. Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Для этого можно использовать объект Dictionary: он может отслеживать уникальные метки и их соответствующие суммы.

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 голосов
/ 27 февраля 2020

Я вижу две возможные проблемы, вы можете опубликовать пример ваших данных? Это может быть проблемой: Dim sumFonctionnel As Integer если у вас есть более 32,767 в сумме, это приведет к увеличению буфера, поскольку это предел для целых чисел.

Измените его на Long, чтобы увеличить свой предел, однако, если у вас есть десятичное число точки на любых числах, как long, так и int, отрубят их, поэтому используйте что-то вроде double.

Также не делайте этого:

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

Сделайте это вместо:

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

Последняя ячейка также имеет тенденцию захватывать пустое пространство, это будет захватывать последний ряд фактических данных в столбце А.

Невозможно сделать для вас гораздо больше без выборочных данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...