使用合并的单元格vba查找列号

时间:2017-03-07 16:31:37

标签: excel vba excel-vba

我想在表格中找到具有特定标题的列,其中几乎所有标题都已合并。这是一个示例,其中包含我的表格的虚拟数据:

Table with headers merged

我已尝试查找第1行和第2行(范围A1:XFD1A2:XFD2),但似乎vba无法找到我要查找的列:

Sub getColumn()
Dim ColNum As Integer
On Error Resume Next
ColNum = Workbooks(ActiveWorkbook.Name).Worksheets("Data").Range("A1:XFD1").Find(What:="Unit Cost", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False).Column
MsgBox ("Column number is: " & ColNum)
End Sub

谢谢。

5 个答案:

答案 0 :(得分:2)

您只需要更改

即可
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<select id="colorSelect">
<option selected disabled>Text-Align : </option>
<option value="1">Red</option>
<option value="2">Blue</option>
<option value="3">Green</option>
</select>
<input type="button" id="testButton" value="Test Button"/>

.Worksheets("Data").Range("A1:XFD1")

因为您确实要搜索2行

答案 1 :(得分:1)

你可以试试这个:

.Worksheets("Data").Range("A1:XFD2")

我没有测试过,但它应该可以工作...... :) 你只需循环遍历你的范围并检查每一列是否合并。然后你给MsgBox。

答案 2 :(得分:1)

由于Workbooks(ActiveWorkbook.Name)ActiveWorkbook相同,而后者是默认隐式工作簿资格,您可以简单地编写以下帮助函数:

Function GetColumn(stringToFind As String) As Long
    On Error Resume Next
    GetColumn = Worksheets("Data").Rows("1:2").Find(What:=stringToFind, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False).Column
End Function

将在您的“主要”子资源中被利用,如下所示:

Sub main()
    Dim colNum As Long

    colNum = GetColumn("Unit Cost") '<--| returns 0 if "Unit Cost" is not found
End Sub

答案 3 :(得分:0)

只需遍历您的列和行

Sub findHeader()      
    For i = 1 To 5
       If Cells(1, i).Value = "Unit Cost" Then
          MsgBox Cells(1, i).Value
       End If
    Next i
End Sub

答案 4 :(得分:0)

Application.Match找到您的单位费用列。

dim colm as variant
with activesheet
    colm = application.match("unit cost", .rows(1), 0)
    if not iserror(colm) then
        debug.print colm   'column as number
    else
        colm = application.match("unit cost", .rows(2), 0)
        if not iserror(colm) then
            debug.print colm   'column as number
        else
            debug.print "not found"
        end if
    end if
end if