поиск значения в таблице Excel

Программирование на Visual Basic for Applications
demid77
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 14.09.2005 (Ср) 13:18

поиск значения в таблице Excel

Сообщение demid77 » 02.11.2005 (Ср) 13:30

подскажите - есть ли функция VBA (или Excel), которая позволяет найти значение в таблице Excel по имени столбца и строки? HLookup и VLookup не устраивают.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 13:31

Ещё раз, чуть подробнее, плз.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

demid77
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 14.09.2005 (Ср) 13:18

Сообщение demid77 » 02.11.2005 (Ср) 13:34

GSerg писал(а):Ещё раз, чуть подробнее, плз.

есть таблица в Excel. строки и столбцы имеют названия. хочу искать значение в данной таблице на пересечении нужной строки и столбца.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 13:54

Что разумеется под названием строк и столбцов?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

demid77
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 14.09.2005 (Ср) 13:18

Сообщение demid77 » 02.11.2005 (Ср) 13:57

GSerg писал(а):Что разумеется под названием строк и столбцов?
элементы первой строки и первого столбца.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 14:03

Если таблица находится в B4:G9, то
=ИНДЕКС(B4:G9;ПОИСКПОЗ("Строка1";B4:B9;0);ПОИСКПОЗ("Столбец1";B4:G4;0))
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

demid77
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 14.09.2005 (Ср) 13:18

Сообщение demid77 » 02.11.2005 (Ср) 14:16

извини, а ИНДЕКС = INDEX ? и ПОИСКПОЗ = SEARCH ?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 02.11.2005 (Ср) 14:20

Файл FUNCS.XLS (в Program Files\Microsoft Office\Office10). Там и русские/английские названия, и краткая справка по функциям.
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 14:22

Я бы даже сказал,
=ВПР("Строка1";B4:G9;ПОИСКПОЗ("Столбец1";B4:G4;0);ЛОЖЬ)



=INDEX(B4:G9,MATCH("Строка1",B4:B9,0),MATCH("Столбец1",B4:G4,0))
и
=VLOOKUP("Строка1",B4:G9,MATCH("Столбец1",B4:G4,0),FALSE)
соответственно.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

demid77
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 14.09.2005 (Ср) 13:18

Сообщение demid77 » 02.11.2005 (Ср) 14:43

to GSerg - СПАСИБО !!!.
еще вопрос. когда буду использовать эти функции в коде VBA, то обязательно надо использовать "Application.WorksheetFunction.(имя функции)"? если вставлю сюда предложенную тобой формулу, то получится длииинная строка. можно это сделать короче?

to alibek
у меня есть "C:\Program Files\Microsoft Office\OFFICE11" и там нет файла FUNCS.XLS. можешь его скинуть?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 02.11.2005 (Ср) 14:53

В подкаталоге 1049, забыл указать.
Вот, но это для MSOffice XP, а не 2003.
Вложения
FUNCS.ZIP
Функции
(46.65 Кб) Скачиваний: 94
Lasciate ogni speranza, voi ch'entrate.

demid77
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 14.09.2005 (Ср) 13:18

Сообщение demid77 » 02.11.2005 (Ср) 14:55

to GSerg.
:( . попробовал, что ты предложил - это удобно, когда знаешь точные координаты таблицы. я хочу применять формулу к диапазону с именем. поэтому для использования твоего решения надо как-то определять первый столбец и первую строку этого диапазона.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 14:56

А зачем тебе использовать эту функцию из кода?

Код: Выделить всё
with worksheets(1).range("B4:G9")
  msgbox .cells(.columns(1).find("Строка1",,xlvalues,xlwhole).row,.rows(1).find("Столбец1",,xlvalues,xlwhole).column).value
end with
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

demid77
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 14.09.2005 (Ср) 13:18

Сообщение demid77 » 02.11.2005 (Ср) 15:01

to alibek
скинь, плиз ещё xlmacr.hlp :).

demid77
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 14.09.2005 (Ср) 13:18

Сообщение demid77 » 02.11.2005 (Ср) 15:16

to GSerg
воистину Шаман! :) ничего не понял, потом разберусь. но то, что ты предлагаешь значение в диапозоне (таблице) со сдвигом по таблице. т.е. выдаёт значение ячейки в (row+1, column + 2).

GSerg писал(а):А зачем тебе использовать эту функцию из кода?
пишу прогу для отдела для расчета-подбора оборудования. данные хранятся на листах excel, а интерфейс - на основе форм VBA. основная обработка данных - также в коде.
Последний раз редактировалось demid77 02.11.2005 (Ср) 15:21, всего редактировалось 1 раз.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 15:20

Э... да, протупил :)

Код: Выделить всё
with worksheets(1).range("B4:G9")
  msgbox worksheets(1).cells(.columns(1).find("Строка1",,xlvalues,xlwhole).row,.rows(1).find("Столбец1",,xlvalues,xlwhole).column).value
end with
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

demid77
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 14.09.2005 (Ср) 13:18

Сообщение demid77 » 02.11.2005 (Ср) 15:23

это-ж тоже самое!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 15:24

Отнюдь :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

demid77
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 14.09.2005 (Ср) 13:18

Сообщение demid77 » 02.11.2005 (Ср) 15:32

да, ты прав! КРУТО!!!
1.какую книжку прочитать, чтобы так же знать VBA (excel).
2. или сколько лет надо непрерывно программировать на VBA?
:)
плиз, дай хотя бы краткие комментарии своего шаманства! заранее благодарен.

P.S. завтра продолжу работу над прогой. будут вопросы - напишу. всё, пока.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 15:42

1. Нажми в этой последовательности: Alt+F11, F2, F1. Это всё, что я читал по VBA :)
2. Без понятия :) Главное, чтобы однажды вдруг стало нужно :) Мне вот как-то стало нужно в 95 экселе ячейки раскрашивать, а там условного форматирования нет :)

Краткие комментарии... эээ... После F2 уже много вопросов пропадает :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 03.11.2005 (Чт) 0:04

demid77 писал(а):to GSerg - СПАСИБО !!!.
еще вопрос. когда буду использовать эти функции в коде VBA, то обязательно надо использовать "Application.WorksheetFunction.(имя функции)"? если вставлю сюда предложенную тобой формулу, то получится длииинная строка. можно это сделать короче?


Как уже было сказано ранее, воспроизводить формулу в VBA в данном случае не имеет смысла, но если очень хочется, то можно вот так:

Код:
Код: Выделить всё

Sub test()
    With Application.WorksheetFunction
        MsgBox .VLookup("Строка1", Range("B4:G9"), _
            .Match("Столбец1", Range("B4:G4"), 0), 0)
    End With
End Sub


или вот так:
Код:
Код: Выделить всё

Sub test1()
    With Application
        MsgBox .VLookup("Строка1", Range("B4:G9"), _
            .Match("Столбец1", Range("B4:G4"), 0), 0)
    End With
End Sub


И не так уж длинно
Привет,
KL


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42

    TopList