Двумерный поиск в Excel 2010 - PullRequest
3 голосов
/ 08 января 2012

У меня есть данные, похожие на эту

Таблицы содержат более одного заголовка метки строки (метка строки в стеке):

                     |20%     |30%  |
|25/01/11   |buy     |1       |1.1  |
|           |sell    |0.8     |0.9  |
|27/01/11   |buy     |1.02    |1.03 |
|           |sell    |1.1     |1.2  |
|01/02/11   |buy     |1.05    |1.07 |

Я пытаюсь использовать формулу поиска для извлечения данных, основанных на дате и типе транзакции: скажите, каким был множитель на 30% от цены продажи на 27/01/11 Любая помощь будет высоко ценится!

UPD

должно быть решение этой проблемы без добавления уникального столбца для поиска ... В Excel 2000 был способ сделать это, используя формулы на естественном языке, как вы можете видеть из этой статьи в методе 2, пример 2 - support.microsoft.com / kb / 275170

UPD 2

Возможно ли это вообще? даты не только будут иметь пропуски, но также будут пропускать один или два дня ... как в примере

UPD 3

enter image description here

Есть проблемы с опубликованными решениями:

если дата поиска 26/01/2011, формула вернет N / A (в идеальном решении она должна возвращать самое близкое совпадение (округленное до предыдущей даты) - т.е. если дата поиска не доступна в столбце А тогда предыдущая ближайшая дата должна быть возвращена)

заголовок строки с накоплением означает, что у меня есть строки, сгруппированные в группы, подобные этой (дата и тип являются заголовками строк) enter image description here

Ответы [ 4 ]

4 голосов
/ 08 января 2012

Если F1 содержит требуемую дату, F2%, F3 "купить" или "продать"

=INDEX($C:$D,MATCH(F1,$A:$A,0)+IF(F3="sell",1,0),MATCH(F2,$C$1:$D$1,0))

учитывает все три фактора

РЕДАКТИРОВАТЬ

на основе вашего редактирования, чтобы получить то, что вы хотите, вам нужно только изменить параметр точного соответствия с 0 на 1.Из файла справки Excel

Match_Type: 1 или опущено MATCH находит наибольшее значение, которое меньше или равно lookup_value.Значения в аргументе lookup_array должны быть расположены в порядке возрастания

, чтобы формула стала

=INDEX($C:$D,MATCH(F1,$A:$A,1)+IF(F3="sell",1,0),MATCH(F2,$C$1:$D$1,0))

Кроме того, если вы хотите сделать то же самое со значениями%, сделайте то же самоек другому MATCH тоже

=INDEX($C:$D,MATCH(F1,$A:$A,1)+IF(F3="sell",1,0),MATCH(F2,$C$1:$D$1,1))
1 голос
/ 08 января 2012

Предполагая, что ваши данные начинаются в столбце А, а ваша дата поиска находится в ячейке F1, попробуйте следующее:

=INDEX(D:D, MATCH(F1,A:A,0) + 1, 1)

Это работает, находя строку, соответствующую дате (MATCH), смещая ее на1, чтобы получить строку продажи, и использует функцию INDEX для извлечения значения из столбца D.

0 голосов
/ 09 января 2012

В этих ситуациях я считаю полезным включить столбец «ключ» слева от данных, что значительно упрощает формулы.Вставьте столбец слева от ваших данных, и это будет комбинация даты и покупки / продажи (A2 = B2 & "_" & C2):

                                   |20%     |30%  |
25/01/11_buy  |25/01/11   |buy     |1       |1.1  |
25/01/11_sell |           |sell    |0.8     |0.9  |
27/01/11_buy  |27/01/11   |buy     |1.02    |1.03 |
27/01/11_sell |           |sell    |1.1     |1.2  |
01/02/11_buy  |01/02/11   |buy     |1.05    |1.07 |

Затем просто выполните vlookup + match:

=VLOOKUP({needed date and type}, A1:E6, MATCH({needed %}, A1:E1,0),0)

Преимущество этого подхода состоит в том, что он делает формулы простыми и легкими для чтения

0 голосов
/ 08 января 2012

Предположим, у вас есть значения, начиная с A1.Дата 25-01-2011 будет на уровне A2, 27/01 будет на уровне A4 и т. Д. 20%, будет на уровне C1 и 30%, будет на уровне D1

.F1, ищите процент, который вы хотите в G1 (20 или 30%), ищите тип, который вы хотите в H1 (покупка или продажа)

Введите приведенную ниже формулу в I1.У вас есть результат.

=INDEX(C2:D6,IF(H1="buy",MATCH(F1,A2:A6,0),IF(H1="sell",MATCH(F1,A2:A6,0)+1)),MATCH(G1,C1:D1,0))
...