У меня есть пять столбцов, которые могут иметь значение «True», «False», «Bill-to Not in POVA» или «Logic Code Incorrect» и должны интерпретироваться эти пять столбцов и возвращают значение в другом столбце, основанном на иерархии.Ускоренный способ прокрутки ячеек с If, ElseIf
До сих пор я разработал только инструкции If/Elseif для ячейки. Я знаю, что могу перебирать ячейки, но этот код работает примерно на 5000 строк прямо сейчас и может достигать 15 000, поскольку прогресс в этом месяце.
Есть ли у кого-нибудь предложения относительно эффективного способа сделать это? Обратите внимание, что «Правила» относятся к именованному диапазону, который я назвал в более ранней части кода.
Sub Finalize_Formulas()
Dim Rules As Range
Set Rules = Range("Rules")
Dim NumRecords As Long
NumRecords = Workbooks("POVA Daily Reporter.xlsm").Worksheets("Paste Daily Data").Range("B" & Rows.Count).End(xlUp).Row
'First, copy and paste special (values only) so that we aren't working with formulas anymore
Cells.Copy
Cells.PasteSpecial xlPasteValues
'Now let's interpret the results in Column F based on Columns G-K (Rules 1-5)
Rules.Select
Rules(1, 1).Select
Rules(1, 1).Activate
If Rules(1, 1).OffSet(0, 1) = "True" And _
Rules(1, 1).OffSet(0, 2) = "True" And _
Rules(1, 1).OffSet(0, 3) = "True" And _
Rules(1, 1).OffSet(0, 4) = "True" And _
Rules(1, 1).OffSet(0, 5) = "True" Then
Rules(1, 1).Value = "True"
ElseIf Rules(1, 1).OffSet(0, 1) = "Bill-to Not in POVA" Or _
Rules(1, 1).OffSet(0, 2) = "Bill-to Not in POVA" Or _
Rules(1, 1).OffSet(0, 3) = "Bill-to Not in POVA" Or _
Rules(1, 1).OffSet(0, 4) = "Bill-to Not in POVA" Or _
Rules(1, 1).OffSet(0, 5) = "Bill-to Not in POVA" Then
Rules(1, 1).Value = "Bill-to Not in POVA"
ElseIf Rules(1, 1).OffSet(0, 1) = "Logic Code Incorrect" Or _
Rules(1, 1).OffSet(0, 2) = "Logic Code Incorrect" Or _
Rules(1, 1).OffSet(0, 3) = "Logic Code Incorrect" Or _
Rules(1, 1).OffSet(0, 4) = "Logic Code Incorrect" Or _
Rules(1, 1).OffSet(0, 5) = "Logic Code Incorrect" Then
Rules(1, 1).Value = "Logic Code Incorrect"
ElseIf Rules(1, 1).OffSet(0, 1) = "False" Or _
Rules(1, 1).OffSet(0, 2) = "False" Or _
Rules(1, 1).OffSet(0, 3) = "False" Or _
Rules(1, 1).OffSet(0, 4) = "False" Or _
Rules(1, 1).OffSet(0, 5) = "False" Then
Rules(1, 1).Value = "False"
Else
End If
End Sub
Основная проблема у меня есть, как получить код для выполнения этой проверки на каждой строке в «Правилах» диапазона. Выше, кажется, работает нормально, но есть ли эффективный способ либо прокручивать строки в диапазоне (около 5000 строк), либо как-то оценить все сразу?
Я нашел это решение, которое не является именно то, что мне нужно, но выдвигает на первый план потенциально более быстрый способ Переберите строк: https://stackoverflow.com/a/8178637/2883304
Нет вам не нужно Asterix :) Попробуйте 'Application.CountIf (Range ("? G2: К2"), TRUE) ' –
+ 1 на' Application.CountIf' –