请使用列标题而不是列号来引用列

时间:2015-01-28 15:45:26

标签: excel excel-vba vba

所以我的电子表格中包含不同的数据列。其中一列标题为“States”,它有该列中不同状态的缩写。另一列标题为“Last_IVR”,它或者有行说“已完成”或者说“未完成”。我编写了一个代码,根据状态或是否完成来过滤这两列。但我遇到的一个问题是并非每个电子表格都将States列放在同一位置。我的意思是,在第一个工作表中,“States”在“F”列中,但在另一个电子表格中,“States”可以在“C”列中。那么有没有办法,我可以操作下面的代码,所以它指的是列标题而不是列号。提前感谢您的帮助。

    Sub CFunctions() 
        Dim LR As Long
        LR = Range("A" & Rows.Count).End(xlUp).Row
        Dim i As Long
        Dim State As Range
        Dim Last_IVR As Range


        'Removes rows that says "Complete"

        For i = LR To 2 Step -1
        Set Last_IVR = Range("G" & i)
        If InStr(Last_IVR, "Complete") >= 1 Then
        Rows(i).Delete
        End If
        Next i

        'Removes all states that are not "TX"

        For i = LR To 2 Step -1
        Set State = Range("F" & i)
        If InStr(State, "TX") = 0 Then
        Rows(i).Delete
        End If
        Next i
        MsgBox "Completed"

    End Sub

2 个答案:

答案 0 :(得分:0)

您可以像使用电子表格功能一样使用匹配来搜索第一行中的标题。

语法和更多属性可以在这里找到: https://msdn.microsoft.com/en-us/library/office/ff835873%28v=office.15%29.aspx 或者在这里: Application.WorksheetFunction.Match method

一旦索引返回给您形成匹配函数,您可以使用该数字来引用单元格(x,y)表示法中的范围。

Application.worksheetfunction.match("State", [range referencing rows of headers],0)

答案 1 :(得分:0)

我有这个函数,当你输入它作为参数的数字时会返回列字母:

Function Col_Letter(lngCol As Integer) As String
'Returns the column letter using its number as parameter
    Dim vArr
    vArr = Split(Cells(1, lngCol).Address(True, False), "$")
    Col_Letter = vArr(0)
End Function

希望这有帮助!