엑셀 정렬 뒤 이름과 금액이 어긋났다면

장부를 이름 가나다순으로 정렬했더니 합계는 그대로인데 고객별 청구액이 엉뚱하게 바뀌었다. 이미 저장했다면 원래 짝은 어떻게 되찾을까?

엑셀 정렬 뒤 이름과 금액이 어긋났다면
세 줄 요약
  • 정렬 직후 고객과 금액이 어긋났다면 실행 취소부터 한다. 취소할 수 없으면 오류 전 사본이나 OneDrive·SharePoint의 버전 기록에서 정상 기록을 찾는다.
  • 이름순으로 정렬해도 함께 움직일 범위에는 주문번호·이름·지역·금액이 모두 들어가야 한다. 빈 행·열과 표 밖에 붙인 새 열 때문에 일부 정보가 빠질 수 있다.
  • 원본 순서를 유지하려면 SORTBY로 별도 목록을 만든다. 정렬 후에는 합계뿐 아니라 주문번호별 고객·금액의 연결도 원본과 대조한다.

방금 섞였다면 다시 정렬하기 전에 실행 취소

엑셀 정렬 후 이름과 금액이 어긋났다면, 다른 열을 다시 정렬해 맞추기보다 잘못 실행한 정렬을 취소하는 것이 먼저다. 이름 오름차순의 반대인 내림차순을 누른다고 원래 입력 순서가 돌아오지는 않는다. 이미 이름만 움직인 상태에서 장부 전체를 정렬하면 잘못된 고객·금액 조합이 통째로 이동한다.

Windows Excel에서 방금 정렬했다면 Ctrl+Z 또는 실행 취소를 누른다. 정렬 뒤 다른 작업도 했다면 실행 취소 목록에서 되돌릴 작업을 살핀다. ‘저장했으니 늦었다’고 단정할 필요는 없다. Microsoft는 저장 후에도 취소 가능한 작업 내역과 한도가 남아 있으면 변경을 되돌릴 수 있다고 설명한다. 반면 매크로 실행은 취소 내역을 지울 수 있다. 실행 취소의 조건에 따라 사용할 수 있는 버튼과 내역이 달라진다.

취소할 수 없다면 오류가 생기기 전의 파일을 찾는다. Microsoft 365의 OneDrive·SharePoint 저장 파일은 파일 제목에서 ‘버전 기록’을 열고 이전 버전을 별도 창으로 볼 수 있다. 정상적인 고객·주문번호·금액 조합이 있는지 확인한 뒤 복원한다. 이 기능을 PC에만 저장한 모든 파일의 자동 복구 기능으로 생각하면 안 된다. 버전 기록의 저장 위치 조건이 붙는다.

예를 들어 오전 정렬에서 오류가 났지만 오후에 새 주문도 입력했다면, 오전 이전 파일로 통째로 돌아가는 것만으로 오후 주문까지 보존되지는 않는다. 현재 파일의 사본을 남기고 정상 버전을 비교하면, 복원 뒤 다시 반영할 신규 주문을 구별할 수 있다. 이미 발송한 주문서나 원래 내려받은 장부도 대조 자료가 된다. 복구 기준이 없는 상태에서 이름과 금액을 눈대중으로 짝짓지는 않는다.

합계 6만원이 맞아도 청구 대상은 틀릴 수 있다

정렬에서 ‘이름 열을 기준으로 삼는다’는 말은 이름만 움직인다는 뜻이 아니다. 주문 한 건이 한 행이라면 주문번호·고객·지역·청구액이 함께 이동해야 한다. 실제 Excel 사용자의 질문도 도시 이름을 알파벳순으로 바꿀 때 나머지 정보가 따라오지 않는 문제였다.

다음은 설명용 주문 세 건이다. A열은 주문번호, B열은 고객, C열은 지역, D열은 청구액이며 첫 행에는 열 이름이 있다고 가정한다.

주문번호고객지역청구액(원)
O103다온서울30,000
O101가온부산10,000
O102나래서울20,000

B2:B4만 가나다순으로 바꾸면 고객은 가온·나래·다온 순서가 된다. 다른 열이 그대로라면 첫 행은 O103·가온·서울·30,000원이 된다. 원래 가온의 주문은 O101·부산·10,000원이므로 고객에게 붙은 정보가 모두 달라졌다. 금액 열은 전혀 움직이지 않았으니 합계는 여전히 60,000원이고, 주문 건수도 세 건이다.

정상적인 결과에서는 가온의 O101·부산·10,000원이 맨 위로, 나래의 O102·서울·20,000원이 그다음으로, 다온의 O103·서울·30,000원이 마지막으로 이동한다. 숫자를 더하거나 빼는 작업은 없다. 바뀌는 것은 세 주문의 나열 순서뿐이다. 따라서 합계와 행 수가 같다는 검사는 누락을 찾는 데 도움을 줘도 고객과 금액의 짝까지 증명하지는 못한다.

이름을 기준으로 주문 기록 전체 정렬하기

위 예제에서는 이름 B열을 정렬 기준으로 고르되, 대상은 머리글을 포함한 A1:D4로 잡는다. Windows 데스크톱 Excel의 ‘데이터 → 정렬’에서 고객을 기준 열로, 셀 값을 정렬 기준으로, 오름차순을 순서로 지정한다. ‘내 데이터에 머리글 표시’를 켜면 ‘고객’이라는 제목은 주문 세 건과 함께 이동하지 않는다.

일반 범위에서 한 열만 선택해 시작했고 정렬 경고가 나타났다면, 연결된 정보를 함께 옮길 때는 ‘선택 영역 확장’을 사용한다. ‘현재 선택 영역으로 정렬’은 선택한 일부만 움직여 원래 관계를 끊을 수 있다. 경고는 Excel이 옆의 데이터를 감지했을 때 나타나므로, 창이 안 떴다는 사실만으로 모든 열이 포함됐다고 판단할 수는 없다. Microsoft의 부분 범위 정렬 설명도 이 관계 손상을 경고한다.

표가 화면보다 넓다면 마지막 열까지 선택됐는지 본다. 주문번호가 A열, 고객이 B열, 연락처가 J열에 있는데 A:D까지만 선택하면 J열은 같은 주문의 정보여도 정렬 대상 밖에 남는다. 시트 전체를 선택하는 방식은 옆에 있는 별도 장부나 계산표까지 포함할 수 있다. 한 주문을 구성하는 첫 열부터 마지막 열, 첫 기록부터 마지막 기록까지를 대상으로 삼는다.

보기 좋게 넣어 둔 빈 열도 자동 범위 판단을 어렵게 만든다. A:D가 주문이고 E열을 비운 뒤 F열에 배송 메모를 적었다면, 사람 눈에는 한 장부지만 중간에 구획이 생긴 셈이다. Microsoft의 데이터 배치 지침은 관련 범위 안의 빈 행·열을 피하고, 서로 다른 자료 사이에는 빈 행·열을 두도록 설명한다. 연락처를 아직 받지 못해 셀 하나가 빈 경우와, 자료 사이에 빈 열 전체를 둔 경우는 같은 배치가 아니다.

배송 메모도 주문에 붙어 움직여야 한다면 주문 범위 안에 둔다. 화면에서 간격을 주려는 목적은 열 너비나 테두리로 처리할 수 있다. 맨 위의 ‘10월 주문 현황’ 같은 보고서 제목과 맨 아래의 직접 입력한 합계 행은 개별 주문이 아니므로 정렬할 기록에 섞지 않는다. 숨겨 둔 열에는 담당자나 식별번호가 있을 수 있어 범위를 잡기 전에 표시해 두면 끝 열을 빠뜨리기 어렵다.

표로 바꿨는데 새 메모 열만 남는 이유

반복해서 갱신하는 장부라면 전체 기록을 Excel 표로 만들 수 있다. 범위에 색과 테두리를 칠하는 것과는 다르다. 데이터를 선택하고 홈 → 표 서식에서 스타일을 고른 뒤, 생성 창에 표시되는 셀 범위와 머리글 여부를 확인한다. 위 주문 예제라면 A1:D4가 들어간다. 표 생성 절차에서 지정한 범위가 관리할 자료가 된다.

고객 머리글의 정렬 메뉴를 쓰면 그 표에 속한 주문 정보가 함께 움직인다. 다만 표가 알아서 ‘이 고객의 자료일 것’이라고 모든 주변 셀을 추론해 묶지는 않는다. 주문표 옆의 메모가 표 범위 밖이라면, 같은 색으로 꾸미거나 같은 행에 적었다는 이유만으로 포함되지 않는다. 이미 잘못 짝지어진 장부를 표로 바꿔도 원래 고객과 금액을 복구하지는 못한다.

예를 들어 기존 표가 A:D의 네 열인데, 다음 달 자료를 맨 아래에 붙이면서 E열에 배송 메모까지 추가했다고 하자. Microsoft는 새 행에 붙여넣는 자료의 열 수가 기존 표보다 많으면 초과 열은 표에 포함되지 않는다고 설명한다. 이 경우 표 안을 클릭하고 ‘표 디자인 → 표 크기 조정’에서 새 열과 마지막 기록을 포함한 범위를 지정한다. 표 확장과 붙여넣기의 조건에 해당한다.

배송 메모가 빠져 있던 파일을 이미 정렬했다면 크기 조정부터 해서는 안 된다. 뒤늦게 E열을 표에 넣으면 현재 행에 붙어 있는 잘못된 메모를 새 범위로 묶게 된다. 먼저 정상 사본에서 주문번호와 배송 메모의 대응을 되찾고, 그다음 전체 범위를 넓힌다.

접수순 원본을 남기는 SORTBY 목록

장부를 처음 접수한 순서로 보존하면서 고객 이름으로 빨리 찾고 싶다면, 원본의 행을 옮기지 않고 별도 정렬 결과를 만들 수 있다. Microsoft 365용 Excel과 Excel 2024·2021에서는 SORTBY가 지정한 기준에 따라 배열을 반환한다. 같은 시트의 빈 영역 G1:J1에 네 열의 제목을 적고, G2에 아래 수식을 넣는 예를 들 수 있다.

=SORTBY(A2:D4,B2:B4,1)

첫 번째 A2:D4는 반환할 주문 정보 전체다. 두 번째 B2:B4는 순서를 결정할 고객 이름이고, 마지막 1은 오름차순이다. 결과는 G2:J4의 세 행·네 열로 나타나며 A2:D4의 접수 순서는 그대로다. 고객 이름만 반환하도록 첫 범위도 B2:B4로 쓰면, 옆에 따로 적은 금액까지 따라오는 결과가 만들어지지 않는다. 위 예제는 데이터 세 건을 위한 고정 범위이므로 다섯째 행에 주문을 추가할 때는 참조 범위도 늘려야 한다.

행이 계속 늘어나는 Excel 표에는 표 이름을 쓰는 구조화 참조를 사용할 수 있다. 표 이름을 Orders로 지정하고 고객 머리글이 Customer라면 =SORTBY(Orders,Orders[Customer],1)처럼 쓴다. Orders와 Customer는 파일에 실제로 있는 표 이름·열 제목으로 바꾼다. 원본 표에 들어간 행의 추가·삭제를 참조에 반영하므로 매번 마지막 행 번호를 고치는 부담이 줄어든다.

출력 수식은 표 안이 아니라 표 바깥의 빈 셀에 둔다. 결과가 펼쳐질 자리에 다른 값이 있으면 #SPILL! 오류가 날 수 있다. 수식 수정은 결과 영역의 왼쪽 위 셀에서 한다. 동적 배열의 출력 규칙이다. 고객 금액을 바꾸려면 출력 칸을 덮어쓰지 않고 원본 주문을 수정한다.

출력 결과 옆에 수동으로 ‘통화 완료’ 같은 메모를 붙이는 것도 피한다. 고객 이름이 바뀌어 결과 순서가 달라졌을 때, 수식의 반환 범위 밖에 입력한 메모는 그 고객을 따라 이동하는 데이터가 아니다. 메모를 원본 주문의 열로 저장하고 반환 범위에 함께 넣으면 이름·금액·메모가 같은 기록으로 나온다. 별도 목록은 조회용으로 두고, 실제 수정은 주문번호를 찾아 원본에서 하는 방식이 맞다.

원래 순서와 원래 조합을 되찾는 방법

정렬을 마치면 위 예제의 O101이 여전히 가온·부산·10,000원인지 원본과 대조한다. O102·O103도 같은 방식으로 읽는다. 실무 장부에서는 중간에서 빠졌던 열과 마지막에 추가한 행까지 포함해 주문번호별 관계를 비교한다. 맨 위 몇 건만 맞는 것으로 전체가 복구됐다고 처리하면, 아래쪽의 어긋난 기록이 남을 수 있다.

정렬 결과가 달라도 모든 주문번호에 원래 고객과 금액이 붙어 있다면 기록의 연결은 살아 있다. 이때 접수 순서로 돌아가고 싶다면 정렬 전에 저장한 접수번호나 고정 순번을 기준으로 전체 기록을 다시 나열할 수 있다. 순번 역시 모든 열과 함께 이동했어야 한다. 현재 화면의 행 번호를 그대로 읽는 값은 과거 접수 순서를 따로 저장한 기록이 아니다.

반대로 고객 열만 움직였다면 남아 있는 순번으로 장부 전체를 정렬해도 잘못 붙은 고객 이름은 복구되지 않는다. 위 예제에서 O101에 나래가 붙은 행을 어디로 옮기든 그 조합은 그대로다. 오류 전 사본에서 O101의 고객을 찾아야 한다. 같은 이름의 고객이 여러 명이면 이름만으로는 어느 기록인지 정할 수 없어 주문번호 같은 식별자가 필요하다.

복구에 쓸 원본이 없다면 누가 얼마를 청구받아야 하는지 이 장부의 합계만으로 결정할 수 없다. 원래 주문서·접수 기록에서 확인된 건부터 다시 연결하고, 확인하지 못한 건은 발송할 청구 목록에 섞지 않는다. 모든 주문의 연결이 확인된 뒤 전체 범위 정렬이나 별도 조회 목록으로 다시 작업한다.