programing

Excel 행 및 중복 데이터 병합 해제

bestprogram 2023. 5. 2. 23:04

Excel 행 및 중복 데이터 병합 해제

Microsoft Excel에 저장된 상당히 큰 데이터베이스를 제공받았는데, 이 데이터베이스를 유용한 것으로 변환해야 합니다.
그러나 제가 직면한 문제 중 하나는 일부 데이터가 함께 병합된다는 것입니다(수평적으로 2초).

예를 들어,

row 1: [ x ][ x ][ x ][ x ][ x ]
row 2: [ x ][ x ][ o    o ][ x ]
row 3: [ o    o ][ x ][ o    o ]

여기서 x는 단일 셀과 o는 함께 병합됩니다.

제가 하고 싶은 것은 모든 행의 병합을 해제하는 것입니다(결합 해제 버튼을 사용하면 상당히 쉽게 할 수 있습니다). 그러나 병합된 셀이 있던 위치에서는 두 셀에 걸쳐 데이터를 복제합니다.
보낸 사람;[[ Some Data ]]
받는 사람;[ Some Data ][ Some Data ]

감사합니다! 어떤 도움이든 감사합니다.

이것은 VBA 솔루션입니다.이 매크로는 활성 시트의 모든 셀을 검색하여 병합 여부를 확인합니다.이 경우 병합된 셀의 범위를 온도 범위 변수에 저장하고 셀의 병합을 해제한 다음 병합되지 않은 범위(값이 무엇이었는지)에 있는 첫 번째 셀의 값으로 범위를 채웁니다.

Sub UnMergeFill()

Dim cell As Range, joinedCells As Range

For Each cell In ThisWorkbook.ActiveSheet.UsedRange
    If cell.MergeCells Then
        Set joinedCells = cell.MergeArea
        cell.MergeCells = False
        joinedCells.Value = cell.Value
    End If
Next

End Sub
  1. 데이터를 병합한 범위 선택
  2. 병합 및 중심을 클릭하여 셀 병합을 해제합니다.
  3. 데이터 범위를 다시 선택합니다.
  4. Ctrl+G > Special > Blanks 누르기
  5. = 및 위쪽 화살표 키를 누릅니다.
  6. Ctrl+Enter를 누릅니다.

VBA는 필요 없습니다.

  1. 병합된 셀의 범위 선택
  2. 셀 병합 해제
  3. 홈 -> 찾기 및 선택 -> 특수로 이동...-> 공백 -> OK
  4. "=" 한 셀 위로 이동을 입력하고 Ctrl + Enter 키를 누릅니다.

R1C1 스타일이 활성화된 경우:파일 -> 옵션 -> 수식 -> R1C1 참조 스타일 그때

  1. ...
  2. ...
  3. ...
  4. "=R[-1]c"를 입력하고 Ctrl + Enter 키를 누릅니다.

이는 @aevanko의 답변을 기반으로 하지만, 임의의 범위로 일반화됩니다.

Sub UnMergeRange(WorkRng As Range)
    Dim cell As Range, joinedCells As Range
   
    For Each cell In WorkRng
        If cell.MergeCells Then
            Set joinedCells = cell.MergeArea
            cell.MergeCells = False
            joinedCells.Value = joinedCells.Cells(1, 1).Value
        End If
    Next
End Sub

저는 또한 그것이 작동하지 않는 코너 케이스를 우연히 발견했기 때문에 변경을 했습니다.제공된 범위 이상의 셀을 포함하는 수직으로 병합된 셀이 있을 때입니다.값을 얻으려면 조금 더 고급스러운 표현을 사용해야 했습니다.

VBA 코드를 빠르게 구현하는 방법은 모르겠지만 공식을 사용하여 다른 열에 값을 입력했습니다...그런 다음 병합되지 않은 셀에 값을 붙여넣는 복사/붙여넣기 마법을 사용했습니다.이 공식은 값이 병합된 셀의 첫 번째 셀과 연결되고 다른 모든 셀은 0(0)으로 결정된다는 사실을 기반으로 합니다.

색상 A2인 경우:A100에는 병합된 셀이 있습니다. 저는 다음을 수행했습니다.

  1. Cell B2에서 저는 다음 공식을 입력했습니다.=IF(A2<>0,A2, B1)
  2. 공식을 B100으로 복사합니다.
  3. C열에만 값을 복사/붙여넣습니다.
  4. 열 A의 모든 병합을 해제합니다.
  5. C열의 값을 A열로 복사합니다.

사실, 대담하다면 이 시리즈로 단순화할 수 있습니다...

  1. 열 A의 모든 병합 해제
  2. Cell B2에서 저는 다음 공식을 입력했습니다.=IF(A2<>0,A2, B1)
  3. 공식을 B100으로 복사합니다.
  4. A열에만 값 복사/붙여넣기

그러면 C열을 사용할 수 없습니다...

여기 모든 셀에 데이터를 저장하는 또 다른 방법이 있습니다.매일 병합된 셀과 함께 게시되는 보고서가 있습니다. 매일 병합된 셀을 피하기 위해 Power Query에서 보고서를 참조합니다.

Fill down 옵션을 사용하여 병합된 범위의 모든 셀에 데이터를 채울 수 있습니다.나한테 효과가 있어요! :)

아래로 채우기 옵션이 표시된 보고서 보기

언급URL : https://stackoverflow.com/questions/9215022/unmerging-excel-rows-and-duplicate-data