我将公式放在工作表中,这是动态意义,行和列的数据不断变化,列标题的位置也不断变化。我需要找到最后一行和最后一个col并在末尾放置4列,并将自动填充的公式放到最后一行。我有首先在行中找到的标题名称,然后将列号转换为字母。现在我需要根据这些新的列字母将公式放在列中。到目前为止,我有以下代码。 Vlookup公式无效。
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)"
答案 0 :(得分: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
声明和两个作业。
此代码编译但由于工作簿和工作表名称分配,尚未经过全面测试。