代码之家  ›  专栏  ›  技术社区  ›  nsimon

Excel VBA-FormulaArray错误(对于较大的(IF()))

  •  0
  • nsimon  · 技术社区  · 7 年前

    我使用=大(如果(…);1) 函数,我使用FormulaArray。因为我遇到了一个问题,所以我对单元格执行了特定的功能:

    Sheets("OEVK").Range("J314").FormulaLocal = "=LARGER(IF(jelolt_lista!$C:$C=OEVK!B314;jelolt_lista!$M:$M);1)"
     Sheets("OEVK").Range("J315").FormulaLocal = "=LARGER(IF(jelolt_lista!$C:$C=OEVK!B315;jelolt_lista!$M:$M);2)"
     Sheets("OEVK").Range("J316").FormulaLocal = "=LARGER(IF(jelolt_lista!$C:$C=OEVK!B316;jelolt_lista!$M:$M);3)"
     Sheets("OEVK").Range("J317").FormulaLocal = "=LARGER(IF(jelolt_lista!$C:$C=OEVK!B317;jelolt_lista!$M:$M);1)"
     Sheets("OEVK").Range("J318").FormulaLocal = "=LARGER(IF(jelolt_lista!$C:$C=OEVK!B318;jelolt_lista!$M:$M);2)"
     Sheets("OEVK").Range("J319").FormulaLocal = "=NAGY(HA(jelolt_lista!$C:$C=OEVK!B319;jelolt_lista!$M:$M);3)"
     Sheets("OEVK").Range("J2:J319").FormulaArray = Sheets("OEVK").Range("J2:J319").Formula
    

    我用匈牙利语说这个。 但是宏运行后,单元格中的相关链接(B2、B4、B6而不是B2、B3、B4)不正确,我不知道为什么。

    单元格中的结果:(NAGY=较大,HA=IF)

    J2: {=NAGY(HA(jelolt_lista!$C:$C=OEVK!B2;jelolt_lista!$M:$M);1)}
    J3: {=NAGY(HA(jelolt_lista!$C:$C=OEVK!B4;jelolt_lista!$M:$M);2)}
    J4: {=NAGY(HA(jelolt_lista!$C:$C=OEVK!B6;jelolt_lista!$M:$M);3)}
    

    你能帮我们解决这个问题吗?我试着缩小射程,但对我没有帮助。。。

    谢谢你的帮助!

    顺致敬意, N

    1 回复  |  直到 7 年前
        1
  •  0
  •   user4039065 user4039065    7 年前

    在将一系列公式批量转换为数组公式时,似乎确实存在一个bug。逐行编程开始跳过行;e、 g.B2、B3、B4。。。变为B2、B4、B6。。。这里有两种选择。

    个人:

    Sub Macro3()
        Dim f As Long
    
        With Worksheets("OEVK")
            For f = 2 To 319
                .Cells(f, "J").FormulaArray = _
                  "=LARGE(IF(jelolt_lista!$C:$C=OEVK!B" & f & ", jelolt_lista!$M:$M), " & (f - 2) Mod 3 + 1 & ")"
            Next f
        End With
    End Sub
    

    写一个,然后填写,

    Sub Macro2()
        With Worksheets("OEVK")
            .Cells(2, "J").FormulaArray = _
              "=LARGE(IF(jelolt_lista!$C:$C=OEVK!B2, jelolt_lista!$M:$M), MOD(ROW(2:2)-2, 3) + 1)"
            .Range(.Cells(2, "J"), .Cells(319, "J")).FillDown
        End With
    End Sub
    

    我同意您的完整列范围需要缩小到实际数据的范围。