Excel VBA-从合并顶部单元格的列中获取顶部单元格

时间:2018-09-27 15:01:09

标签: excel vba excel-vba

我有一个宏,我在其中遍历各列并确定“顶部”单元格(第7行,因为存在各种不相关的标头)是否与某些指定值匹配,然后执行各种操作。

问题在于某些标头是合并的单元格。这意味着代码只能正确识别与标题单元格跨越的最左列对齐的列。显然,我需要对此进行更改以解决此问题。

我不知道如何获取它来记录D列和E列的值,其中D列和E列中的合并单元格都显示“经理”或“导演”。

此刻,我刚刚添加了一个虚构的动作(“ y = 22”),因为我试图在前进之前弄清基本原理。

Sub LabourCalc()

    Dim x As Variant
    Dim y As Variant

    Workbooks("XXX").Activate
    Sheets("XXX").Activate

    For x = 1 To 10
        If InStr(Cells(7, x).Value, "MANAGER") _
        Or InStr(Cells(7, x).Value, "manager") _
        Or InStr(Cells(7, x).Value, "Manager") _
        Or InStr(Cells(7, x).Value, "DIRECTOR") _
        Or InStr(Cells(7, x).Value, "Director") _
        Or InStr(Cells(7, x).Value, "director") Then
            y = 22
        End If
    Next x

End Sub

2 个答案:

答案 0 :(得分:2)

使用Range.MergeArea属性。

  

返回一个Range对象,该对象表示包含指定单元格的合并范围。如果指定的单元格不在合并范围内,则此属性返回指定的单元格。

例如,如果D7:E7是合并的单元格:

  • Cells(7, 4).MergeArea.Cells(1, 1)是指D7
  • Cells(7, 5).MergeArea.Cells(1, 1) 是指D7。单元格E7为空。

如果F7不是 一个合并的单元格:

  • Cells(7, 6).MergeArea.Cells(1, 1)是指F7

正如@ValonMiller在评论中指出的那样,您可以通过首先使用InStrCells(7, x)的内容转换为大写字母来简化多个UCase实例。

您的最终循环如下:

With Workbooks("XXX").Sheets("XXX")
    For x = 1 To 10
        With .Cells(7, x).MergeArea.Cells(1, 1)
            If InStr(UCase(.Value), "MANAGER") Or InStr(UCase(.Value), "DIRECTOR") Then
                ' Do your stuff here
            End If
        End With
    Next x
End With

答案 1 :(得分:1)

所有这些评论,没有人提供实际的工作答案。试试这个:

Sub LabourCalc()

    Dim wb as Workbook
    Set wb = Workbooks("XXX")

    Dim ws as Worksheet
    Set ws = wb.Worksheets("XXX")

    For x = 1 To 10
        Select Case UCase$(ws.Cells(7,x).MergeArea.Cells(1,1))
            Case is = "MANAGER","DIRECTOR"
                'do stuff here
        End Select
    Next

End Sub

如果您需要检查Manager或Director是否出现在单元格中,请执行以下操作:

Dim checkValue as String
checkValue = UCase$(ws.Cells(7,x).MergeArea.Cells(1,1))

Select Case Instr(checkValue,"MANAGER") > 0 Or Instr(checkValue,"DIRECTOR") > 0
    Case is = True
        'do stuff
End Select