VBA中使用第一行列标题返回列名

需求:

当工作表中的列数比较多,而且列数、列的位置经常变动时,如果在VBA代码中使用的静态指定的列名,将不得不经常改动VBA代码,非常不方便。

解决方法:

使用自定义列号、列名查找函数。

代码如下:

Function GetColumnByHeader(headerText As String, WorksheetName As String) As String   '按列标题得到列名
    
    Dim ws As Worksheet '所在工作表
    Dim headerRange As Range '第一行标题
    Dim columnRange As Range '标题所在的单元格
    Dim ColumnName As String '标题所在单元格地址
    
    Dim regEx As Object
    Set regEx = CreateObject("VBScript.RegExp")
    regEx.Pattern = "\d+" ' 设置正则表达式,匹配所有数字
    
    On Error Resume Next '出现错误时继续执行代码
    Set ws = ThisWorkbook.Worksheets(WorksheetName)
    If Not ws Is Nothing Then
            Set headerRange = ws.Rows(1).Find(headerText, LookIn:=xlValues, lookat:=xlWhole)
        If Not headerRange Is Nothing Then
            ColumnName = headerRange.Address(False, False)
            ' 使用Replace函数替换所有匹配的数字为空字符串
            GetColumnByHeader = regEx.Replace(ColumnName, "")
        Else
            MsgBox ("请检查参数")
            GetColumnByHeader = "" '如果列标题不存在
        End If
    Else  '如果工作表不存在
        MsgBox ("请检查参数")
        GetColumnByHeader = ""
    End If
    
End Function

调用:

=GetColumnByHeader(“标标题”,“工作表名”)

你可能感兴趣的:(vba,excel,VBA)