Краткое описание проблемы:
- Есть 3 столбца данных.
- Шаг № (столбец A),
- Испытания и процедуры (столбец C),
- и Pass или Fail (столбец F).
- Тесты и процедуры содержат 3 типа ячеек, которые сгруппированы в иерархию, где сверху вниз идут супер-тесты, суб-тесты и процедуры.
- В супер- или суб-тесте может быть несколько процедур, а в супер-тесте может быть несколько или вообще нет никаких суб-тестов. Супер-тесты показаны желтым цветом фона, суб-тесты показаны стилем ячейки «Примечание».
- Столбец Step # отсчитывается после каждой процедуры, вспомогательные и супер-тесты не учитываются, и число непрерывно от теста к тесту. Пропуск или неудача имеет 3 возможных входа.
- «Пропустить», «F» для сбоя, «NE» для неисполненного. Эти данные заполняются для каждой процедуры.
Входные данные в столбцах Pass или Fail для каждого Super и Sub-test вводятся вручную, я хотел бы автоматизировать это с помощью макроса. Он будет действовать как AND
гейт, где тест пройден только в том случае, если все процедуры и под-тесты под ним пройдены.
Если присутствует «F», то этот суб-тест и, следовательно, супер-тест не пройден. Если присутствует «NE», то этот суб-тест и, следовательно, супер-тест не выполняется. «F» превзойдет «NE», поэтому тест, содержащий оба, будет неудачным.
Что я пробовал:
Я подумал о том, чтобы сначала взглянуть на цвета фона и стили ячеек, так как это был бы верный способ узнать, какую строку нужно заполнить. Я не смог ничего собрать воедино с этой идеей.
Чтобы решить эту проблему, я пытаюсь разбить его на два макроса: один, чтобы найти первый набор пробелов и заполнить пробелы в суб-тесте, а второй - заполнить остальные. Первый макрос найдет пустое пространство с заполненным пространством под ним. В этой ситуации каждый пробел, который необходимо заполнить, имеет место под ним. Как только пространство будет найдено, оно будет проходить через цикл, добавляя все значения ячеек в массив, пока не будет найдено другое пустое пространство. Однажды найденный вызовет функции, чтобы найти конкретные символы в массиве, а затем поместит этот символ, который необходимо найти в уже отслеживаемой ячейке, которую необходимо заполнить. В идеале вы должны запустить этот и аналогичный макрос, чтобы выяснить супер *.-тестов 1033 *
Sub Subtests()
Dim rng As Range, cel As Range
Dim TrackedCel As Range
Dim Subtests As Long
Dim arr() As Variant
Subtests = 0
For Each cel In rng
If IsEmpty(ActiveCell) = True And IsEmpty(ActiveCell.Offset(1, 0)) = False Then
Subtests = Subtests + 1
TrackedCel = cel
ActiveCell.Offset(1, 0).Select
Do Until IsEmpty(ActiveCell)
ReDim Preserve arr(1 To UBound(arr) + 1) As Variant
arr(UBound(arr)) = a.Value
Loop
'Call FIsInArray(valToBeFOund, arr) As Boolean'
If IsInArray = True Then
TrackedCel.Value = InputBox("F")
End If
Call NEIsInArray
If IsInArray = True Then
TrackedCel.Value = InputBox("NE")
End If
Call PIsInArray
If IsInArray = True Then
TrackedCel.Value = InputBox("P")
End If
End If
Next cel
End Sub
Function FIsInArray(valToBeFound As Variant, arr As Variant)
As Boolean
Dim F As Variant
For Each element In arr
If F = valToBeFound Then
IsInArray = True
Exit Function
End If
Next element
Exit Function
End Function
Function PIsInArray(valToBeFound As Variant, arr As Variant)
As Boolean
Dim P As Variant
For Each element In arr
If P = valToBeFound Then
IsInArray = True
Exit Function
End If
Next element
Exit Function
End Function
Function NEIsInArray(valToBeFound As Variant, arr As Variant)
As Boolean
Dim NE As Variant
For Each element In arr
If NE = valToBeFound Then
IsInArray = True
Exit Function
End If
Next element
Exit Function
End Function
Данные таблицы
Требуемый выход