동료가 27 열에 수백 개의 데이터 행이있는 워크 시트를 제공한다고 가정합니다. 데이터 작업을 시작하기 전에 이전에 정렬되었는지 알고 싶을 수 있습니다. 정보를 알면 데이터를 재조명 할 필요가 없어 질뿐만 아니라 동료가 데이터를 보는 가장 중요한 방법이라고 느꼈던 아이디어를 얻을 수 있습니다.

안타깝게도 Excel에는 데이터 범위에 사용되는 정렬 기준을 결정하는 기본 제공 방법이 없습니다. 이론적으로 각 열을 확인하고 오름차순 또는 내림차순인지 확인하는 매크로를 작성할 수 있습니다. 이렇게하면 단일 열이 정렬되었는지 여부를 알 수 있지만 반드시 전체 데이터 테이블이 해당 열을 기준으로 정렬되었음을 의미하지는 않습니다. 열이 정렬 된 순서이고 다른 사용자가 정렬을 수행 한 것은 우연 일 수 있습니다. 기둥. 2 차 및 3 차 정렬을 고려하기 시작하면 검사 작업이 더욱 까다로워집니다.

그러나 특정 열이 정렬되었는지 여부와 오름차순 또는 내림차순으로 정렬되는지 확인하기 위해 시도 할 수있는 한 가지가 있습니다. (기억하십시오 : 특정 열이 정렬에 사용 된 기본 열인지 여부는 알려주지 않으며 열이 정렬되었는지 여부 만 알려줍니다.)

매크로의 기본 개념은 열의 내용을 임시 워크 시트에 두 번 복사하는 것입니다. 예를 들어, F 열을 체크 아웃하려는 경우 매크로는 F 열을 임시 워크 시트의 A 열과 B 열로 복사합니다. 그런 다음 매크로는 B 열을 오름차순으로 정렬하고 A 열과 비교합니다. 정렬 된 열과 정렬되지 않은 열이 같으면 원래 열은 오름차순입니다. 그런 다음 B 열이 내림차순으로 정렬되고 비교가 다시 수행됩니다. 다시 말하지만, 열이 같으면 열은 내림차순입니다.

Sub TestIfSorted(i)

Dim CColumn as Number     Dim CSheet as String     Dim FlagSort as String

'Identify Current Column and Current Sheet     CColumn = i     CSheet = ActiveSheet.Name     FlagSort = ""



'Add a temporary sheet to test for sorting     Sheets.Add     ActiveSheet.Name = "TempSort"



'Copy CURRENT column to Columns A,B in Current Sheet     Sheets(CSheet).Select     Columns(CColumn).Select     Selection.Copy

Sheets("TempSort").Select     Range("A1").Select     ActiveSheet.Paste     Range("B1").Select     ActiveSheet.Paste     Application.CutCopyMode = False

'In Column C test for equality of Columns A/B     'If Sum in C1=0 then OK otherwise Col A<>Col B     Range("B2").Select     Selection.End(xlDown).Select     Bottom = ActiveCell.Row     Range(Cells(2, 3), Cells(Bottom, 3)).Select     Selection.FormulaArray = "=IF(RC[-2]=RC[-1],0,1)"

Range("C1").Select     ActiveCell.FormulaR1C1 = "=SUM(R[1]C:R[6535]C)"



'Sort Column B--Ascending - See if c1=0     Columns("B:B").Select     Selection.Sort Key1:=Range("B2"), Order1:=xlDescending, _       Header:=xlYes, OrderCustom:=1, MatchCase:=False, _       Orientation:=xlTopToBottom, DataOption1:=xlSortNormal     If Cells(1, 3).Value = 0 Then FlagSort = "Ascending"



'Sort Column B--Descending - See if c1=0     Columns("B:B").Select     Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, _       Header:=xlYes, OrderCustom:=1, MatchCase:=False, _       Orientation:=xlTopToBottom, DataOption1:=xlSortNormal     If Cells(1, 3).Value = 0 Then FlagSort = "Descending"



If FlagSort = "Ascending" Then         'Color Header on original sheet yellow         Sheets(CSheet).Cells(1, CColumn).Interior.ColorIndex = 36     End If

If FlagSort = "Descending" Then         'Color Header on original sheet orange         Sheets(CSheet).Cells(1, CColumn).Interior.ColorIndex = 44     End If

'Delete temporary sheet     Sheets("TempSort").Select     ActiveWindow.SelectedSheets.Delete End Sub

원래 열이 오름차순인지 내림차순인지 확인되면 원래 워크 시트에서 열의 첫 번째 셀이 각각 노란색 또는 주황색으로 설정됩니다. 마지막으로 임시 워크 시트가 삭제됩니다.

이 매크로는 데이터 테이블의 각 열에 대해 한 번씩 호출되도록 수정할 수 있습니다. 전체 테이블에 대해 매크로를 실행하는 데 그렇게 오래 걸리지 않지만 개별 열이 오름차순 또는 내림차순으로 정렬되는지 여부에 대한 다채로운 표현을 제공합니다.

물론 이와 같은 매크로는 사소한 것이 아니므로 데이터 정렬 방법을 파악한 다음 처음부터 그런 방식으로 정렬하는 것이 더 쉬울 수 있습니다.

_ 참고 : _

이 페이지 (또는 ExcelTips 사이트의 다른 페이지)에 설명 된 매크로를 사용하는 방법을 알고 싶다면 유용한 정보가 포함 된 특별 페이지를 준비했습니다.

link : / excelribbon-ExcelTipsMacros [새 브라우저 탭에서 특별 페이지를 열려면 여기를 클릭하세요].

_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.

이 팁 (2395)은 Microsoft Excel 97, 2000, 2002 및 2003에 적용됩니다.