MS Excel – вставить формулу из строки с разделителями табуляции

У меня есть программа Visual Studio, которая читает PDF-файл и сбрасывает с него данные. Затем программа VS генерирует строку с разделителями табуляции, которая вручную вставлена ​​в электронную таблицу. Все работает нормально, но моя строка с разделителями табуляции стирает формулу в одном столбце. Не очень важно, поскольку я просто копирую формулу из предыдущей строки.

Можно ли поместить формулу в мою строку с разделителями табуляции?

Вот формула:

=IF(AND(NOT(ISBLANK($M2666)),ISBLANK($O2666)),"y","") 

Если я поместил это в строку с разделителями табуляции в соответствующем столбце, он отлично работает, если я, оказывается, вставляю строку с разделителями табуляции в строке 2666.

Я попытался использовать функцию row() , но тогда это не действительная формула:

 =IF(AND(NOT(ISBLANK($Mrow())),ISBLANK($Orow())),"y","") 

Я попробовал функцию, которая возвращает последнюю строку в заданном столбце, а затем добавила переменную в формулу. Если я просто вставляю в Excel, он работает, но когда я пытаюсь вставить его в строку с разделителями табуляции, это пасты в виде текста.

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

Итак, вот вопрос, как мне вставить формулу из буфера обмена?

Этот вопрос отмечен как vba, поэтому вот мое решение на основе VBA.

 dim strFormula as string strFormula = "=IF(AND(NOT(ISBLANK(RC13)),ISBLANK(RC15)),""y"","""")" range("M2").formular1c1 = strFormula range("M2666").formular1c1 = strFormula range("M9999").formular1c1 = strFormula 

Свойство Range.FormulaR1C1 принимает форму стиля xlR1C1, которая будет настраиваться для любой строки, в которую вы помещаете ее.

Если вы поместите форму стиля xlR1C1 в файл TXT с разделителями табуляции, следующий код понадобится до и после использования VBA для импорта TXT-файла.

 dim origRefStyle as long origRefStyle = Application.ReferenceStyle Application.ReferenceStyle = xlR1C1 'import the tab delimited TXT here Application.ReferenceStyle = origRefStyle 

Вы можете использовать INDIRECT и ADDRESS …, а также ROW и COLUMN : Пожалуйста, найдите каждую деталь этой функции, если вам нужно знать.

Скажем, вы хотите получить значение M2666 от Q2666 с помощью формулы INDIRECT(ADDRESS(ROW();COLUMN()-4)) . Вернемся к Q2666 проблеме, с предположением, что формула вставлена ​​в Q2666 , тогда ваша формула должна быть:

 =IF(AND(NOT(ISBLANK(INDIRECT(ADDRESS(ROW();COLUMN()-4))));ISBLANK(INDIRECT(ADDRESS(ROW();COLUMN()-2))));"y";"") 

Обратите внимание, что Excel использует ; не для разделения параметров в функции.

Давайте будем гением компьютера.