У меня есть таблица со следующими столбцами
Дата, Имя сотрудника, Задание №, Часы, день месяца
каждая строка содержит информацию для всех столбцов.
Все, что я пытаюсь сделать, это объединить (найти СУММ часов) определенные строки на основе следующих критериев / условий:
добавлять и комбинировать строки, когда выполняется следующее значение
- имеет ту же дату
- имеет такое же имя сотрудника
строк, содержащих задачу №, начинающуюся с «LBR», кроме «LBR 30», «LBR 28»
(в моем коде есть еще несколько исключений LBR #)
ИЛИ в строках есть только исключение LBR (LBR 30, LBR 28 ..)
ИЛИ строки, в которых есть только задача без LBR #
другими словами, для определенной даты и имени сотрудника я хочу иметь строки только для трех разных категорий
1) общее количество часов «LBR» (без исключений) (определяется по столбцу «Задача №»)
2) общее количество часов «LBR» (только исключение один раз) (определяется по столбцу «Задача №»)
3) всего не "LBR" часов
* +1034 * Пример: * * одна тысяча тридцать пять
Date Employee Task Hrs Dom
6/4/2019, Wright , Stephen, CND05, 30, 4
6/1/2019, Wimberly, Robert, LBR16, 30, 1
6/1/2019, Wimberly, Robert, CNRWK, 30, 1
6/1/2019, Wimberly, Robert, A02060, 30, 1
6/2/2019, Wimberly, Robert, LBR16, 30, 2
6/2/2019, Wimberly, Robert, A03000, 30, 2
6/2/2019, Wimberly, Robert, A03000, 30, 2
6/2/2019, Wimberly, Robert, LBR30, 30, 2
6/2/2019, Wimberly, Robert, LBR28, 30, 2
6/2/2019, waja, A02060 30, 2
6/2/2019, waja, A02060, 30, 2
Я хочу преобразовать это в:
Date Employee Task Hrs Dom
6/4/2019, Wright, Stephen CND05, 30, 4
6/1/2019, Wimberly, Robert, LBR16, 30, 1
6/1/2019, Wimberly, Robert, CNRWK, 60, 1
6/2/2019, Wimberly, Robert, LBR16, 30, 2
6/2/2019, Wimberly, Robert, A03000, 60, 2
6/2/2019, Wimberly, Robert, LBR 30, 60, 2
6/2/2019, waja , , A02060, 60, 2
То, что я сделал, - это любые две строки с одинаковыми датой, именем и категорией задачи (одна из трех категорий), я взял сумму их часов и сохранил одну строку (удалил кого-либо, а другой оставил) (ПРИМЕЧАНИЕ: это может быть более двух рядов, которые необходимо объединить).
Сначала я отсортировал таблицу по дате, имени и заданию # и реализовал следующий код
Sub SortAndSum()
Dim R As Integer
Dim PR As Integer
Dim wkb As Excel.Workbook
Dim wks As Excel.Worksheet
Set wkb = Excel.Workbooks("LaborHours.xlsx")
Set wks = wkb.Worksheets("srg.hours")
R = 6
Do While wks.Cells(R, 2) <> ""
PR = R - 1
If wks.Cells(R, 1) = wks.Cells(PR, 1) Then
If wks.Cells(R, 2) = wks.Cells(PR, 2) Then
If InStr(1, wks.Cells(R, 3) & wks.Cells(PR, 3), "LBR") = 0 Then GoTo SumAndDelete
ElseIf InStr(1, wks.Cells(R, 3) & wks.Cells(PR, 3), "LBR") = 1 Then
If wks.Cells(R, 3) & wks.Cells(PR, 3) = "LBR10" Or "LBR28" Or "LBR29" Or "LBR291" Or "LBR293" Or "LBR295" Then GoTo SumAndDelete
ElseIf wks.Cells(R, 3) & wks.Cells(PR, 3) <> "LBR10" Or "LBR28" Or "LBR29" Or "LBR291" Or "LBR293" Or "LBR295" Then GoTo SumAndDelete
SumAndDelete:
wks.Cells(R, 4) = Cells(R, 4) + Cells(PR, 4)
wks.Rows(PR).Delete
Else
GoTo NextRow
End If
End If
NextRow:
R = R + 1
Loop
End Sub
проблема с моим кодом:
-Я должен запустить этот код несколько раз, чтобы получить мой окончательный результат.
- при работе с LBR я получаю ошибку времени выполнения 13, TYPE MISMATCH. когда я нажимаю кнопку «Отладка», она выделяет следующую часть кода:
ElseIf wks.Cells(R, 3) & wks.Cells(PR, 3) <> "LBR10" Or "LBR28" Or "LBR29" Or "LBR291" Or "LBR293" Or "LBR295" Then GoTo SumAndDelete