То, что я пытаюсь достичьСокращение для петлевой времени выполнения, которая возвращает количество
У меня есть две таблицы: «панель» и «Темп» выч.
Dashboard содержит всю информацию о сотрудниках и диапазон «N1» «N2» содержит даты.
Теперь макрос заполняет данные сотрудника и генерирует ежедневный календарь, как показано на следующем изображении. «temp calc» имеет свои данные о проекте с датой окончания даты начала (дата, которая не падает между датами n1 и n2 с панели управления лист удаляются здесь).
Так что теперь, ссылаясь на их эмпирику из листа приборной панели, и используя первый день, заполненный листом панели мониторинга, я прохожу через идентификатор emp в листе temp calc и возвращаю счет для количества проектов, над которыми работник в настоящее время работает для конкретного день. как показано на следующем рисунке.
, как достичь этого:
код .....
Option Explicit
Sub Count()
' x= no of columns(dashboard calender)
' y= no of rows(dashboard emp id)
' z= no of rows(temp calc sheet emp id)
Application.ScreenUpdating = False
'Clear calender data
Range("Q4").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.ClearContents
Dim i, j, k, l, d, x, y, z, Empid As Long
Dim currentdate, startdate, enddate As Date
x = (Range("n2") - Range("n1")) + 1
y = Application.WorksheetFunction.counta(Range("A:A")) - 1
z = Application.WorksheetFunction.counta(Worksheets("Temp Calc").Range("A:A")) - 1
For i = 1 To y Step 1 'To loop through the emp_id in dashboard.
For j = 1 To x Step 1 'To loop through the calender in dashboard daywise.
d = 0
For k = 1 To z Step 1 'To loop through the emp_id i temp calc sheet.
Empid = ActiveSheet.Cells(i + 3, 1).Value
currentdate = Cells(3, 16 + j).Value
startdate = Worksheets("Temp calc").Cells(k + 1, 3).Value
enddate = Worksheets("Temp calc").Cells(k + 1, 4).Value
If (Worksheets("Temp calc").Cells(k + 1, 1).Value) = Empid Then
If (currentdate >= startdate) And (currentdate <= enddate) Then 'To check whether the first column date falls within the project start and end date
d = d + 1
End If
End If
Next
Worksheets("Dashboard").Cells(i + 3, j + 16) = d
Next
Next
Range("q4").Select
Application.ScreenUpdating = True
End Sub
Моя проблема: код делает работу, но у меня есть две проблемы ,
Это слишком медленно
Иногда учебное пособие будет сказать, не отвечает и не будет делать work.I've проверил это не работает в фоновом режиме. Я оставил программу на ночь, и она не отвечала.
Возможные решения:
используя два массива: один массив для хранения EmpID в приборной панели, второй массив для хранения календаря генерируется в приборной панели. а затем сравните его с данными из таблицы temp calc и верните счет в массив номер 2 и запишите его обратно Проблема заключается в том, что я только начал читать о массивах, и я все еще учился
Я открыт для возможных альтернатив :
веселит,
Мэтью
им изменит свою функцию подсчета, благодаря Floris о сводной таблице Я хочу сохранить свои данные, так как мои книги выглядят, есть много столбцов данных рядом с моим сотрудником, что мне нужно тоже ссылаться Я уже сортирую его на сотрудника, но да, поскольку ваш метод предполагает плохое выработать какой-то способ перейти к следующему сотруднику, который уменьшит время выключения моей петли плохо посмотрите на метод автофильтра спасибо за предложения – mathew
на боковой ноте, можете ли вы по-прежнему мои скриншоты и ваши уведомления. потому что я наклоняю, хочу просто подтвердить, есть ли у сайта проблемы или его только я: | – mathew
Не уверен, что я понимаю ваш последний комментарий? Я вижу ваши скриншоты и получаю уведомления, если это то, о чем вы просили. – Floris