Поиск значений и подсчет событий в таблице - PullRequest
0 голосов
/ 04 марта 2019

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

Например, если у меня есть таблица, подобная этой регистрацииежедневные остановки для машин.

          |   Day 1    |   Day 2     |    Day 3     |
          |:----------:|:-----------:|:------------:|
Machine 1 |     a      |     a       |   No stop    |
Machine 2 |     d      |     g       |      b       |
Machine 3 |     e      |     c       |   No stop    |
Machine 4 |     g      |     i       |      a       |
Machine 5 |     c      |     a       |      b       |
Machine 6 |     a      |     b       |      c       |

(буквы ai обозначают различные типы остановок)

Я хочу создать такой список.

|   Stop     | Occurances |
|:----------:|:----------:|
|     a      |      5     |
|  No stop   |      2     |
|     d      |      1     |
|     g      |      2     |
|     b      |      3     |
|     e      |      1     |
|     c      |      3     |
|     i      |      1     |

У меня естьЯ уже нашел способы сделать это для одного столбца, у меня возникли проблемы с этим для нескольких столбцов.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Хотя решение, которое я нашел, не является макросом / формулой, я обнаружил, что самым простым и быстрым способом решения этой проблемы было отключение таблицы.Я сделал это, выбрав всю таблицу Data-> From Table / Range и в Power Transform Editor Transform-> Unpivot Columns.

Это дало мне все остановки в одном столбце, который был намного более управляемым.

Используя Data-> Remove Duplicates, я мог получить уникальные остановки и мог использовать простой

=COUNTIF(RANGE_TABLE;STOP_NR)

, чтобы получить вхождения остановок.

0 голосов
/ 04 марта 2019

Вы можете изменить код и попробовать:

Option Explicit

Sub test()

    Dim rng1 As Range, rng2 As Range, cell As Range
    Dim Lastrow As Long, Times1 As Long, Times2 As Long

    'Indicate which sheet you will use
    With ThisWorkbook.Worksheets("Sheet1")
        'Set the range where all data appears
        Set rng1 = .Range("B2:D7")
        'Loop the range
        For Each cell In rng1
            'Find the last row of the column with the results
            Lastrow = .Cells(.Rows.Count, "F").End(xlUp).Row
            'Set the range will all the stops
            Set rng2 = .Range("F2:F" & Lastrow)
            'Count how many times a stop appears in the results
            Times1 = Application.WorksheetFunction.CountIf(rng2, cell.Value)
            'If it does appears regord
            If Times1 = 0 Then

                Times2 = Application.WorksheetFunction.CountIf(rng1, cell.Value)
                .Range("F" & Lastrow + 1).Value = cell.Value
                .Range("G" & Lastrow + 1).Value = Times2

            End If

        Next cell

    End With

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