Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 17.06.2015, 02:52   #21
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

читал, а Вы это читали:
Цитата:
ПОИСКПОЗ Возвращает относительное положение элемента массива.
ПОИСКПОЗ - возвращает одно число, следовательно массив должен быть линейным (горизонтальным или вертикальным) результатом будет число - позиция искомого элемента в массиве.

позиция элемента в таблице (в двумерном массиве) определяется строкой и столбцом ДВУМЯ ЧИСЛАМИ, следовательно ПОИСКПОЗ неприменим к поиску в таблице.
используйте корректные аргументы - функция вернет корректный результат
.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 17.06.2015, 10:22   #22
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию

по моим расчетам ПЕРВУЮ НЕПУСТУЮ ячейку даст такая формула:
=ИНДЕКС(A:A;ПОИСКПОЗ(ЛОЖЬ;A1:A20="" ;0))
slan вне форума
Старый 17.06.2015, 23:35   #23
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

Добрый вечер!
Могу предложить пользовательскую функцию VBA.
Функция вводится в стандартный модуль VBA.
Работает во всем листе Excel (в том числе для двухбуквенных столбцов-находит значение первой непустой ячейки типа диапазона
A3:A20 форумчанина Доктор:

Код HTML:
Function First2(r As Range)
Dim i As Integer, s As String
Application.Volatile
If TypeName(r) <> "Range" Then Exit Function
s = Left(r.Range("A1").Address, InStrRev(r.Range("A1").Address, "$") - 1)
i = r.Range("A1").End(xlDown).Row
First2 = Range(s & i)
End Function

Последний раз редактировалось svsh2016; 18.06.2015 в 00:51.
svsh2016 вне форума
Старый 18.06.2015, 00:21   #24
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

и Вам не хворать!

уважаемый svsh2016, предложить-то Вы можете...
отличная функция и работает на всем листе и с двухбуквенными столбцами, мало того - эта функция работает даже с трехбуквенными столбцами...

но есть в ней один недостаток... она возвращает не первое не пустое значение, как Вы думали, а то непустое, которое (в зависимости от данных) вычисляет предложенный Вами код.

во вложении файл, выполните TestFirst2, что видно???
неуже ли "2-я не пустая из А3:А20"!?!?!?
а разве А3 не в диапазоне А3:А20, или может быть она пустая?

подкупает проверка на соответсвие параметра функции требуемому типу
Код:
If TypeName(r) <> "Range" Then Exit Function
дело только в том, что если попытаться передать в First2 параметр не соответсвующий типу Range, то еще до Вашей проверки компилятор ругнется на несоответсвие типов.
например для такого вызова: First2("svsh2016") - уверенно получите "Type mismatch"


у Вас два сообщения на форуме и оба мимо кассы. будьте бдительны!
Вложения
Тип файла: rar A3-A20.rar (11.8 Кб, 8 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 18.06.2015, 18:33   #25
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

Добрый вечер!Обсуждение данной темы было интересным,функция массива замечательная.Кроме того существует
пользовательская функция VBA,размещается в стандартном модуле.Работает во всем лист Excel,все ситуации по возможности отработал:
Код:
Function First5(r As Range)
Dim i As Long, s As String
Application.Volatile
If IsEmpty(r.Range("A1")) Then
   s = Left(r.Range("A1").Address, InStrRev(r.Range("A1").Address, "$") - 1)
   i = r.Range("A1").End(xlDown).Row
If i = Cells.Rows.Count Then First5 _
= CVErr(xlErrNA) Else First5 = Range(s & i)
ElseIf Not IsEmpty(r.Range("A1")) Then
   First5 = r.Range("A1").Value
End If
End Function
svsh2016 вне форума
Старый 19.06.2015, 15:21   #26
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от agregator Посмотреть сообщение
...дать Excel понять, что формулу надо считать как массив можно не только {}.
Вы ошибаетесь. На листе Excel, его средствами, можно только так. Других способов не существует
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума
Старый 19.06.2015, 18:10   #27
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Сережа, см. вложение строка 3

это формула массива?

а в пошаговом режиме все обрабатываеися как массив данных. вот это и есть те самые другие способы в ексеоь.
Вложения
Тип файла: rar ЕщеПример.rar (5.9 Кб, 9 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 19.06.2015, 18:47   #28
agregator
Форумчанин
 
Аватар для agregator
 
Регистрация: 09.05.2009
Сообщений: 369
По умолчанию

Serge 007, я имел в виду, что чтобы дать программе понять, что формулу надо считать как массив, можно после ввода данных в строку формул одновременно нажать клавиши клавиатуры Ctrl + Shift + Enter и ее содержимое заключится в фигурные скобки {}. А можно например прописать внутри формул работающих с массивами на место массива, например СУММПРОИЗВ(массив) или ИНДЕКС(массив;номер_строки;номер_столбца) и Excel посчитает её как формулу массива.
agregator вне форума
Старый 05.07.2015, 18:25   #29
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
...это формула массива?..
Игорь, нет, конечно!

А что такое "формула массива"? Давай начнем с определения
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума
Старый 05.07.2015, 20:10   #30
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

Уважаемый пользователь Доктор,ваш вопрос решает пользовательская функция VBA First5.
Преимущество пользовательских функций в том,что
она проще функций массива.Водится в стандартный модуль VBA.
Затем набираете в ячейке =F выскакивает диалоговое окно,выбираете функцию,выбираете диапазон мышью или клавиатурно.
Функция протестирована совместно с функцией массива Индекс,работает аналогично.

Код:
 Function First5(r As Range)
Dim i&, s$
Application.Volatile
If IsEmpty(r.Range("A1")) Then
   s = Left(r.Range("A1").Address, InStrRev(r.Range("A1").Address, "$") - 1)
   i = r.Range("A1").End(xlDown).Row
  If i = Cells.Rows.Count Then
    First5 = CVErr(xlErrNA)
  Else
    First5 = Range(s & i)
  End If
ElseIf Not IsEmpty(r.Range("A1")) Then
   First5 = r.Range("A1").Value
End If
End Function
svsh2016 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать ссылку на последнюю непустую ячейку в обновляемом столбце SVGuss Microsoft Office Excel 34 19.02.2013 16:12
в строке удалить первую и последнюю буквы,только записать в виде программы и тестового примера в паскаль!!! rfnthbyf Паскаль, Turbo Pascal, PascalABC.NET 9 14.02.2012 21:16
Найти и выделить по выделенной строке диапазон с такой строкой на другом листе (Excel 2003) vfv Microsoft Office Excel 8 10.03.2010 09:30
Копирование данных на первую пустую ячейку kzld Microsoft Office Excel 8 15.07.2009 14:06
как найти первую заполненную ячейку в диапазоне Bezdar Microsoft Office Excel 3 19.02.2009 11:59