#vba #excel #excel-formula #array-formulas
#vba #excel #excel-формула #массив-формулы
Вопрос:
Извините, я здесь новичок. Я работаю над проектом, часть которого заключается в том, что мне нужно найти определенное ключевое слово в диапазоне (несколько строк и столбцов), а затем вернуть соответствующее значение из этой строки.
Упрощенная версия (со ссылкой на один лист): {INDEX($C$2:$C$4~MIN(IF($C$2:$E$4=A2~ROW($C$2:$E$4)-1)))}
И версия кода:
'CTM is another sheet
'SCF is this sheet
.Range(.Cells(2, SCFCols 1), Cells(SCFRows, SCFCols 1)).FormulaArray = "=INDEX(" amp; _
CTMDataSheet amp; "!$A1:A$" amp; CTMRows amp; ",MIN(IF(" amp; CTMDataSheet amp; "!$C$2:" amp; .Cells(CTMRows, CTMCols).Address amp; _
"= A2,ROW(" amp; CTMDataSheet amp; "!$C$2:" amp; .Cells(CTMRows, CTMCols).Address amp; ")-1)))"
Ошибка, которую я получаю, заключается в том, что «Невозможно установить свойство FormulaArray класса range»
Комментарии:
1. какие настройки Excel у вас есть? не
INDEX($C$2:$C$4~MIN(IF($C$2:$E$4=A2~ROW($C$2:$E$4)-1)))
должно бытьINDEX($C$2:$C$4,MIN(IF($C$2:$E$4=A2,ROW($C$2:$E$4)-1)))
2. Он отлично работает с моим тестом, есть
CTMDataSheet as String
?CTMRows
,CTMCols
,SCFRows
иSCFCols
определенAs Integer
(илиLong
)? Вы хотели использовать.FormulaArray
? потому что в ваших упрощенных версиях у вас нет{}
, что указывает на то, что вы хотите использовать массив3. @Shai Rado, все переменные определены так, как вы предложили, и да, это должна быть формула массива (редактирование упрощенной версии сейчас). Теперь отображается сообщение «Невозможно установить свойство массива формулы класса диапазона». У меня есть «~» в качестве разделителя вместо «,».
4. @RahulChawla при использовании vba необходимо использовать американскую английскую нотацию. Используйте только
,
, не используйте~
. Когда формула будет размещена, Excel внесет изменения.5. Поскольку это была простая опечатка, я оставлю свой ответ в качестве комментария. Рад, что помог. И не расстраивайтесь, мы все преследовали глупые опечатки.