У меня есть крупномасштабный набор данных, и я ищу способ подсчета количества уникальных значений:

Day -ID,    Location-ID,    Truck-ID

1,           18,              1

1,           19,              1

1,           18,              2

2,           18,              2

2,           18,              2

2,           18,              1

2,           20,              1

3,           21,              2

3,           21,              1

Я хочу узнать, сколько грузовиков используется для обслуживания каждого места в день?
Например, сколько грузовиков используется для обслуживания места № 18 в день 2?

Ответ 2, потому что, хотя для местоположения 18, дня 2, есть 3 записи, есть только 2 уникальных идентификатора.

1 ответ1

0

Этот VBa делает то, что вы хотите

Public Sub Truckers()

'YOU NEED TO UPDATE THIS FIRST BIT

Dim entryOfLocation As String
entryOfLocation = "G1"

Dim entryOfDay As String
entryOfDay = "G2"

Dim result As String
result = "G3"

Range(result).Value = 0

Dim startingRow As Integer
startingRow = 2

Dim dayColumn As String
dayColumn = "A"

Dim locationColumn As String
locationColumn = "B"

Dim truckColumn As String
truckColumn = "C"

'STOP MAKING    ANY     UPDATES  :)

Dim uniqueIds As String

Do While (Range(dayColumn & startingRow).Value <> "")

    If Range(dayColumn & startingRow).Value = Range(entryOfDay).Value And Range(locationColumn & startingRow).Value = Range(entryOfLocation).Value Then

        Dim truckId As Integer
        truckId = Range(truckColumn & startingRow).Value

    Dim doesAlreadyExist As Boolean
    doesAlreadyExist = False

    Dim i As Integer

    Dim splitMe() As String
    splitMe = split(uniqueIds, ",")

    For i = 0 To UBound(splitMe)

        If Not splitMe(i) = "" Then

            If Replace(splitMe(i), ",", "") = truckId Then
                doesAlreadyExist = True
                Exit For
            End If

        End If

    Next i

    If UBound(splitMe) = -1 Then
    uniqueIds = uniqueIds & truckId & ","

    End If


    If Not doesAlreadyExist Then
        Range(result).Value = Range(result).Value + 1
    End If


    End If

startingRow = startingRow + 1
Loop

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .