概要:このチュートリアルでは、Excelの数式を使用して、リスト内のアイテムの最後の出現箇所を見つける方法を学習します。
最近、私は会議の議題に取り組んでいました。
私はExcelに、人々のリストと彼らが「会議の議長」だった日付のリストを持っています。
また、リストに重複があるため、ある人が最後に「会議の議長」になったのはいつかを知る必要があります(つまり、ある人が何度も会議の議長を務めたことがあるということです)。
これは、最新の議長が再配置されないようにする必要があるためです。
そこで、Excel関数の魔法を使って仕事をすることにしました。
以下は最終結果です。ドロップダウンから名前を選択すると、リスト内でその名前が最後に出現した日付が表示されます。
Excel関数をよく理解している場合は、これを実行できるExcel関数がないことをご存知でしょう。ここで私たちは奇跡を起こさせます。
このチュートリアルでは、これを行うXNUMXつの方法を紹介します。
最後の出現を見つける-MAX関数を使用
リストの最後の値を返すExcelの数式は次のとおりです。
=INDEX($B$2:$B$14,SUMPRODUCT(MAX(行($A$2:$A$14)*($D$3=$A$2:$A$14))-1))
この式の仕組みは次のとおりです。
- MAX関数は、最後に一致した名前の行番号を見つけるために使用されます。たとえば、名前がGlenの場合、11行目にあるため、11が返されます。リストは1行目から始まるため、XNUMXが減算されます。したがって、Glenの最後の出現はリストの10です。
- SUMPRODUCTは配列数式を処理できるため、Control + Shift + Enterを使用する必要がないことを確認するために使用されます。
- INDEX関数を使用して、最後に一致した名前の日付を検索できるようになりました。
最後の出現を見つける-LOOKUP関数を使用する
同じ仕事をする別の式は次のとおりです。
=LOOKUP(2,1/($A$2:$A$14=$D$3),$B$2:$B$14)
この式の仕組みは次のとおりです。
- ルックアップ値は2です(理由がわかります。読み続けてください)
- ルックアップ範囲は1 /($ A $ 2:$ A $ 14 = $ D $ 3)です。一致する名前が見つかった場合は1を返し、それ以外の場合はエラーを返します。したがって、最終的には配列になります。例如,查找值為 Glen,數組將為 {#DIV/0!;#DIV/0!;1;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/ 0!;#DIV/0!;#DIV/0!;1;#DIV/0!;#DIV/0!;#DIV/0!}。
- XNUMX番目のパラメーター([result_vector])は、結果を与える範囲(この場合は日付)です。
この式が機能する理由は、LOOKUP関数が近似マッチング手法を使用しているためです。つまり、完全に一致するものが見つかった場合は返されますが、見つからなかった場合は、配列全体を最後までスキャンし、ルックアップ値よりも小さい次の最大値を返します。
この場合、ルックアップ値は2であり、配列では1またはエラーが発生します。したがって、配列全体をスキャンして、最後の1の位置(名前に最後に一致する値)を返します。
最後の発生を検索-カスタム関数(VBA)を使用
別の方法もお見せしましょう。
VBAを使用してカスタム関数(ユーザー定義関数とも呼ばれます)を作成できます。
カスタム関数を作成する利点は、使いやすさです。ほとんどの作業はVBAバックエンドで行われるため、毎回複雑な数式を作成することを心配する必要はありません。
簡単な数式を作成しました(VLOOKUP数式によく似ています)。
カスタム関数を作成するには、VBエディターでVBAコードが必要です。コードとそれをVBエディターに取り込む手順については後で説明しますが、最初にどのように機能するかを示します。
結果を与える式は次のとおりです。
= LastItemLookup($ D $ 3、$ A $ 2:$ B $ 14,2)
式はXNUMXつのパラメーターを取ります。
- 値を見つけます(これはセルD3の名前になります)
- 範囲を検索します(これは名前と日付の範囲になります– A2:B14)
- 列番号(これは結果が必要な列です)
数式を作成してVBエディターにコードを配置すると、他の通常のExcelワークシート関数と同じように使用できます。
式のコードは次のとおりです。
関数LastItemLookup(Lookupvalue As String、LookupRange As Range、ColumnNumber As Integer)Dim i As Long For i = LookupRange.Columns(1).Cells.Count To 1 Step -1 If Lookupvalue = LookupRange.Cells(i、1)Then LastItemLookup = LookupRange.Cells(i、ColumnNumber)Exit Function End If Next i End Function
このコードをVBエディターに配置する手順は次のとおりです。
- [開発者]タブに移動します。
- VisualBasicオプションをクリックします。これにより、バックエンドでVBエディターが開きます。
- VBエディターの[プロジェクトエクスプローラー]ペインで、コードを挿入するブック内の任意のオブジェクトを右クリックします。プロジェクトエクスプローラーが表示されない場合は、[表示]タブに移動し、[プロジェクトエクスプローラー]をクリックします。
- [挿入]に移動して、[モジュール]をクリックします。これにより、ワークブックのモジュールオブジェクトが挿入されます。
- コードをコピーしてモジュールウィンドウに貼り付けます。
これで、数式がワークブックのすべてのシートで利用できるようになります。
マクロが含まれているため、ブックを.XLSM形式で保存する必要があることに注意してください。また、この数式を使用するすべてのブックで使用できるようにする場合は、この数式を個人用マクロブックに保存するか、そこからアドインを作成できます。