是的,你可能会想,他到底为什么要用合并的细胞。让我解释一下:
我们接受来自世界各地不同公司的被保险人以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被合并了。
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发布于 2022-08-19 12:46:43
如果您有一个合并的单元格,.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)将给出合并区域的最后一个单元格。从这里,您可以获得与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
Nexthttps://stackoverflow.com/questions/73416606
复制相似问题