Формула массива сопоставления индексов по ряду строк и столбцов VBA

#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. Поскольку это была простая опечатка, я оставлю свой ответ в качестве комментария. Рад, что помог. И не расстраивайтесь, мы все преследовали глупые опечатки.