簡體   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