Выбор конкретных строк в Excel и выполнение расчетов с помощью VBA - PullRequest
0 голосов
/ 06 июня 2018

У меня есть эта таблица: enter image description here

Для каждого из секторов (ИТ, потребительский, финансовый и т. Д.) Я хочу добавить инвестированный% и вернуть итоговый результатценности.Например, ИТ должно вернуть 7% (1 + 2 + 4), а здравоохранение должно вернуть 24% (7 + 8 + 9).

Это то, что я имею до сих пор:

Dim sector_array As Variant
Dim sector As Variant
Dim ocell As Range
Dim rng As Range
sector_array = Array("Information Technology", "Financials", "Consumer 
Discretionary", "Energy", "Materials", "Consumer Staples", "Health Care", 
"Industrials", "Utilities", "Telecommunication Services", "Real Estate")


For Each sector In sector_array
For Each ocell In Range("C:C")
    If ocell.Value = sector Then
        If rng Is Nothing Then
            Set rng = ocell.EntireRow
        Else
            Set rng = Union(rng, ocell.EntireRow)
        End If
    End If
Next ocell
If Not rng Is Nothing Then
    rng.Select

End If
Next sector

Как бы мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Используйте словарь.Ключами являются сектор и значения в процентах.Если ключ существует, добавьте процент к существующему значению.

Option Explicit
Public Sub test()
    Dim lastRow As Long, dict As Object, i As Long, key As Variant

    With ActiveSheet
        Dim dataArr()
        dataArr = .Range("C2:E" & .Cells(.Rows.Count, "C").End(xlUp).Row).Value
    End With

    Set dict = CreateObject("Scripting.Dictionary")

    For i = LBound(dataArr, 1) To UBound(dataArr, 1)
        If Not dict.exists(dataArr(i, 1)) Then
            dict.Add dataArr(i, 1), dataArr(i, 3)
        Else
            dict(dataArr(i, 1)) = dict(dataArr(i, 1)) + dataArr(i, 3)
        End If
    Next i

   For Each key In dict.keys
       Debug.Print key & " : " & dict(key)
   Next key

End Sub

Результат в ближайшем окне (Ctrl + G)

data

0 голосов
/ 06 июня 2018

Я бы сделал формулу SUMIF, указав каждую категорию в столбце F.

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