【问题标题】:Correct syntax for Offset and merged cells - VBA偏移和合并单元格的正确语法 - VBA
【发布时间】:2018-09-18 04:22:27
【问题描述】:

我在使用合并单元格偏移的正确语法时遇到问题。例如,在 A 列中,第 2 行到第 5 行 (A2:A5) 是一个合并单元格。我想使用偏移量来获取(B2:B5)上的列范围,包括合并的单元格值(A2:B5)。从那里,我想使用该偏移范围作为聚集柱形图的值。我现在的代码只获取第一个单元格值 (B2) 而不是 (A2:B5)。任何帮助,将不胜感激。

Dim ws As Worksheet: Set ws = Sheets("Trend")
Dim LastRow As Long, partnum As String, findpart As Range
Dim lastrowmerge As Long, FirstRow As Long

LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row
partnum = TextBox1.Value

' Searches for number in column A including merged cells
If Not Application.IsNA(Application.Match(partnum, Range("A:A"), 0)) Then
        Set findpart = Cells(Application.Match(partnum, Range("A:A"), 0), 1)

' If number found , get range values to the right of number found in column A
        Dim xVals As Long
        Set mymergedrange = findpart.MergeArea
'        FirstRow = mymergedrange.Row
'        lastrowmerge = mymergedrange.Row + mymergedrange.Rows.Count - 1

         xVals = mymergedrange.Offset(0, 1) ' (B2 not B2:B5)

【问题讨论】:

标签: excel vba merge range offset


【解决方案1】:

仅将合并的单元格区域称为左上角单元格

例如,如果A2:A5被合并,则引用就像它只是A2一样。

偏移量也是如此,但是合并的单元格可能会以多种方式引起混淆,通常应避免使用包含值的单元格。合并一般只用于标签/标题。

如果您必须使用合并单元格,您可以使用如下示例的属性确定合并区域的尺寸:

Sub mergeTest()

    Dim r As Range
    Set r = ActiveSheet.Range("A2")

    With r
        If Not r.MergeCells Then
            MsgBox .Address & " is not part of merged cells."
            Exit Sub
        End If

        'cell is merged
        MsgBox .Address & " is part of a merged set of " & _
              .MergeArea.Cells.Count & " cells." & vbLf & _
            "It is " & .MergeArea.Columns.Count & " columns tall by " & _
              .MergeArea.Columns.Count & " rows wide." & vbLf & _
            "The address of the merged range is: " & .MergeArea.Address

    End With

End Sub

更多信息:

【讨论】: