同僚が、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に適用されます。