![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Пользователь
Регистрация: 24.10.2009
Сообщений: 87
|
![]()
Как написать такую формулу?
Есть две БД на двух листах Надо вернуть значение, используя функцию поиска позиции и смещения относительной найденной позиции |
![]() |
![]() |
![]() |
#2 | |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
В файле много и подробно написано, но, может, в данном случае лучше словами...
Цитата:
(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)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 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)». Спасибо за подсказку. Даты должны быть датами без времени. (вопрос писал ещё до того, как Вы рассказали про форматы дат) |
![]() |
![]() |
![]() |
#4 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
в итоге: на листе2 и вас есть в строке - дата, в колонке - время, необходимо - с листа1 получить соответствующее дате и времени количество, правильно?
Кажется от избытка знаний вас тянет не непростые формулы и решения... даже вместо того, чтобы написать что надо получить, вы пишите, как собирались это сделать...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Последний раз редактировалось IgorGO; 25.12.2009 в 13:23. |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 24.10.2009
Сообщений: 87
|
![]()
Приблизительно правильно.
Эта формула мне нужна как база для более сложных расчётов. Для начала - столбцов со значениями на Лист1 может быть 100 (в приложении). Поэтому нужна функция СМЕЩ, которая возвращает значение из ячейки, смещённой на n позиций от нужной даты. Параметр n (количество столбцов, на которое надо сместиться) рассчитывается по другой формуле. Поэтому я прошу, чтобы подсказали базовый вариант: Найти дату и, из ячейки, смещённой влево на один – вернуть значение. |
![]() |
![]() |
![]() |
#6 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
а это и есть базовое решение:
Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#7 |
Участник клуба
Регистрация: 10.08.2009
Сообщений: 1,796
|
![]()
Здравствуйте PARTOS.
если применение формул не критично, предлагаю пример с использованием библиотеки ADO. Евгений. P.S. скорее всего мой вариант Вам не подойдет, т.к. явно не будет удовлетворять требованию - "в ячейку Лист2!С2 заносим значение из ячейки, которая смещена на 2 вправо от найденой позиции...". Последний раз редактировалось Teslenko_EA; 25.12.2009 в 19:14. |
![]() |
![]() |
![]() |
#8 | |
Пользователь
Регистрация: 24.10.2009
Сообщений: 87
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Реализация класса с методом поиска записи по файлу (используя компонент 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 |