Как проверить повторное значение в массиве в предыдущей позиции? - PullRequest
0 голосов
/ 14 июня 2019

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

lRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
    ReDim weeks(1 To lRow - 1)

    For i = 2 To lRow
        weeks(i - 1) = WorksheetFunction.WeekNum(Sheet1.Cells(i, "C"), vbMonday)
        'MsgBox lRow
    Next i

так что у вектора "недели" есть (15,4,8,15,15,4,16)

lRow = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To sizeOf(weeks) 
    addHours= 0
    For j = 2 To lRow
        If WorksheetFunction.WeekNum(Worksheets("Sheet2").Cells(j, "B"), vbMonday) = weeks(i) Then
            addHours= addHours+ Worksheets("Sheet2").Cells(j, "C").Value
            Sheet1.Cells(i + 1, "F") = addHours

        End If
    Next j
    addHours= 0
Next i
WeekHours = addHours

когда приведенный выше код достигнет "недель (3)", он должен пропустить его и проверить, повторяется ли следующий, и продолжить пропуск, если нет, то сделать дополнение.

Любая помощь будет великолепна

1 Ответ

0 голосов
/ 14 июня 2019

Создайте словарь вместо массива.В словаре нет повторяющихся ключей.

Dim weeks as object, k as variant

lRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
set weeks = createobject("scripting.dictionary")

For i = 2 To lRow
    weeks.Item(WorksheetFunction.WeekNum(Sheet1.Cells(i, "C"), vbMonday)) = vbnullstring
Next i

for each k in weeks.keys
    debug.print k
next k
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...