分享

学以致用——Excel VBA查找列名(列标题所在列的字母序号)

 depsyq 2023-05-23 发布于福建

需求描述:

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

解决方法:

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

代码如下:

1. 列号查找函数

  1. '查找列号函数
  2. Private Function intFindColumnID(ByVal rowID, ByVal objworkBook, ByVal objWorkSheet, ByVal strColumnName) As Integer
  3. objworkBook.Activate
  4. objWorkSheet.Select
  5. objWorkSheet.Cells(1, 1).Select
  6. Cells.Find(What:=strColumnName, After:=ActiveCell, LookIn:=xlFormulas, _
  7. LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
  8. MatchCase:=False, SearchFormat:=False).Select
  9. If Selection.Row = rowID Then
  10. intFindColumnID = Selection.Column
  11. Else
  12. intFindColumnID = 0
  13. End If
  14. End Function

2. 调用查找列号函数

  1. '调用查找列号函数
  2. Sub findColumnID()
  3. Dim objworkBook As Workbook '声明工作簿变量
  4. Dim objWorkSheet As Worksheet '声明工作表变量
  5. Dim columnNumber As Integer '声明列号(列标)变量 (1-10384)
  6. Dim columnName As String '声明列名变量 (A-XFD)
  7. Dim targetColumnTitleName As String '声明要查找的列的列标题
  8. Set objworkBook = ThisWorkbook '指定工作簿
  9. Set objWorkSheet = objworkBook.Sheets("test") '指定工作表
  10. targetColumnTitleName = "Detailed Description" '指定要查找的列标题
  11. 'objWorkSheet.Range("I1").Value = intFindColumnID(1, objworkBook, objWorkSheet, targetColumnTitleName)
  12. 'objWorkSheet.Range("J1").Formula = "=Substitute(Address(1,I1, 4), ""1"", """")"
  13. columnNumber = intFindColumnID(1, objworkBook, objWorkSheet, targetColumnTitleName) '调用列号查找函数
  14. 'objWorkSheet.Range("J1").Formula = "=Substitute(Address(1," & columnNumber & ", 4), ""1"", """")" '4表示单元格引用方式4:relative row & relative column reference.
  15. columnName = Application.Evaluate("=Substitute(Address(1," & columnNumber & ", 4), ""1"", """")") '使用Substitute函数将类似"D1"这样得单元格地址中的1替换为空白字符(即,删除数字1,仅留下列名(字母A至XFD),对应1至10384)
  16. MsgBox (columnName)
  17. End Sub

运行结果示例:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多