programing

VBA를 사용하여 Excel과 수직으로 병합된 셀의 시작 범위 및 종료 범위 가져오기

css3 2023. 8. 13. 09:52

VBA를 사용하여 Excel과 수직으로 병합된 셀의 시작 범위 및 종료 범위 가져오기

수직으로 병합된 세포의 첫 번째 세포와 마지막 세포를 찾아야 합니다.

제가 B2 세포를 B50 세포로 병합한다고 가정해 보겠습니다.
시작 셀(=B2)과 끝 셀(=B50)을 VBA에 입력하려면 어떻게 해야 합니까?

Sub MergedAreaStartAndEnd()

    Dim rng As Range
    Dim rngStart As Range
    Dim rngEnd As Range

    Set rng = Range("B2")

    If rng.MergeCells Then

        Set rng = rng.MergeArea
        Set rngStart = rng.Cells(1, 1)
        Set rngEnd = rng.Cells(rng.Rows.Count, rng.Columns.Count)

        MsgBox "First Cell " & rngStart.Address & vbNewLine & "Last Cell " & rngEnd.Address

    Else

        MsgBox "Not merged area"

    End If

End Sub

아래 매크로는 워크북의 모든 시트를 살펴보고 병합된 셀을 찾은 다음 병합을 해제하고 모든 병합된 셀에 원래 값을 넣습니다.

이것은 DB 애플리케이션에 자주 필요하기 때문에 당신과 공유하고 싶었습니다.

Sub BirlesenHucreleriAyirDegerleriGeriYaz()
    Dim Hucre As Range
    Dim Aralik
    Dim icerik
    Dim mySheet As Worksheet

    For Each mySheet In Worksheets

    mySheet.Activate
    MsgBox mySheet.Name & “ yapılacak…”

    For Each Hucre In mySheet.UsedRange
        If Hucre.MergeCells Then
           Hucre.Orientation = xlHorizontal
           Aralik = Hucre.MergeArea.Address
           icerik = Hucre
           Hucre.MergeCells = False
           Range(Aralik) = icerik
        End If
    Next

 MsgBox mySheet.Name & " Bitti!!"

 Next mySheet
End Sub

B2를 B50으로 병합했다고 가정합니다.

그러면 시작 셀 주소는 다음과 같습니다.

MsgBox Range("B2").MergeArea.Cells(1, 1).Address

종료 셀 주소:

With Range("B2").MergeArea
    MsgBox .Cells(.Rows.Count, .Columns.Count).Address
End With

위 코드에서 B2 대신 병합된 영역의 셀 주소를 입력할 수 있습니다.

병합된 범위에 있는 셀 중 하나의 주소를 알고 있다고 가정하면 해당 범위에서 오프셋을 선택하고 행/열을 가져올 수 있습니다.

Sub GetMergedRows()
    Range("A7").Select 'this assumes you know at least one cell in a merged range.
    ActiveCell.Offset(-1, 0).Select
    iStartRow = ActiveCell.Row + 1
    Range("A7").Select
    ActiveCell.Offset(1, 0).Select
    iEndRow = ActiveCell.Row - 1
    MsgBox iStartRow & ":" & iEndRow
End Sub

위의 코드는 오프셋 행을 선택할 수 없는 경우(즉, 병합된 행이 A1 ~ 임의의 행인 경우) 오류를 발생시키므로 오프셋할 수 없는 경우 코드를 알려주는 오류 처리를 추가하려고 합니다. 위쪽 행은 1이어야 하고 아래쪽 행은 65,536이어야 합니다.이 코드도 1차원이므로 x축도 추가할 수 있습니다.

셀 참조를 문자열로 사용하려면 위치, 시작 셀 및 끝 셀이 문자열 변수인 다음과 같은 것을 사용할 수 있습니다.

Location = Selection.Address(False, False)
Colon = InStr(Location, ":")
If Colon <> 0 Then
    StartCell = Left(Location, Colon - 1)
    EndCell = Mid(Location, Colon + 1)
End If

이러한 개체를 범위로 설정하려면 시작 범위 및 끝 범위가 범위 개체인 이 항목을 추가할 수 있습니다.

set StartRange = Range(StartCell)
set EndRange = Range (EndCell)

병합된 셀을 순환하려면 이 작업을 수행합니다.

Sub LoopThroughMergedArea()
    Dim rng As Range, c As Range

    Set rng = [F5]

    For Each c In rng.MergeArea
        'Your code goes here
        Debug.Print c.Address'<-Sample code
    Next c
End Sub

언급URL : https://stackoverflow.com/questions/2951070/get-start-range-and-end-range-of-a-vertically-merged-cell-with-excel-using-vba