2016-12-16 3 views
0

Я пытаюсь подтянуть прилагаемую таблицу Excel с помощью vba (к сожалению, прилагается). Лист имеет фиксированное значение в ячейке D161, установленное в 45, совпадение индекса использует это значение для возврата сводки значений в критических столбцах. Я подключил пару модулей с модулем листа, который выполняет поиск и находит и активную ячейку на основе входного значения D161. Я видел пару примеров и стал более запутанным, чем обычно Моей работой потока:Активная ячейка, динамический ввод с использованием Index Match в VBA

  • выбрать и значение активной ячейки, основываясь на значении D161 в

  • Используйте это значение ячейки в качестве активного клеточная

  • Выберите критические столбцы (выделено синим л) на основе этой активной ячейки (с использованием смещения) Есть 5 колонок, распространяемые через массив значений

  • Выберите столбцы и представить их в виде сводной таблицы, как показано в массива D161: K167

Я нашел тему, которая похожа, однако я умеренно озадачен его за пределами моего опыта Vba

Excel/VBA - Index Match function using Dynamic Ranges

Мой код

Sub FindThisValue() 

Dim varLookFor As Variant 
Dim GBAnchorageRng As Range 
Dim GBLapRng As Range 
Dim OCAnchorageRng As Range 
Dim OCLapRng As Range 

varLookFor = Range("D161").Value 

'Good bond cell ranges or columns 
Set GBAnchorageRng = Range(ActiveCell, ActiveCell.Offset(6, 15)) 
Set GBAnchorageRng = Range(ActiveCell, ActiveCell.Offset(6, 15)) 

'Othercases (formly known as poor do not use this description bond) cell range or columns 
Set OCAnchorageRng = Range(ActiveCell, ActiveCell.Offset(6, 26)) 
Set OCAnchorageRng = Range(ActiveCell, ActiveCell.Offset(6, 28)) 

On Error GoTo Handler: 

'ActiveWorkbook.ActiveSheet. 
Range("B93:B148").Find(What:=varLookFor, LookAt:=x1Whole = 1).Activate 

'Specify range 
'Range(ActiveCell.Offset(6, 0), ActiveCell.Offset(0, 31)).Select 

Exit Sub 

Handler: 

MsgBox ("Value not found") 

End Sub 

enter image description here

ответ

0

вы могли бы попробовать это

Sub FindThisValue() 
    Dim f As Range 

    Set f = Range("B93:B148").Find(What:=Range("D161").Value, LookAt:=xlWhole, LookIn:=xlValues) 
    If f Is Nothing Then 
     MsgBox ("Value not found") 
     Exit Sub 
    End If 

    With Range("F161:F167") 
     .Value = f.Offset(, 15).Resize(6).Value 
     .Offset(, 2).Value = f.Offset(, 16).Resize(6).Value 
     .Offset(, 3).Value = f.Offset(, 26).Resize(6).Value 
     .Offset(, 5).Value = f.Offset(, 27).Resize(6).Value 
    End With 
End Sub 
+0

е становится активной ячейки, получил его '.Resize (6) .Value' помогли показать путь в массиве' Resize (7) .Value' захватили все необходимых данных. Утончен и имеет смысл. –

+0

, чтобы указать, что мой код не полагается на должным образом называемый 'ActiveCell', пока он _reference_' Range' объектов. Что намного безопаснее! – user3598756