Страницы: 1
RSS
Как протянуть формулу массива VBA
 
Здравствуйте, каким образом можно протянуть формулу массива вниз?

Формула массива
Код
=--ЕНД(ПОИСКПОЗ(999;ПОИСК($E$2;C7:E7);1))


Такой вариант выдает ошибку
Код
Sub Макрос1()  
   Range("A7").FormulaArray = "=--ЕНД(ПОИСКПОЗ(999;ПОИСК($E$2;C7:E7);1))"  
   Range("A7:A20").FillDown
End Sub
 
FormulaArray не любит локализованные функции
попробуйте так
=--IFNA(MATCH(999,FIND($E$2,C7:E7),1),)
Изменено: БМВ - 17.02.2019 18:09:58
По вопросам из тем форума, личку не читаю.
 
БМВ
Формула копируется, но выдает ошибку - недопустимое имя. Скорее всего это из-за моего 2010 Excel, функция IFNA появилась в 2013.
Может есть еще вариант?
Изменено: Hashtag - 17.02.2019 18:50:49
 
А у меня в 2010 такой вариант работает. Просто я не знаю правильный, поэтому сделал бы так. Не учитесь плохому, делайте правильно.
Код
Sub Макрос1()
    Range("A7").FormulaArray = "=--ISNA(MATCH(999,SEARCH(R2C5,RC[2]:RC[4]),1))"
    Range("A7").Copy: Range("A8:A20").PasteSpecial Paste:=xlPasteFormulas
    Application.CutCopyMode = False
End Sub

 
gling
Спасибо, работает
 
Hashtag, удобно использовать .FillDown , свежий пример: http://www.cyberforum.ru/vba/thread2405190.html#post13333781
 
gling
Один вопрос по вашему коду, как снять выделение диапазона A8:A20 после работы кода? Application.CutCopyMode = False вроде для этого предназначен, но не помогает.
 
Цитата
Hashtag написал:
Application.CutCopyMode = False
предназначен для снятия "бегающих мурашей" вокруг скопированной ячейки, а снять выделение можно активировав любую ячейку в конце кода.
 
"Господствует еще смешенье языков:
Французского с нижегородским?" (А. С. Грибоедов)
Код
Sub Макрос1()
   Range("A7").FormulaLocal = "=--ЕНД(ПОИСКПОЗ(999;ПОИСК($E$2;C7:E7);1))"
   Range("A7").FormulaArray = Range("A7").Formula
   Range("A7:A20").FillDown
End Sub
 
С.М., ну вот это  точно плохому учить. Local то он разный.
По вопросам из тем форума, личку не читаю.
 
gling
Доработал ваш код под свои нужды, но появилась проблема. При очистке дипазона С7:F, выдает ошибку в строке
Код
Range("A7").Copy: Range("A8:A" & SRow).PasteSpecial Paste:=xlPasteFormulas

"Метод PasteSpecial из класса Range завершен неверно".
Пытаюсь добавить условие, при котором если дипазон С7:F пуст, очистить диапазон А,
Код
Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).ClearContents

но в силу нехватки знаний не получается сделать это правильно. Посоветуйте пожалуйста, что можно сделать в этом случае?

Код
Sub Fill()
Application.ScreenUpdating = False
If Range("E2") <> "" Then
Dim Sh As Range, iLastRow&
Dim SRow&
Dim SRowD&
Dim SRowE&
SRow = Cells(Rows.Count, 3).End(xlUp).Row
SRowD = Cells(Rows.Count, 4).End(xlUp).Row
SRowE = Cells(Rows.Count, 5).End(xlUp).Row
If SRow < SRowD Then SRow = SRowD
If SRow < SRowE Then SRow = SRowE
Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).ClearContents
    Range("A7").FormulaArray = "=--ISNA(MATCH(999,SEARCH(R2C5,RC[2]:RC[4]),1))"
    Range("A7").Copy: Range("A8:A" & SRow).PasteSpecial Paste:=xlPasteFormulas
    Application.CutCopyMode = False
    Range("E2").Select
Else
    Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).ClearContents
End If
    Application.ScreenUpdating = True
End Sub


Решил таким способом

Код
SRow = IIf(SRow < 7, 7, SRow)
 If SRow > 7 Then
    Range("A7").FormulaArray = "=--ISNA(MATCH(999,SEARCH(R2C5,RC[2]:RC[4]),1))"
    Range("A7").Copy: Range("A8:A" & SRow).PasteSpecial Paste:=xlPasteFormulas
 End If


Если кто-то предложит более элегантный способ, буду признателен.
Изменено: Hashtag - 21.02.2019 21:46:55
Страницы: 1
Наверх