Визуальные основы c - для ..следующие и формулы - PullRequest
1 голос
/ 10 января 2020

Мне нужно сделать скрипт Excel VBA, который вставляет формулу в зависимости от значений ячеек. Моя текущая версия возвращает только значение ЛОЖЬ

For i = 1 To 10 Step 1
If Cells(i, 2).Value > Cells(i, 1).Value Then Cells(i, 3).Value = Cells(i, 3).Formula = "=cells(i,1).value+cells(i,2).value"
If Cells(i, 2).Value < Cells(i, 1).Value Then Cells(i, 3).Value = Cells(i, 3).Formula = "=cells(i,2).value-cells(i,1).value"
Next i

Ответы [ 2 ]

3 голосов
/ 10 января 2020

Я думаю, вы хотели бы сделать что-то подобное

For i = 1 To 10 Step 1
    If Cells(i, 2).Value > Cells(i, 1).Value Then Cells(i, 3).FormulaR1C1 = "=RC[-2]+RC[-1]"
    If Cells(i, 2).Value < Cells(i, 1).Value Then Cells(i, 3).FormulaR1C1 = "=RC[-2]-RC[-1]"
Next i
1 голос
/ 10 января 2020

Во-первых, он возвращает FALSE, потому что вы сравниваете формулу ячейки со своей строкой. Они не равны, следовательно, он возвращает FALSE. Это можно решить, пропустив часть =Cells(i,3).Formula.

Во-вторых, важно знать, что некоторые функции VBA не могут использоваться в вашей рабочей таблице и наоборот. Когда вы введете «= Cells» в ячейку, вы заметите, что нет функции Worksheet под названием Cells. Вот почему следующее вернет '#Field!'

 For i = 1 To 10 Step 1
    If Cells(i, 2).Value > Cells(i, 1).Value Then 
         Cells(i, 3).Formula = "=cells(i,1).value+cells(i,2).value"
    End if
    If Cells(i, 2).Value < Cells(i, 1).Value Then 
         Cells(i, 3).Formula = "=cells(i,2).value-cells(i,1).value"
    End if 
Next i

Самое простое, что можно сделать - выполнить вычисления в VBA:

    For i = 1 To 10 Step 1
       If Cells(i, 2).Value > Cells(i, 1).Value Then 
             Cells(i, 3).Value = Cells(i, 1).Value + Cells(i, 2).Value
       End if

       If Cells(i, 2).Value < Cells(i, 1).Value Then 
             Cells(i, 3).Formula = Cells(i, 2).Value - Cells(i, 1).Value
       End if 

    Next i

Некоторые рекомендации:

  1. Вместо того, чтобы обращаться к значению ячейки несколько раз, присвойте значение переменной.
  2. Старайтесь избегать записи формул на листах. Это сильно замедлит ваш код. Если необходимо, то сначала подумайте о сохранении всех формул в массиве и записывайте их на лист только после того, как весь массив будет заполнен.
  3. В этом случае вы можете полностью отказаться от использования VBA.
  4. Перед выполнением расчетов можно проверить, является ли значение ячейки цифрой c.
  5. Если вы настаиваете на использовании функции рабочего листа, вы можете воспользоваться предложением Storax.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...