我怎样才能让我的案例陈述将我的公式粘贴到每个单元格中

问题描述 投票:0回答:1

免责声明:我还不太熟练使用 VBA,但我知道需要进行优化。我一直在使用这个项目作为我的学习工具

我写了一个公式来根据特定标准计算费率。到目前为止,我只是使用我的代码在 E3 中编写公式,然后将其自动填充到底部。我现在需要根据另一个单元格值使公式动态化。我已经为一个单元格写好了所有内容,但我在完成它时遇到了困难。

目前,下面的代码正在按预期评估标志列,但我的公式仅粘贴到E3中。我编写的方式预计会这样做,但我只是不确定如何将其复制到 E 列的每一行,评估 M 列的相对单元格值(例如:基于 M3 的值的 E3, E4 基于 M4 的值等)。我尝试更换线路:

Range("E3").Select

Range("E3:E" & lr).Select

但这也不起作用。我曾考虑过使用循环的想法,但据我所知,这些必须有一个定义的范围(如果我错了,请纠正我)。我的行范围总是会随着项目的不同而变化,但我目前还没有解决这个问题的技能。

我查找了与我的类似的其他帖子,但我缺乏有效调整它们以适合我的用途的经验。

如果我可以澄清我的请求,请告诉我。

这是我到目前为止所拥有的:

Sub TestZipExclLogic()
Dim rng As Range
Dim lr As Long

lr = Cells(Rows.Count, "A").End(xlUp).Row

For Each rng In Range("M3:M" & lr)
Select Case rng.Value
    Case "True"
        Range("E3").Select
        ActiveCell.FormulaR1C1 = _
            "=IF(AND(RC1=""Ground Advantage"",RC3<>""No Cubic Pricing"",RC15="""",RC2<>""Oversized Package""),INDEX('GA Rates'!R4C13:R13C21,MATCH('Test Sheet'!RC16,'GA Rates'!R4C12:R13C12,0),MATCH('Test Sheet'!RC8,'GA Rates'!R3C13:R3C21,0)),IF(AND(RC1=""Ground Advantage"",RC3=""No Cubic Pricing"",RC15="""",'Test Sheet'!RC14="""",RC2<>""Oversized Package""),INDEX('GA Rates'!R2C2:" & _
            "R75C10,MATCH(ROUNDUP('Test Sheet'!RC7,0),'GA Rates'!R2C1:R75C1,0),MATCH('Test Sheet'!RC8,'GA Rates'!R1C2:R1C10,0)),IF(AND(RC1=""Ground Advantage"",RC3=""No Cubic Pricing"",RC15="""",'Test Sheet'!RC14<>"""",RC2<>""Oversized Package""),INDEX('GA Rates'!R2C2:R75C10,MATCH('Test Sheet'!RC14,'GA Rates'!R2C1:R75C1,0),MATCH('Test Sheet'!RC8,'GA Rates'!R1C2:R1C10,0)),IF(AND(" & _
            "RC1=""Ground Advantage"",RC15<>"""",RC2<>""Oversized Package""),INDEX('GA Rates'!R2C2:R75C10,MATCH('Test Sheet'!RC15,'GA Rates'!R2C1:R75C1,0),MATCH('Test Sheet'!RC8,'GA Rates'!R1C2:R1C10,0)),IF(AND(RC1=""Priority"",OR(RC2=""Package"",RC2=""Large Package"",RC2=""Thick Envelope"",RC2=""Large Envelope or Flat""),RC3<>""No Cubic Pricing"",RC15=""""),INDEX('PM Rates'!R4C" & _
            "13:R8C21,MATCH('Test Sheet'!RC16,'PM Rates'!R4C12:R8C12,0),MATCH('Test Sheet'!RC8,'PM Rates'!R3C13:R3C21,0)),IF(AND(RC1=""Priority"",OR(RC2=""Package"",RC2=""Large Package"",RC2=""Thick Envelope"",RC2=""Large Envelope or Flat""),RC3=""No Cubic Pricing"",RC15="""",'Test Sheet'!RC14=""""),INDEX('PM Rates'!R2C2:R72C10,MATCH(ROUNDUP('Test Sheet'!RC7,0),'PM Rates'!R2C1:R" & _
            "72C1,0),MATCH('Test Sheet'!RC8,'PM Rates'!R1C2:R1C10,0)),IF(AND(RC1=""Priority"",OR(RC2=""Package"",RC2=""Large Package"",RC2=""Thick Envelope"",RC2=""Large Envelope or Flat""),RC3=""No Cubic Pricing"",RC15="""",'Test Sheet'!RC14<>""""),INDEX('PM Rates'!R2C2:R72C10,MATCH('Test Sheet'!RC14,'PM Rates'!R2C1:R72C1,0),MATCH('Test Sheet'!RC8,'PM Rates'!R1C2:R1C10,0)),IF(A" & _
            "ND(RC1=""Priority"",OR(RC2=""Package"",RC2=""Large Package"",RC2=""Thick Envelope"",RC2=""Large Envelope or Flat""),RC3=""No Cubic Pricing"",RC15<>""""),INDEX('PM Rates'!R2C2:R72C10,MATCH('Test Sheet'!RC15,'PM Rates'!R2C1:R72C1,0),MATCH('Test Sheet'!RC8,'PM Rates'!R1C2:R1C10,0)),IF(AND(RC1=""Priority"",RC2=""Flat Rate Envelope""),INDEX('PM Rates'!R11C13:R17C13,1,1)," & _
            "IF(AND(RC1=""Priority"",RC2=""Legal Flat Rate Envelope""),INDEX('PM Rates'!R11C13:R17C13,2,1),IF(AND(RC1=""Priority"",OR(RC2=""Padded Flat Rate Envelope"",RC2=""Flat Rate Padded Envelope"")),INDEX('PM Rates'!R11C13:R17C13,3,1),IF(AND(RC1=""Priority"",RC2=""Small Flat Rate Box""),INDEX('PM Rates'!R11C13:R17C13,4,1),IF(AND(RC1=""Priority"",OR(RC2=""Flat Rate Box"",RC2" & _
            "=""Medium Flat Rate Box"",RC2=""Medium Flat Rate Boxes"")),INDEX('PM Rates'!R11C13:R17C13,5,1),IF(AND(RC1=""Priority"",RC2=""Large Flat Rate Box""),INDEX('PM Rates'!R11C13:R17C13,6,1),IF(RC[-3]=""Oversized Package"",INDEX(GA_Comm!R2C2:R76C10,MATCH('Test Sheet'!RC2,GA_Comm!R2C1:R76C1,0),MATCH('Test Sheet'!RC8,GA_Comm!R1C2:R1C10,0)),IF(AND(RC1=""Express"",OR(RC2=""Pac" & _
            "kage"",RC2=""Large Package""),RC14="""",RC15=""""),INDEX('Express Rates'!R2C2:R72C10,MATCH(ROUNDUP('Test Sheet'!RC7,0),'Express Rates'!R2C1:R72C1,0),MATCH('Test Sheet'!RC8,'Express Rates'!R1C2:R1C10,0)),IF(AND(RC1=""Express"",OR(RC2=""Package"",RC2=""Large Package""),RC15=""""),INDEX('Express Rates'!R2C2:R72C10,MATCH('Test Sheet'!RC14,'Express Rates'!R2C1:R72C1,0),M" & _
            "ATCH('Test Sheet'!RC8,'Express Rates'!R1C2:R1C10,0)),IF(AND(RC1=""Express"",RC2=""Flat Rate Envelope""),INDEX('Express Rates'!R3C13:R5C13,1,1),IF(AND(RC1=""Express"",RC2=""Legal Flat Rate Envelope""),INDEX('Express Rates'!R3C13:R5C13,2,1),IF(AND(RC1=""Express"",RC2=""Padded Flat Rate Envelope""),INDEX('Express Rates'!R3C13:R5C13,3,1),IF(AND(RC1=""Express"",OR(RC2=""" & _
            "Package"",RC2=""Large Package""),RC15<>""""),INDEX('Express Rates'!R2C2:R72C10,MATCH('Test Sheet'!RC15,'Express Rates'!R2C1:R72C1,0),MATCH('Test Sheet'!RC8,'Express Rates'!R1C2:R1C10,0)))))))))))))))))))))))" & _
            ""
    Case "False"
        Range("E3").Select
        ActiveCell.FormulaR1C1 = _
            "=IF(AND(RC1=""Ground Advantage"",RC3<>""No Cubic Pricing"",RC15="""",RC2<>""Oversized Package""),INDEX('GA_Comm'!R4C13:R13C21,MATCH('Test Sheet'!RC16,'GA_Comm'!R4C12:R13C12,0),MATCH('Test Sheet'!RC8,'GA_Comm'!R3C13:R3C21,0)),IF(AND(RC1=""Ground Advantage"",RC3=""No Cubic Pricing"",RC15="""",'Test Sheet'!RC14="""",RC2<>""Oversized Package""),INDEX('GA_Comm'!R2C2:" & _
            "R75C10,MATCH(ROUNDUP('Test Sheet'!RC7,0),'GA_Comm'!R2C1:R75C1,0),MATCH('Test Sheet'!RC8,'GA_Comm'!R1C2:R1C10,0)),IF(AND(RC1=""Ground Advantage"",RC3=""No Cubic Pricing"",RC15="""",'Test Sheet'!RC14<>"""",RC2<>""Oversized Package""),INDEX('GA_Comm'!R2C2:R75C10,MATCH('Test Sheet'!RC14,'GA_Comm'!R2C1:R75C1,0),MATCH('Test Sheet'!RC8,'GA_Comm'!R1C2:R1C10,0)),IF(AND(" & _
            "RC1=""Ground Advantage"",RC15<>"""",RC2<>""Oversized Package""),INDEX('GA_Comm'!R2C2:R75C10,MATCH('Test Sheet'!RC15,'GA_Comm'!R2C1:R75C1,0),MATCH('Test Sheet'!RC8,'GA_Comm'!R1C2:R1C10,0)),IF(AND(RC1=""Priority"",OR(RC2=""Package"",RC2=""Large Package"",RC2=""Thick Envelope"",RC2=""Large Envelope or Flat""),RC3<>""No Cubic Pricing"",RC15=""""),INDEX('PM_Comm'!R4C" & _
            "13:R8C21,MATCH('Test Sheet'!RC16,'PM_Comm'!R4C12:R8C12,0),MATCH('Test Sheet'!RC8,'PM_Comm'!R3C13:R3C21,0)),IF(AND(RC1=""Priority"",OR(RC2=""Package"",RC2=""Large Package"",RC2=""Thick Envelope"",RC2=""Large Envelope or Flat""),RC3=""No Cubic Pricing"",RC15="""",'Test Sheet'!RC14=""""),INDEX('PM_Comm'!R2C2:R72C10,MATCH(ROUNDUP('Test Sheet'!RC7,0),'PM_Comm'!R2C1:R" & _
            "72C1,0),MATCH('Test Sheet'!RC8,'PM_Comm'!R1C2:R1C10,0)),IF(AND(RC1=""Priority"",OR(RC2=""Package"",RC2=""Large Package"",RC2=""Thick Envelope"",RC2=""Large Envelope or Flat""),RC3=""No Cubic Pricing"",RC15="""",'Test Sheet'!RC14<>""""),INDEX('PM_Comm'!R2C2:R72C10,MATCH('Test Sheet'!RC14,'PM_Comm'!R2C1:R72C1,0),MATCH('Test Sheet'!RC8,'PM_Comm'!R1C2:R1C10,0)),IF(A" & _
            "ND(RC1=""Priority"",OR(RC2=""Package"",RC2=""Large Package"",RC2=""Thick Envelope"",RC2=""Large Envelope or Flat""),RC3=""No Cubic Pricing"",RC15<>""""),INDEX('PM_Comm'!R2C2:R72C10,MATCH('Test Sheet'!RC15,'PM_Comm'!R2C1:R72C1,0),MATCH('Test Sheet'!RC8,'PM_Comm'!R1C2:R1C10,0)),IF(AND(RC1=""Priority"",RC2=""Flat Rate Envelope""),INDEX('PM_Comm'!R11C13:R17C13,1,1)," & _
            "IF(AND(RC1=""Priority"",RC2=""Legal Flat Rate Envelope""),INDEX('PM_Comm'!R11C13:R17C13,2,1),IF(AND(RC1=""Priority"",OR(RC2=""Padded Flat Rate Envelope"",RC2=""Flat Rate Padded Envelope"")),INDEX('PM_Comm'!R11C13:R17C13,3,1),IF(AND(RC1=""Priority"",RC2=""Small Flat Rate Box""),INDEX('PM_Comm'!R11C13:R17C13,4,1),IF(AND(RC1=""Priority"",OR(RC2=""Flat Rate Box"",RC2" & _
            "=""Medium Flat Rate Box"",RC2=""Medium Flat Rate Boxes"")),INDEX('PM_Comm'!R11C13:R17C13,5,1),IF(AND(RC1=""Priority"",RC2=""Large Flat Rate Box""),INDEX('PM_Comm'!R11C13:R17C13,6,1),IF(RC[-3]=""Oversized Package"",INDEX(GA_Comm!R2C2:R76C10,MATCH('Test Sheet'!RC2,GA_Comm!R2C1:R76C1,0),MATCH('Test Sheet'!RC8,GA_Comm!R1C2:R1C10,0)),IF(AND(RC1=""Express"",OR(RC2=""Pac" & _
            "kage"",RC2=""Large Package""),RC14="""",RC15=""""),INDEX('PME_Comm'!R2C2:R72C10,MATCH(ROUNDUP('Test Sheet'!RC7,0),'PME_Comm'!R2C1:R72C1,0),MATCH('Test Sheet'!RC8,'PME_Comm'!R1C2:R1C10,0)),IF(AND(RC1=""Express"",OR(RC2=""Package"",RC2=""Large Package""),RC15=""""),INDEX('PME_Comm'!R2C2:R72C10,MATCH('Test Sheet'!RC14,'PME_Comm'!R2C1:R72C1,0),M" & _
            "ATCH('Test Sheet'!RC8,'PME_Comm'!R1C2:R1C10,0)),IF(AND(RC1=""Express"",RC2=""Flat Rate Envelope""),INDEX('PME_Comm'!R3C13:R5C13,1,1),IF(AND(RC1=""Express"",RC2=""Legal Flat Rate Envelope""),INDEX('PME_Comm'!R3C13:R5C13,2,1),IF(AND(RC1=""Express"",RC2=""Padded Flat Rate Envelope""),INDEX('PME_Comm'!R3C13:R5C13,3,1),IF(AND(RC1=""Express"",OR(RC2=""" & _
            "Package"",RC2=""Large Package""),RC15<>""""),INDEX('PME_Comm'!R2C2:R72C10,MATCH('Test Sheet'!RC15,'PME_Comm'!R2C1:R72C1,0),MATCH('Test Sheet'!RC8,'PME_Comm'!R1C2:R1C10,0)))))))))))))))))))))))" & _
            ""
End Select
Next rng

End Sub
excel vba
1个回答
0
投票

更改此部分以使用循环变量,而不是硬编码的 E3:

For Each rng In Range("M3:M" & lr)
Select Case rng.Value
    Case "True"
        Range("E" & cstr(rng.row)).FormulaR1C1 = _
            "=IF(AND(RC1=""Ground A
...
© www.soinside.com 2019 - 2024. All rights reserved.