Excel VBA - 带有列字母变量的动态.Cell公式

时间:2015-03-27 23:31:24

标签: excel excel-vba vba

我将公式放在工作表中,这是动态意义,行和列的数据不断变化,列标题的位置也不断变化。我需要找到最后一行和最后一个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)"

1 个答案:

答案 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声明和两个作业。

此代码编译但由于工作簿和工作表名称分配,尚未经过全面测试。