2015-03-27 2 views
0

Я помещаю формулы на листе, которые являются динамическими значениями данных для строки и столбца, постоянно меняются, а также меняется позиция заголовков столбцов. Мне нужно найти последнюю строку и последний столбец и поместить 4 столбца в конец и поместить формулы, автозаполненные в последнюю строку. У меня есть имена заголовков, которые я нашел в первой строке, а затем преобразовываю номер столбца в букву. Теперь мне нужно разместить формулы в столбце на основе этих новых букв столбца. До сих пор у меня есть следующий код. Формула Vlookup не работает.Excel VBA - Динамические .Cell-формулы с переменными букв столбца

Dim eNB as Integer 
Dim eNBCol as string 
Dim eUTRAN as integer 
Dim eUTRANCol as string 

With Rows(1) 
    Set d = .Find("ENODEB") 
    If Not d Is Nothing Then 
    eNB = d.Column 
    End If 
Set d = .Find("EUTRANCELL") 
    If Not d Is Nothing Then 
    eUTRAN = d.Column 
    End If 
End With 

eNBCol = ConvertToLetter(eNB) 
eUTRANCol = ConvertToLetter(eUTRAN) 

wb("wsTrungReport").Cells(1, lstCol + 1).Value = "Cell-ID" 
wb("wsTrungReport").Cells(2, lstCol + 1).Formula = "=" & eNB_Col & 2 & "&" & eUTRANCol & 2 
wb("wsTrungReport").Cells(1, lstCol + 2).Value = "Manager" 
'Vlookup formulas is not working 
wb("wsTrungReport").Cells(2, lstCol + 2).Formula = "=Vlookup(" & eUTRANCol & 2 ",SiteDatabase!I:W,15,0)" 
+1

Похоже, что вам не хватает * ampersand * (aka * & *), как в '' = Vlookup ("& eUTRANCol & 2 &", SiteDatabase! I: W, 15,0) ". В этом случае также может быть лучше заполнить блок ячеек в столбце все сразу. – Jeeped

+0

Спасибо! Как я могу заполнить блок ячеек в столбце все сразу? Должен ли я использовать FormulaR1C1 или использовать автозаполнение? –

ответ

0

Вы проверяете, чтобы увидеть, если оба ENodeB и EUTRANCELL встречаются, но на самом деле, вы продолжаете обрабатывать, даже если они не найдены. Лучше включить дальнейшую обработку, когда они оба были расположены, и ошибки, если нет.

Там нет петли в коде, чтобы запустить через ячейку в столбцах вы добавляете до конца, но там не нужна, если вы захватить последние густонаселенные клетки либо из ENodeB или EUTRANCELL (поскольку они кажутся наиболее релевантными) и изменить размер назначения формулы на диапазон, простирающийся вплоть до последней заполненной строки.

Я предпочитаю более описательный синтаксис для чего-то вроде wb("wsTrungReport").Cells(...), но вы можете изменить то, что я поставил, если синтаксис работает для вас. Я полностью на борту с отказом от xlA1 ссылок и пользовательских функций ConvertToLetter в пользу xlR1C1 эталонный стиль.

Dim eNB As Long, eUTRAN As Long, lr As Long, lc As Long, wb As Workbook 

Set wb = ThisWorkbook 

With wb.Sheets("wsTrungReport") 'don't know where wb comes from 
    If CBool(Application.CountIf(.Rows(1), "ENODEB")) And _ 
     CBool(Application.CountIf(.Rows(1), "EUTRANCELL")) Then 

     'find the numerical column indexes to reference 
     eNB = Application.Match("ENODEB", .Rows(1), 0) 
     eUTRAN = Application.Match("EUTRANCELL", .Rows(1), 0) 

     'find the extents of the data 
     lr = .Cells(Rows.Count, eUTRAN).End(xlUp).row 
     lc = .Cells(1, Columns.Count).End(xlToLeft).Column 

     .Cells(1, lc + 1) = "Cell-ID" 
     .Cells(2, lc + 1).Resize(lr - 1, 1).FormulaR1C1 = "=RC" & eNB & "&RC" & eUTRAN 
     .Cells(1, lc + 2) = "Manager" 
     .Cells(2, lc + 2).Resize(lr - 1, 1).FormulaR1C1 = "=vlookup(RC" & eUTRAN & ", SiteDatabase!C9:C23, 15, 0)" 

    Else 
     debug.print "Not found!" 
    End If 
End With 

Set wb = Nothing 

Это, кажется, быть частью чего-то большего, так что вы можете удалить wb декларацию и оба задания.

Этот код компилируется, но из-за назначений имен книг и рабочих листов не был полностью протестирован.

+0

Спасибо вам, что это прекрасно работает, а также позволяет избежать использования функции ConverttoLetter. Объявление wb предназначалось для объекта словаря, который я создаю в начале. Вместо того, чтобы устанавливать каждый рабочий лист, например, установить wsTrungReport = wb.sheets («TrungsReport»), я просматриваю каждый рабочий лист и создаю wsNames, чтобы моя книга была более динамичной, я добавляю больше рабочих листов. Взгляните на это http://stackoverflow.com/questions/29176126/excel-2010-vba-use-value-of-variable-as-another-variable/29176831#29176831 –

+0

@AnuragSingh - Это на самом деле другой вопрос и тот, с которым я буду счастлив обратиться, как только он будет опубликован. Тема, на которую вы указали, включает объекты словаря, но, конечно, не то, как я буду использовать их в вашей ситуации. Если вы начнете новый поток, пожалуйста, как можно скорее отредактируйте КОНКРЕТНЫЕ о своей индивидуальной ситуации. – Jeeped

Смежные вопросы