excel 合并单元格的偏移

tvz2xvvm  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(462)

我们以Excel格式接收来自世界各地不同公司的被保险人的保险期限。
我自动读取数据,但这些Excel文件包含合并的单元格。这些合并的方式不同。
始终相同的是,起始单元格右侧的下一个单元格包含所需的信息。
我总是需要确定起始单元格右边的数据,但考虑到它们是合并单元格,.offset可以做到吗?
示例:
A5:C5合并,D5未合并,E5:H5合并,I5:P5合并

--〉我需要D5、E5和I5(右侧单元格)的数据

对于下一个被保险人,相同数据的格式如下:
A5:B5合并,C5:F5合并,G5:J5合并,K5:O 5合并

--〉我需要C5、G5和K5(右侧单元格)的数据

它总是它右边的三个单元格,但就合并单元格而言是右边的。
我是这么试的:
从开始c是AN 87和新地址给我AM 87,即使AK 87:AM 87合并。

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
hmmo2u0o

hmmo2u0o1#

如果你有一个合并的单元格,.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

更新

如果要从右到左:Offset(0, -1)将为您提供合并区域的 last 单元格。从那里,您可以使用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

相关问题