Excel VBA - ошибка FormulaArray (для БОЛЬШЕ (ЕСЛИ ()))

avatar
nsimon
8 апреля 2018 в 00:31
79
1
0

Я использую функцию =НАИБОЛЬШИЙ(ЕСЛИ(...);1) в Excel, из VBA, и я использую 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 = ЕСЛИ)

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

Источник
perfo
8 апреля 2018 в 00:35
0

Здравствуйте, можете ли вы описать словами, что вы пытаетесь сделать?

Ответы (1)

avatar
user4039065
8 апреля 2018 в 01:10
0

Похоже, действительно существует ошибка при массовом преобразовании диапазона формул в формулы массива. Построчное продвижение начинается с пропуска строк; например 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

Я согласен с тем, что ваши полные диапазоны столбцов должны быть сокращены до размеров фактических данных.

QHarr
8 апреля 2018 в 07:28
0

Я не знал об этом. Что-то вроде гейзенбага? Кажется ли это случайным, когда это происходит?

user4039065
9 апреля 2018 в 01:58
1

Первый раз сама с этим столкнулась. Пришлось запустить полный тестовый стенд для подтверждения. Больше не проводил тесты, но я буду следить за этим.