「True」、「False」、「Bill-to Not in POVA」、または「Logic Code Incorrect」の値を持つ可能性のある 5 つの列があり、これらの 5 つの列を解釈し、に基づいて別の列に値を返す必要があります。階層。
これまでのところ、1 回のセルに対する If/Elseif ステートメントのみを作成しました。セルをループできることはわかっていますが、このコードは現在約 5,000 行で実行されており、月が進むにつれて最大 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
私が持っている主な関心事は、範囲「ルール」の各行でこのチェックを実行するコードを取得する方法です。上記は正常に動作するようですが、範囲内の行 (約 5,000 行) をループするか、何らかの方法で一度に評価する効率的な方法はありますか?
私はこの解決策を見つけましたが、これはまさに私が必要としているものではありませんが、行をループする潜在的に高速な方法を強調しています :