繁体   English   中英

VBA Excel - 合并单元格的偏移量

[英]VBA Excel - Offset with merged cells

是的,你可能会想,他为什么还要使用合并单元格。 让我解释:

我们以 Excel 格式接收来自世界各地不同公司的被保险人的保险期限。 我必须自动读取这些数据,但我遇到的问题是这些 Excel 文件包含合并的单元格。 这些总是以不同的方式合并。 但是,始终相同的是起始单元格右侧的下一个单元格包含所需的信息。 所以我需要一个代码来始终确定起始单元格右侧的数据,但考虑到它们是合并的单元格。 可以.offset 做到这一点吗?

示例:A5:C5 合并,D5 未合并,E5:H5 合并,I5:P5 合并--> 我需要 D5、E5 和 I5 中的数据(右侧的单元格)

对于下一个被保险人,相同的数据格式如下:A5:B5合并,C5:F5合并,G5:J5合并,K5:O5合并-->我需要来自C5,G5和K5的数据(右侧的单元格其中)

所以它始终是它右侧的 3 个单元格,但就合并单元格而言。

有人能帮我吗? 谢谢!

更新:这是我尝试过的,从开始 c 是 AN87,即使合并了 AK87:AM87,NewAddress 也给了我 AM87。

Dim c As Range
Dim firstAddress As String

With Workbooks(Left(myworksheet.Range("E10").Value, Len(myworksheet.Range("E10").Value) - 4) & ".xlsx").Worksheets("Sheet1").Range("A1:AY1000")
    Set c = .Find(myworksheet.Range("E11").Value, LookIn:=xlValues, Lookat:=xlWhole)
    If Not c Is Nothing Then
        ElzPeter = c.Address
        MsgBox ElzPeter
    End If
End With

Dim MA As Range, NewAddress As String
Set MA = c.MergeArea
NewAddress = MA.Offset(, -1).Resize(MA.Rows.Count).Address
MsgBox NewAddress

如果您有合并单元格, .Offset(0, 1)将始终为您提供合并区域右侧的第一个单元格。 因此,如果合并单元格“A5:C5”,则Range("A5").Offset(0, 1)将为您提供“D5”。

假设您从“A5”开始,以下应该可以为您解决问题:

With ActiveSheet       ' Specify the sheet you want to work with
    Set r = .Range("A5")
    For i = 1 To 3       
        Set r = r.Offset(0, 1)
        Debug.Print r.Address, r.MergeArea.Address, r.Value
    Next
End With

更新
如果您想从右到左 go: Offset(0, -1)将为您提供合并区域的最后一个单元格。 从那里,您可以使用MergeArea.Cells(1, 1)获取合并单元格的值

Set r = .Range("AN87")
For i = 1 To 3       
    Set r = r.Offset(0, -1)
    Debug.Print r.Address, r.MergeArea.Address, r.MergeArea.Cells(1, 1).Value
Next

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM