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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2015, 14:24   #1
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию формула ВПР через макрос

В рамках решения большой задачи появилась необходимость написания формулы ВПР макросом.
Исходные данные: Два листа - Расчет и Справочник, из Справочника нужно подтянуть данные. В Справочнике содержится несколько таблиц из трех столбцов, соответственно, нужно таблицу сначала найти.

Гугл ничего интересного не выдал, пришлось придумать самому - может пригодится кому

Код:
 Sub Крутой_Макрос()
        
    'поиск нужной таблицы на листе Справочник
    Sheets("Справочник").Select
    Cells.Find("*" & Искомое_значение).Select
    Начало = БукваСтолбца(ActiveCell.Column)
    Конец = БукваСтолбца(ActiveCell.Column + 2)
    
    'вставка формулы ВПР
    ActiveWorkbook.Sheets("Расчет").Select
    Range("D" & 3).Select
    Что = Cells(3, 1).Address(False, False)
    
    ActiveCell.Formula = "=VLOOKUP(" & Что & ",Справочник!" & Начало & ":" & Конец & ",3,0)"
    
 End Sub


Function БукваСтолбца(ByVal col As Long) As String
On Error Resume Next
БукваСтолбца = Application.ConvertFormula("r1c" & col, xlR1C1, xlA1)
БукваСтолбца = Replace(Replace(Mid(БукваСтолбца, 2), "$", ""), "1", "")
End Function
27102014 вне форума Ответить с цитированием
Старый 16.07.2015, 15:46   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Так можно
Код:
Sub Крутой_Макрос()
Dim c As Range, Искомое_значение
    Искомое_значение = "Искомое_значение"
    'поиск нужной таблицы на листе Справочник
    Set c = Sheets("Справочник").Cells.Find("*" & Искомое_значение, , xlValues, xlWhole)
    If Not c Is Nothing Then
      'вставка формулы ВПР
      Sheets("Расчет").Range("D3").FormulaR1C1 = "=VLOOKUP(RC[-3]," & c.EntireColumn.Resize(, 3).Address(, , xlR1C1, True) & ",3,0)"
    End If
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 16.07.2015, 16:24   #3
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

Казанский, добрый день!
До Вашего уровня мне еще очень и очень далеко! )
Сделал как смог - путаюсь в стиле ячеек RC, стараюсь делать без него.
У Вас интересный способ вывода буквенного обозначения столбцов, который я решил решил через пользовательскую функцию, обязательно попробую
27102014 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
формула ВПР в Excel Александр9992 Microsoft Office Excel 1 23.12.2012 11:12
Формула ВПР в макросе... Иванов_ДМ Microsoft Office Excel 22 17.11.2012 21:33
Формула ВПР, ПОИСКПОЗ Серёга0629 Microsoft Office Excel 9 18.07.2012 15:23
формула ВПР Tviga Microsoft Office Excel 5 15.01.2012 17:55
Формула ВПР??? Илья Николаевич Microsoft Office Excel 9 14.08.2010 18:55