2015-06-17 19 views
1

У меня возникает несколько проблем с попыткой заполнения значений с использованием относительных значений, не относящихся к конкретным.Проблемы с формулой в Excel VBA

Это работает как есть, однако мне нужно иметь возможность сопоставлять ячейки. Я попытался изменить слово Formula1 на FormulaR1C1 и попытался использовать R2C3, а не B3, но это не работает.

Мое мышление заключается в том, что если я использую FormulaR1C1, то я могу использовать R [1] ...., чтобы указать ячейку, в которой я должен соответствовать.

x это строка, которую я уже нашел. на данный момент это строка 2, которая дает x = 2. categoryColumn и CategoryStart называются диапазонами, определенными на листе. Эта формула существует для заполнения зависимого выпадающего списка и, как сказано, работает как есть, но не работает, как мне нужно, чтобы она работала.

With Cells(x + 1, 3).Validation 
.Delete 
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:= _ 
    "=OFFSET(CategoryStart,MATCH(B3,CategoryColumn,0),1,COUNTIF(CategoryColumn,B3),1)" 
    .InCellDropdown = True 
End With 

ответ

0

вам, возможно, придется немного поиграть с этим, но я думаю, что это должно сработать. Идея состоит в том, чтобы сделать строку формулы динамической, чтобы она менялась по мере изменения строк, правильно? Другим возможным способом было бы сохранить предполагаемую формулу после конкатенации в строку и вставить ее таким образом.

With Cells(x + 1, 3).Validation 
.Delete 
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:= _ 
    "=OFFSET(CategoryStart,MATCH(B" & (x + 1) & ",CategoryColumn,0),1,COUNTIF(CategoryColumn,B" & x+1 & "),1)" 
    .InCellDropdown = True 
End With 
+0

Да, строка, которую я не включил, ищет слово в столбце А, когда он находит, что слово вставляет строку под этой строкой, затем требуется добавить несколько выпадающих списков. Ваш код почти сработал, я заставил его работать, изменив «.... B» & x + 1 & ", Ca ....' на '.... B" & (x + 1) & ", Ca. ... Спасибо. –

0

предлагаю следующее: Установите строку Formula1R1C1 быть формула в терминах строк и столбцов например

FormulaR1C1="=SUM(R1C1:R4C4)" 

(только в качестве примера)

затем сделать

Formula1:=Application.Evaluate(Application.ConvertFormula(FormulaR1C1, xlR1C1, xlA1)) 

Таким образом, вы можете написать формулу в терминах относительных ссылок, а затем преобразовать его в абсолютное ссылки, которые будут использоваться в вашем коде (который, как вы говорите, работает с абсолютными ссылками)

Смежные вопросы