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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2009, 15:11   #1
PARTOS
Пользователь
 
Регистрация: 24.10.2009
Сообщений: 87
По умолчанию Как вернуть значение, используя функцию поиска позиции и смещения?

Как написать такую формулу?

Есть две БД на двух листах
Надо вернуть значение, используя функцию поиска позиции и смещения относительной найденной позиции
Вложения
Тип файла: zip поиск значения, используя СМЕЩ.zip (2.5 Кб, 45 просмотров)
PARTOS вне форума Ответить с цитированием
Старый 25.12.2009, 10:57   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

В файле много и подробно написано, но, может, в данном случае лучше словами...
Цитата:
находим в массиве Лист1!А2:Аn значение равное Лист2!А2+В1 -ПОИСКПОЗ(Лист2!А2+В1;Лист1!А2:Аn;0)
(1) Лист2!А2+В1 - это дата (с 12 часами или без)
(2) ПОИСКПОЗ(Лист2!А2+В1;Лист1!А2:Аn;0) - это номер строки отсчитывая от первой.
(1)-(2) - получим дату, на несколько дней меньше чем Лист2!А2+В1. Вам эту дату надо найти? У меня большие сомнения... Потому что для первой же ячейки надо искать 17.09.2009 12:00, которого нет в базе данных.
Кстати, вы обращали внимание на листе два, у вас некоторые даты с 12 часами, а некоторые без. Так должно быть? (прибавляя 19.09.2009 12:00 и 12:00 получим 20.09.2009)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 25.12.2009, 12:42   #3
PARTOS
Пользователь
 
Регистрация: 24.10.2009
Сообщений: 87
По умолчанию

1. Лист2!А2+В1 - это дата с тем временем, которое указано в ячейке В1 (в нашем случае -12 часами). Параметры А2 и В1 – изменяемые
2. В таблице 2 Листа2 каждую ячейку Z2 определяют два параметра. Ячейка Z2 располагается на пересечении столбца ВРЕМЯ и строки ДАТА.
3. В таблице 1 Листа1 каждая ячейка Z1 определена одним параметром (ПОЛНАЯ ДАТА).
4. В каждую ячейку Z2 таблицы 2 (Лист2) возвращается значение из ячейки Z1 таблицы 1 (Лист1), по следующему алгоритму:
• Искомое значение находится в ячейке, которая смещена в лево на единицу от ячейки «ПОЛНАЯ ДАТА2»
Ход решения:
используя функцию ПОИСКПОЗ находим позицию ячейки «ПОЛНОЙ ДАТА2» (А2+В1) для ячейки Z2 в массиве «ПОЛНАЯ ДАТА» Листа1 (в приложении, для каждой ячейки таблицы2 определена позиция «ПОЛНОЙ ДАТА» в таблице1)
Дальше, от найденной позиции нужно сместиться на одну ячейку влево, и из этой (смещённой на 1) ячейки вернуть значение в ячейку Z2.

В чём загвоздка:
Функция СМЕЩ работает, если ссылка, от которой вычисляется смещение, является ссылкой на ячейку или на диапазон смежных ячеек, в противном случае функция СМЕЩ возвращает значение ошибки #ЗНАЧ!.

Функция ПОИСКПОЗ возвращает номер позиции.
Надо определить адрес или индекс найденной с помощью функции ПОИСКПОЗ, ячейки. А уже потом применять СМЕЩ.

По поводу:
«Кстати, вы обращали внимание на листе два, у вас некоторые даты с 12 часами, а некоторые без. Так должно быть? (прибавляя 19.09.2009 12:00 и 12:00 получим 20.09.2009)».
Спасибо за подсказку. Даты должны быть датами без времени.
(вопрос писал ещё до того, как Вы рассказали про форматы дат)
Вложения
Тип файла: zip поиск значения, используя СМЕЩ2.zip (3.6 Кб, 31 просмотров)
PARTOS вне форума Ответить с цитированием
Старый 25.12.2009, 13:20   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в итоге: на листе2 и вас есть в строке - дата, в колонке - время, необходимо - с листа1 получить соответствующее дате и времени количество, правильно?

Кажется от избытка знаний вас тянет не непростые формулы и решения... даже вместо того, чтобы написать что надо получить, вы пишите, как собирались это сделать...
Вложения
Тип файла: rar Книга240.rar (10.1 Кб, 38 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 25.12.2009 в 13:23.
IgorGO вне форума Ответить с цитированием
Старый 25.12.2009, 13:46   #5
PARTOS
Пользователь
 
Регистрация: 24.10.2009
Сообщений: 87
По умолчанию

Приблизительно правильно.
Эта формула мне нужна как база для более сложных расчётов.
Для начала - столбцов со значениями на Лист1 может быть 100 (в приложении).
Поэтому нужна функция СМЕЩ, которая возвращает значение из ячейки, смещённой на n позиций от нужной даты. Параметр n (количество столбцов, на которое надо сместиться) рассчитывается по другой формуле.

Поэтому я прошу, чтобы подсказали базовый вариант:
Найти дату и, из ячейки, смещённой влево на один – вернуть значение.
Вложения
Тип файла: zip поиск значения, используя СМЕЩ3.zip (3.5 Кб, 33 просмотров)
PARTOS вне форума Ответить с цитированием
Старый 25.12.2009, 14:10   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а это и есть базовое решение:
Код:
=ВПР(RC1+R1C;Лист1!R1C1:R50000C2;2;)
вместо Лист1!R1C1:R50000C2 укажите таблицу шире Лист1!R1C1:R50000C200, вместо последней двоечки в формуле напишите формулу, которая укажет с какой колонки таблицы забрать данные, в приведенном примере - это статическая цифра указывающая на вторую колонку
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 25.12.2009, 19:06   #7
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте PARTOS.
если применение формул не критично, предлагаю пример с использованием библиотеки ADO.
Евгений.
P.S. скорее всего мой вариант Вам не подойдет, т.к. явно не будет удовлетворять требованию - "в ячейку Лист2!С2 заносим значение из ячейки, которая смещена на 2 вправо от найденой позиции...".
Вложения
Тип файла: rar поиск значения, используя ADO.rar (14.2 Кб, 38 просмотров)

Последний раз редактировалось Teslenko_EA; 25.12.2009 в 19:14.
Teslenko_EA вне форума Ответить с цитированием
Старый 28.12.2009, 12:18   #8
PARTOS
Пользователь
 
Регистрация: 24.10.2009
Сообщений: 87
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
Здравствуйте PARTOS.
если применение формул не критично, предлагаю пример с использованием библиотеки ADO.
Евгений.
P.S. скорее всего мой вариант Вам не подойдет, т.к. явно не будет удовлетворять требованию - "в ячейку Лист2!С2 заносим значение из ячейки, которая смещена на 2 вправо от найденой позиции...".
Спасибо за помощь. Я уже придумал как находить нужное значение другим способом, используя функцию ИНДЕКС
PARTOS вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация класса с методом поиска записи по файлу (используя компонент Memo) Dem.IG Общие вопросы Delphi 2 05.11.2009 16:02
как в базе данных вернуть текстовое значение в DBGrid вместо числового anija05 Общие вопросы Delphi 0 30.05.2009 14:44
Как передать значение переменной из функции в ACCESSе в функцию в EXCELе? musicitsme Microsoft Office Access 1 01.04.2009 10:24
задать диапазон используя значение переменной eto Microsoft Office Excel 12 03.03.2009 17:36