首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA Excel -带有合并单元格的偏移量

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

Stack Overflow用户
提问于 2022-08-19 12:10:30
回答 1查看 92关注 0票数 -1

是的,你可能会想,他到底为什么要用合并的细胞。让我解释一下:

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

例如: A5:C5合并,D5 not合并,E5:H5合并,I5:P5合并-->我需要来自D5、E5和I5 (右边的单元格)的数据

对于下一次投保人,相同的数据格式如下: A5:B5合并,C5:F5合并,G5:J5合并,K5:O5合并->我需要来自C5、G5和K5 (信元在其右侧)的数据。

所以它总是在右边的三个单元,但在合并的单元格上是正确的。

有人能帮我吗?谢谢!

更新:这是我尝试过的,从头开始,c是AN87,NewAddress给了我AM87,尽管AK87 87:AM87 87被合并了。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-19 12:46:43

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

假设您从"A5“开始,下面的操作应该对您有好处:

代码语言:javascript
复制
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)将给出合并区域的最后一个单元格。从这里,您可以获得与MergeArea.Cells(1, 1)合并的单元格的值。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73416606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档