У меня есть лист Excel с колонкой, заполненной формулами COUNTIFS ().Для каждого, который оценивается в ноль, я должен вручную применить фильтры к соответствующим столбцам, чтобы выяснить, на каком шаге в формуле результат достиг нуля.Я хочу написать макрос, чтобы немного автоматизировать это.Например:
=COUNTIFS('Data'!A:A,"Yes",'Data'!B:B,"Yes",'Data'!C:C,"Yes")
Если счет становится равным нулю, как только оценивается первое условие, я хочу, чтобы оно равнялось MsgBox
значению 1. Если оно становится равным нулю при оценке второго условия, возвращает2 вместо.Если он не достигнет нуля, пока не будет добавлено третье условие, я хочу, чтобы оно вместо этого возвращало 3 и т. Д.
Для простоты предположим, что оно должно работать только для одной ячейки., вместо того, чтобы проходить по каждой ячейке в моем столбце.
РЕДАКТИРОВАТЬ: Вот код, который я написал до сих пор.Он примет формулу COUNTIFS () и запустит условие first как COUNTIF (), но я не смог придумать, как его расширить, чтобы выполнить и более поздние условия.
'Find Indexes
countifsStart = InStr(1, cell.Formula, "COUNTIFS(")
sheetNameStart = InStr(countifsStart, cell.Formula, "(") + 2
sheetNameEnd = InStr(sheetNameStart, cell.Formula, "'")
searchRangeStart = InStr(sheetNameEnd, cell.Formula, "!") + 1
searchRangeSemicolon = InStr(searchRangeStart, cell.Formula, ":")
searchStringStart = InStr(searchRangeSemicolon, cell.Formula, ",") + 2
searchStringEnd = InStr(searchStringStart, cell.Formula, ",") - 1
'Parse formula components
sheetName = Mid(cell.Formula, sheetNameStart, sheetNameEnd - sheetNameStart)
searchColumn = Mid(cell.Formula, searchRangeStart, 1)
Set searchRange = Range(searchColumn & ":" & searchColumn)
searchString = Mid(cell.Formula, searchStringStart, searchStringEnd - searchStringStart)
'Run the countif
countIf = Application.WorksheetFunction.countIf(Sheets(sheetName).Range(searchColumn & ":" & searchColumn), searchString)
'Point out the culprit
MsgBox "Sheet Name: " & sheetName & vbNewLine & _
"Search Range: " & searchColumn & ":" & searchColumn & vbNewLine & _
"Search String: " & searchString & vbNewLine & _
"CountIf: " & countIf