VBA для вставки в ячейку в столбце формулы для расчета при выполнении нескольких условий IF И - PullRequest
0 голосов
/ 23 апреля 2020

Я застрял при написании кода VBA, который позволит мне вставить следующую формулу в столбец V (начинается с V2 до последней строки, так как это динамический диапазон c) Если 3 условия выполняются в других столбцах тот же лист. Я попытался использовать макрос и вставить формулу R1C1, которую он запрашивает, но он дает мне синтаксическую ошибку. Кроме того, я скорее использую код VBA, так как он будет работать на очень большой базе данных, которая имеет несколько листов, и диапазоны будут меняться со временем , Тем не менее, все форматирование, имена заголовков и номера столбцов всегда будут оставаться неизменными.

Итак, мои условия:

ЕСЛИ ячейка в столбце М имеет значение, И столбец N НЕ равен 5, И столбец Т пуст, а затем вставьте эту формулу в столбец V этой строки :

Столбец G * (0,19) Также, если выполняются те же условия, вставьте эту формулу в столбец X:

столбец V / столбец Y, а также эту формулу в столбце O:

столбец M / столбец X Если какое-либо из 3 условий не выполнено, не предпринимайте никаких действий, переходите к следующей строке и продолжайте

Сделайте это для каждой строки в листе "CAB C" и лист "CXYZ" (количество изменений строк для каждого листа, следовательно, мне нужно включить количество последних строк). Кроме того, иногда в новой книге один или оба этих листа отсутствуют, поэтому мне нужен обработчик ошибок, чтобы перейти на случай, если лист не найден.

Я бы дал свой код, однако у меня его нет, поскольку ни один из кодов, которые я нашел здесь или на YouTube, не работал для меня :(

Это ЕСЛИ И формула, которая работает для меня для столбца V, однако, когда Я вставляю его в VBA, он не работает (не работает как .range.formula или как .range.formulaR1C1 из записанного макроса) формула:

"=IF(AND(M2>0,NOT(N2=5),T2=""),(G2*(0.07/(1+(0.05+0.07)))),"")" 

Спасибо большое !!

1 Ответ

0 голосов
/ 23 апреля 2020

При работе с большими объемами данных использование формул для поддержания скорости замедляется. Хорошо использовать данные в качестве значений. Обратите внимание, что содержимое ниже заменяется значениями, если применяются какие-либо формулы. Это относится только к столбцу v, поэтому остальная часть столбца неясна, поэтому, пожалуйста, примените.

Sub test()
    Dim vDB As Variant, rngDB As Range
    Dim Ws As Worksheet
    Dim i As Long

    Set Ws = Sheets(1) '<~~ set your sheet name ; Sheets("CABC")

    Set rngDB = Ws.UsedRange
    vDB = rngDB

    For i = 2 To UBound(vDB, 1)
        'This apply to V column
        If vDB(i, 13) > 0 And vDB(i, 14) <> 5 And vDB(i, 20) = "" Then
            'vDB(i,22) is V Column
            vDB(i, 22) = vDB(i, 7) * (0.07 / (1 + (0.05 + 0.07)))
        Else
            vDB(i, 22) = ""
        End If
    Next i
    rngDB = vDB

End Sub

Изображение листа

enter image description here

Это добавленный код.

Sub test()
    Dim vDB As Variant, rngDB As Range
    Dim Ws As Worksheet
    Dim i As Long

    Set Ws = Sheets(1) '<~~ set your sheet name ; Sheets("CABC")

    Set rngDB = Ws.UsedRange
    vDB = rngDB

    For i = 2 To UBound(vDB, 1)
        'This apply to V column
        If vDB(i, 13) > 0 And vDB(i, 14) <> 5 And vDB(i, 20) = "" Then
            'vDB(i,22) is V Column
            vDB(i, 22) = vDB(i, 7) * (0.07 / (1 + (0.05 + 0.07)))  'column V
            vDB(i, 24) = vDB(i, 7) * 0.19                          'column X
            vDB(i, 15) = vDB(i, 22) / vDB(i, 24)                   'column O

        Else
            vDB(i, 22) = ""
        End If
    Next i
    rngDB = vDB

End Sub
...