Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Как создать свою формулу в Excell Добавлено: 16.10.07 20:25  

Автор вопроса:  Ольга
Помоги, как создать формулу которая ищет первое снизу от данной ячейки не пустое значение в колонке и возвращает его это значение? Нужно чтобы при изменении данных эта ячейка сама перечтитывалась.
Я создала фуккцию но она не хочет возвращать значение, пишет что ошибка в значении.

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #1
Добавлено: 17.10.07 11:17
Если в ячейку A1 вписать следующую формулу и сделать ее формулой массива:

=ИНДЕКС(A2:A65536;ПОИСКПОЗ(1;(A2:A65536<>"";)*1;ЛОЖЬ());1)


, то в ячейке А1 всегда будет первое следующее за А1 непустое значение в колонке А.

(Чтобы формула стала формулой массива необходимо в конце ввода/редактирования формулы вместо Enter нажать одновременно Ctrl+Shif+Enter.

Ответить

Номер ответа: 2
Автор ответа:
 Andrew_nik



Вопросов: 15
Ответов: 30
 Профиль | | #2 Добавлено: 17.10.07 11:19
Вам надо чтобы функция возвращала последнее значение в столбце или значение, которое находится под активной ячейкой?
Допустим в столбце С такой набор значений:
12
112
14
16
Выделена ячейка 112 - какое значение должна отображать функция?

Ответить

Номер ответа: 3
Автор ответа:
 Кверт



Вопросов: 2
Ответов: 14
 Профиль | | #3 Добавлено: 18.10.07 09:56
В ячейки, где нужен результат, вставьте функцию.
Функция принимает ссылку c на ячейку,
относительно которой надо вести поиск,
то есть ссылку на ячейку, куда вставляется функция.
Function ПоискНеПусто(c)
Application.Volatile True    ' - для автоматического пересчета при изменении любой ячеки
If c.Offset(1, 0) <> "" Then            ' Если сразу следующая ячейка не пуста,
    ПоискНеПусто = c.Offset(1, 0).Value ' то она и возвращается,
Else                                    ' Иначе ищется первая не пустая:
    ПоискНеПусто = c.End(xlDown)        ' - эквивалент Ctr+ArrowDown
End If
End Function
Попутно выопрос к знатокам:
Наверное, функция и сама, без дополнительных параметров, должна знать, в какую ячейку вставлена - как это определяется?

Ответить

Номер ответа: 4
Автор ответа:
 DrugON



ICQ: nospam 

Вопросов: 10
Ответов: 53
 Профиль | | #4 Добавлено: 22.10.07 22:45
Наверное, функция и сама, без дополнительных параметров, должна знать, в какую ячейку вставлена - как это определяется?


Или я кретин или с каких пор функции "вставляются в ячейки"?
О чем речь вообще, ребзя?

Ответить

Номер ответа: 5
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #5 Добавлено: 23.10.07 19:05
Наверное, функция и сама, без дополнительных параметров, должна знать, в какую ячейку вставлена - как это определяется?


Вопрос, между прочим, очень интересный, и я сам был бы рад знать ответ на него.

с каких пор функции "вставляются в ячейки"?


Алекс, это ж проще пареной репы. Пользовательские функции заносятся в раздел User Defined и вставляются в ячейки так же как и обычные формулы:
=имяФункции(параметры)

Вот пример:

'Код модуля
Function Tomorrow() As Date
  Tomorrow = Date + 1
End Function


Далее в ячейке пишем:
=Tomorrow()

Если формат ячейки - Дата, то в ней появится завтрашняя дата.

Ответить

Номер ответа: 6
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #6 Добавлено: 27.10.07 13:44
Кверт, я откопал, как определить, из какой ячейки вызвается функция. Для этого используется свойство Application.Caller:

Function TheAddress()
  'пересчитываем функцию при изменении листа
  Application.Volatile
  'то, что вызвало функцию
  Dim theCaller As Object
  Set theCaller = Application.Caller
  'если функция была вызвана из диапазона,
  If TypeName(theCaller) = "Range" Then
    'возвращаем его адрес
    TheAddress = theCaller.Address(False, False)
  Else
    'иначе - возвращаем FALSE
    TheAddress = False
  End If
End Function

Ответить

Номер ответа: 7
Автор ответа:
 Кверт



Вопросов: 2
Ответов: 14
 Профиль | | #7 Добавлено: 29.10.07 11:24
Отлично!
Опробуем.
Спасибо!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам