나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 dew (dewdrop)

추천:  2
파일:     셀 병합 각셀 이름 표시 문의_Ans.xlsm (26.7KB) 조회:  1663
제목:   [RE]셀 병합에서 각 셀에 데이터 표시 문의
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 엑셀 버전(95,97,2000,xp,2003,2007):

* 아래줄에 질문을 작성하세요 >>

안녕하세요

3개의 각 셀에 이름이 입력된 상태에서 셀병합을 하면 "셀을 병합하면 왼쪽 위의 값만 남고 나머지 값은 잃게 됩니다."라는 메시지 창에서 [확인] 단추를 클릭하면 3개 셀이 병합하고 1개 셀 데이터값 남게되는 것으로 알고 있습니다.

퇴직자가 만든 자료를 갖고 새로운 보고서 자료를 만드는데, 다른 데이터를 입력하기 위하여 셀병합 해제하고 각 셀에 새로운 이름 입력하고 셀 병합을 하면 셀 병합 후 1개의 이름 입력값 남게 됩니다.

그래서, 임시 방편으로 다른 셀에서 "서식 붙여넣기" 기능을 이용하여 자료를 작성하고 있습니다.

셀 병합하여도 3개의 데이터가 남게 하는 방법은 무엇인지요?

첨부파일을 살펴봐주시고 설명을 부탁드립니다.

감사합니다.
==============[박인호님 글에 대한 답변입니다]==============

VBA로 만들었습니다. 첨부파일 참고하세요...

Sub UserMerge()
    Dim rSelect As Range
    Dim rArea As Range, rX As Range
    Dim sTxt As String
    
    If TypeName(Selection) <> "Range" Then Exit Sub
    Set rSelect = Selection
    
    Application.DisplayAlerts = False
    For Each rArea In rSelect.Areas
        sTxt = ""
        For Each rX In rArea.Cells
            If rX <> "" Then sTxt = sTxt & vbLf & rX.Value
        Next
        rArea.Merge
        rArea.Cells(1) = Mid(sTxt, 2)
    Next
    Application.DisplayAlerts = True
    
End Sub

Sub UserUnMerge()
    Dim rSelect As Range
    Dim rArea As Range, rX As Range, rY As Range
    Dim vTxt, vCell, sTxt As String
    Dim iX As Integer, iMax As Integer, iUbound As Integer, iCnt As Integer
    
    If TypeName(Selection) <> "Range" Then Exit Sub
    
    For Each rX In Selection.Cells
        If rX.Cells(1).MergeCells Then
            Set rSelect = rX.Cells(1).MergeArea
        
            vTxt = Split(rSelect.Cells(1), vbLf)
            iUbound = UBound(vTxt) + 1
            iCnt = rSelect.Rows.Count
            
            ReDim vCell(1 To iCnt, 1 To 1)
            iMax = WorksheetFunction.Max(iCnt, iUbound)
            
            For iX = 1 To iMax
                If iX <= iUbound Then
                    If iX <= iCnt Then
                        vCell(iX, 1) = vTxt(iX - 1)
                    Else
                        vCell(iCnt, 1) = vCell(iCnt, 1) & vbLf & vTxt(iX - 1)
                    End If
                End If
            Next
            rSelect.UnMerge
            rSelect.Value = vCell
        End If
    Next
End Sub
 
[불량 게시물 신고]  
        
  

작성일 : 2019-11-20(11:00)
최종수정일 : 2019-11-20(11:00)
 


 ◎ 관련글

  제 목   작성자   날짜
셀 병합에서 각 셀에 데이터 표시 문의 박인호 2019-11-19
[RE]셀 병합에서 각 셀에 데이터 표시 문의 dew 2019-11-20