並べ替え基準の決定(Microsoft Excel)
同僚が、27列に数百行のデータを含むワークシートを提供したとします。データの操作を開始する前に、データが以前にソートされているかどうかを知りたい場合があります。情報を知ることで、データを再利用する必要がなくなるだけでなく、同僚がデータを見る最も重要な方法であると感じたことについてのアイデアも得られます。
残念ながら、Excelには、ある範囲のデータに使用される並べ替え基準を決定するための組み込みの方法がありません。理論的には、各列をチェックして、昇順か降順かを確認するマクロを作成できます。これにより、その単一の列が並べ替えられたかどうかがわかりますが、必ずしもデータテーブル全体がその列で並べ替えられたことを意味するわけではありません。列が並べ替えられた順序であり、並べ替えが他の人によって行われたのは偶然かもしれません。カラム。二次および三次ソートを検討し始めると、チェックのタスクはさらに複雑になります。
ただし、特定の列が並べ替えられているかどうか、および昇順と降順のどちらで並べ替えられているかを判断するために試すことができることが1つあります。 (覚えておいてください:これは、特定の列が並べ替えに使用されたプライマリ列であったかどうかはわかりません。列が並べ替えられたかどうかだけがわかります。)
マクロの背後にある考え方は、列の内容を一時的なワークシートに2回コピーすることです。たとえば、列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
元の列が昇順か降順かが判別されると、元のワークシートの列の最初のセルがそれぞれ黄色またはオレンジ色に設定されます。最後に、一時ワークシートが削除されます。
このマクロは、データテーブルの列ごとに1回呼び出されるように変更できます。テーブル全体に対してマクロを実行すると、それほど時間はかかりませんが、個々の列が昇順または降順のどちらでソートされているかについて、カラフルな表現が提供されます。
もちろん、このようなマクロは簡単ではないので、データをどのように並べ替えるのかを理解し、最初からそのように並べ替える方が簡単な場合があります。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(2395)は、Microsoft Excel 97、2000、2002、および2003に適用されます。