ボブのワークシートには、左側にメンバー名があり、上部に月があります。グリッドの各セルに、メンバーが参加した会議が行われる日付を入力します。ボブは、誰が誰と会ったことがないかを一目で知る方法を探しています。

この問題の解決策に取り組むには、いくつかの方法があります。テーブルのデザインが柔軟な場合は、テーブルのレイアウト方法を変更することで、物事を「簡素化」できます。列に月を配置する代わりに、各列を会議の日付にすることができます。

次に、各セルには、その特定の日に会議に参加した人を示す何らかのインジケーター(数字または文字)を含めることができます。誰が誰と会っていなかったかを把握するのは比較的簡単なプロセスです:

。チェックしたいキーメンバーを選択し、データテーブルの一番上に移動します。

。キーメンバーの行でデータテーブルを水平方向に並べ替えて、キーメンバーが参加したすべての会議が左端の列に表示されるようにします。

。最初の3つの会議日に、主要メンバーを除く全員を垂直方向に並べ替えます。これらの3つの会議で主要メンバーに会ったすべての人が、データテーブルの上部、主要メンバーのすぐ下にいます。

。データテーブルを下に移動し、主要メンバーにまだ会っていない全員を選択して、次の3つの会議日に並べ替えます。

。すべての会議の日付が並べ替えられるまで、手順3と4を繰り返します。

。データテーブルの一番下に残っているすべての人(手順3と4で選択されていない人)は、キーメンバーに会ったことがありません。

テーブルの形式を変更できない場合は、マクロソリューションが必要です。マクロで使用できるアプローチはたくさんありますが、おそらく最も直接的な方法は次のとおりです。

Sub PeopleNotMet()

Dim rTable As Range     Dim rOutput As Range     Dim iCols As Integer     Dim iCol As Integer     Dim iRows As Integer     Dim iRow As Integer     Dim iCompRow As Integer     Dim sNotMet As String     Dim sMet As String

Set rTable = Worksheets("Sheet1").Range("A1").CurrentRegion     Set rOutput = Worksheets("Sheet2").Range("a1")

sNotMet = "X"

sMet = ""



Application.ScreenUpdating = False     With rTable         iRows = .Rows.Count         iCols = .Columns.Count                  .Columns(1).Copy         With rOutput             .PasteSpecial             .PasteSpecial Transpose:=True             Application.CutCopyMode = False             Range(.Offset(1, 1), .Offset(iRows - 1, _               iRows - 1)).Value = sNotMet             Range(.Offset(1, 1), .Offset(iRows - 1, _               iRows - 1)).HorizontalAlignment = xlCenter         End With     End With     With rTable.Cells(1)

For iRow = 1 To iRows - 1             For iCol = 1 To iCols - 1                 For iCompRow = 1 To iRows - 1                     If Not (IsEmpty(.Offset(iRow, iCol))) Then                         If Not (IsEmpty(.Offset(iCompRow, iCol))) Then                             If .Offset(iRow, iCol).Value = _                               .Offset(iCompRow, iCol).Value Then _                               rOutput.Offset(iRow, iCompRow).Value = sMet                         End If                     End If                 Next             Next         Next     End With

Set rTable = Nothing     Set rOutput = Nothing     Application.ScreenUpdating = True End Sub

このマクロは、いくつかのことを前提としています。まず、ボブの元のデータテーブルがシート1にあり、セルA1から始まると想定しています。次に、「誰が誰と会ったことがないか」というテーブルが、セルA1から始まるSheet2にあることを前提としています。これらの仮定が正しければ、マクロを実行すると、Sheet2で作成されたテーブルの左側に名前が表示され、上部に名前が表示されます。交差するセルには、何も含まれていない(人々が会ったことを意味する)か、大文字のX(会っていないことを意味する)が含まれます。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(2304)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。