メインコンテンツへスキップ

Kutools for Office — 1つのスイート、5つのツールで、もっと多くのことを成し遂げましょう。

特定の日付範囲(2つの日付間)で最大値または最小値をExcelで見つけるにはどうすればよいですか?

Author Siluvia Last modified

日々のデータ分析、特にトランザクション記録や時系列データを扱う場合、特定の期間内に発生する最大値または最小値を特定する必要がよくあります。例えば、以下スクリーンショットに示すような表があり、2016/7/1から2016/12/1までの2つの日付間での最大値または最小値を決定したいとしましょう。これは、特定の期間に関するレポートを作成したり、月ごとのパフォーマンスを比較したり、データのピークや底を追跡する際によく求められる要件です。この記事では、Excelの数式、VBAコード、および組み込み機能を使用して、迅速かつ正確に必要な値を抽出するためのいくつかの実用的な解決策を紹介します。

A screenshot showing an Excel table with dates and values to calculate max or min in a date range


配列数式を使用して特定の日付範囲内の最大値または最小値を見つける

簡単な方法の一つは、Excelで配列数式を使用することです。これにより、複数の基準に基づいて計算を行うことができます。たとえば、日付がある特定の範囲内にあるかどうかを確認できます。この方法は中規模のデータや、数式入力に慣れているユーザーに適しています。

A列(A5:A17)に日付がリストされ、対応する値がB列(B5:B17)にあり、開始日と終了日がそれぞれセルB1およびD1に入力されているとします。

結果を表示したい空白のセルを選択してください(例:E2)。

2016/7/1から2016/12/1の間の最大値を見つける

選択したセルに次の数式を入力してください。編集後、Enterではなく、Ctrl + Shift + Enterを押して、Excelがこれを配列数式として認識できるようにします:

=MAX(IF((A5:A17<=$D$1)*(A5:A17>=$B$1),B5:B17,""))

この数式は、どの日付があなたの開始日と終了日の間に該当するかをチェックし、一致する行の値のみを考慮して最大値を計算します。

A screenshot showing the result of finding the max value within a date range using an array formula in Excel

2016/7/1から2016/12/1の間の最小値を見つける

同じ日付範囲内で最小値を見つけるには、同様のアプローチを使用します。次の数式を入力し(再度、Ctrl + Shift + Enterで確定)、

=MIN(IF((A5:A17<=$D$1)*(A5:A17>=$B$1), B5:B17, ""))

この数式も同様に動作しますが、日付条件に一致する最小値を返します。

A screenshot showing the result of finding the min value within a date range using an array formula in Excel

注意:

  • 上記の例では、A5:A17は日付を含む範囲、$B$1は開始日、$D$1は終了日、B5:B17は評価したい値の範囲です。これらの参照を実際のデータに合わせて調整してください。
  • 参照する2つの範囲が同じ長さであることを確認してください。そうしないと、数式がエラーを生成する可能性があります。
  • 日付エントリがテキストではなく日付としてフォーマットされていることを再確認してください。そうでない場合、数式が意図通りに動作しないことがあります。

ヒント:

  • Office 365やExcel 2021以降を使用している場合は、よりシンプルな条件ベースの計算のためにMAXIFSおよびMINIFS関数を使用できます。
  • 数式が予期せず0または空白を返す場合、日付範囲が利用可能なデータ日付と重複しているか確認し、見過ごした空白セルがないか確認してください。

VBAコード:指定された日付範囲内の最大値または最小値を自動的に見つける

大規模なデータセットを扱うユーザー、このタスクを頻繁に繰り返す必要があるユーザー、または報告書作成における自動化を探しているユーザーにとって、VBAマクロソリューションは選択した日付範囲内の最大値または最小値を効率的に見つけられます。VBAを使用すると、ユーザーに適切な範囲を選択させたり、毎回日付を設定したりでき、ダイナミックなアプリケーションや高度なワークフロー統合に最適です。

開発 > Visual Basicに移動します。表示されるVBAエディタウィンドウで、挿入 > モジュールをクリックし、新しいモジュールに以下のコードをコピーして貼り付けます。

Sub FindMaxMinInDateRange_Robust()
    Dim ws As Worksheet
    Dim dateRange As Range, valueRange As Range
    Dim startCell As Range, endCell As Range
    Dim startDate As Date, endDate As Date
    Dim i As Long
    Dim d As Date, v As Variant
    Dim hasHit As Boolean
    Dim maxV As Double, minV As Double
    Const TITLE As String = "KutoolsforExcel"
    
    On Error GoTo FailFast
    
    Set ws = ActiveSheet
    
    
    Set dateRange = Application.InputBox("Select the DATE range:", TITLE, Type:=8)
    If dateRange Is Nothing Then Exit Sub
    Set valueRange = Application.InputBox("Select the VALUE range (same rows as date range):", TITLE, Type:=8)
    If valueRange Is Nothing Then Exit Sub
    
    If dateRange.Rows.Count <> valueRange.Rows.Count Then
        MsgBox "Date range and value range must have the SAME number of rows.", vbExclamation, TITLE
        Exit Sub
    End If
    
   
    Set startCell = Application.InputBox("Select START date cell:", TITLE, Type:=8)
    If startCell Is Nothing Then Exit Sub
    Set endCell = Application.InputBox("Select END date cell:", TITLE, Type:=8)
    If endCell Is Nothing Then Exit Sub
    
    If Not IsDate(startCell.Value) Or Not IsDate(endCell.Value) Then
        MsgBox "Start/End cell must contain valid dates.", vbExclamation, TITLE
        Exit Sub
    End If
    
    startDate = CDate(startCell.Value)
    endDate = CDate(endCell.Value)
 
    If startDate > endDate Then
        Dim tmp As Date
        tmp = startDate: startDate = endDate: endDate = tmp
    End If
    

    For i = 1 To dateRange.Rows.Count
        If IsDate(dateRange.Cells(i, 1).Value) Then
            d = CDate(dateRange.Cells(i, 1).Value)
            If d >= startDate And d <= endDate Then
                v = valueRange.Cells(i, 1).Value
                If IsNumeric(v) And Not IsEmpty(v) Then
                    If Not hasHit Then
                        maxV = CDbl(v): minV = CDbl(v)
                        hasHit = True
                    Else
                        If CDbl(v) > maxV Then maxV = CDbl(v)
                        If CDbl(v) < minV Then minV = CDbl(v)
                    End If
                End If
            End If
        End If
    Next i
    
    If hasHit Then
        MsgBox "Max value in range: " & maxV & vbCrLf & _
               "Min value in range: " & minV, vbInformation, TITLE
    Else
        MsgBox "No rows matched the date range (or values were non-numeric).", vbExclamation, TITLE
    End If
    Exit Sub

FailFast:
    MsgBox "Something went wrong: " & Err.Description, vbExclamation, TITLE
End Sub

2. マクロを実行するには、 Run button ボタンをクリックします(または F5を押します)。日付範囲と値範囲を選択し、開始日と終了日を入力するよう指示に従います。指定した日付範囲の最大値および最小値がダイアログボックスに表示されます。

ヒント:

  • 選択された日付範囲と値範囲が同じ行数を持ち、互いに直接対応していることを確認してください。
  • このアプローチは、膨大なリストを処理したり、変更する基準に基づいて反復的な最大/最小計算を自動化する際に特に役立ちます。
  • 空または無効な範囲が選択されている場合、または日付入力が正しくフォーマットされていない場合、コードが有効な結果を生成できない場合があります。実行前に選択内容を再確認してください。

その他の組み込みExcelメソッド:ピボットテーブルを使用して日付範囲別の最大/最小をフィルタリングおよび表示する

数式やコードを使いたくない場合、Excelのピボットテーブル機能を利用すると、インタラクティブで数式不要の方法でデータを日付でフィルタリングし、最大値や最小値などのサマリー値を表示できます。このソリューションは、データを探索したり、レポートを作成したり、グラフィカルインターフェースを使って簡単に基準を調整したりする必要があるユーザーに適しています。

表(日付と値を含む)を選択し、挿入タブに行き、ピボットテーブルをクリックします。

ピボットテーブルの作成ダイアログで、ピボットテーブルを配置したい場所を選択し、OKをクリックします。

ピボットテーブルフィールドペインで、日付フィールドを「行」エリアにドラッグし、最大値または最小値を見つけたい値フィールドを「値」エリアにドラッグします。デフォルトでは合計が表示されます。値フィールドをクリックし、「値フィールドの設定」を選んで、最大値または最小値に変更します。

4. 特定の日付範囲でフィルタリングするには、日付 フィールドの行ラベルのドロップダウンをクリックし、日付フィルター > 「指定範囲内...」 を選択し、開始日と終了日を指定(例:2016/7/1 から 2016/12/1)してOK をクリックします。

ピボットテーブルは、指定した範囲内の各日付の最大値または最小値を表示します。範囲全体で単一の最大値または最小値が必要な場合は、さらにフィルタリングするか、サマリー結果を目視でスキャンすることができます。

注意:

  • 日付列のすべてのセルが実際の日付(テキストではない)であることを確認してください。形式が混在していると、フィルターが行を見逃す可能性があります。
  • 元のデータが変更された場合、ピボットテーブルを右クリックし、「更新」を選択して結果を更新します。
  • レイアウトによっては、Excelが日付を月/四半期/年ごとにグループ化することがあります。必要に応じて、ピボットテーブル内の日付を右クリックし、「グループ解除」(または「グループ...」で目的のレベルを設定)を選択します。
  • 非常に大きなデータセットの場合、ピボットテーブルを新しいワークシートに配置することで可読性とパフォーマンスが向上します。

ヒント:

  • 日付フィールドのスライサー(ピボットテーブル解析 > スライサーの挿入)を追加して、範囲をインタラクティブに変更します。
  • フィルタリングされた範囲全体で単一の最大/最小が必要ですか?フィルタリング後に値列を並べ替えたり、もう1つの値フィールドを追加して最大値/最小値に切り替えます。
  • ピボットチャートと組み合わせて、フィルタに連動して更新される視覚的なサマリーを作成します。

この方法は、手動での数式入力を避け、動的な操作を可能にします—プレゼンテーションやマルチユーザーシナリオに最適です。高度にカスタマイズされた出力や多くのシートにわたるバッチ自動化が必要な場合は、数式またはVBAアプローチを検討してください。


関連記事:

最高のオフィス業務効率化ツール

🤖 Kutools AI Aide:データ分析を革新します。主な機能:Intelligent Executionコード生成カスタム数式の作成データの分析とグラフの生成Kutools Functionsの呼び出し……
人気の機能重複の検索・ハイライト・重複をマーキング空白行を削除データを失わずに列またはセルを統合丸める……
スーパーLOOKUP複数条件でのVLookup複数値でのVLookup複数シートの検索ファジーマッチ……
高度なドロップダウンリストドロップダウンリストを素早く作成連動ドロップダウンリスト複数選択ドロップダウンリスト……
列マネージャー指定した数の列を追加列の移動非表示列の表示/非表示の切替範囲&列の比較……
注目の機能グリッドフォーカスデザインビュー強化された数式バーワークブック&ワークシートの管理オートテキスト ライブラリ日付ピッカーデータの統合セルの暗号化/復号化リストで電子メールを送信スーパーフィルター特殊フィルタ(太字/斜体/取り消し線などをフィルター)……
トップ15ツールセット12 種類テキストツールテキストの追加特定の文字を削除など)50種類以上のグラフガントチャートなど)40種類以上の便利な数式誕生日に基づいて年齢を計算するなど)19 種類の挿入ツールQRコードの挿入パスから画像の挿入など)12 種類の変換ツール単語に変換する通貨変換など)7種の統合&分割ツール高度な行のマージセルの分割など)… その他多数
Kutoolsはお好みの言語で利用可能 ― 英語、スペイン語、ドイツ語、フランス語、中国語、その他40以上の言語に対応!

Kutools for ExcelでExcelスキルを強化し、これまでにない効率を体感しましょう。 Kutools for Excelは300以上の高度な機能で生産性向上と保存時間を実現します。最も必要な機能はこちらをクリック...


Office TabでOfficeにタブインターフェースを追加し、作業をもっと簡単に

  • Word、Excel、PowerPointでタブによる編集・閲覧を実現
  • 新しいウィンドウを開かず、同じウィンドウの新しいタブで複数のドキュメントを開いたり作成できます。
  • 生産性が50%向上し、毎日のマウスクリック数を何百回も削減!

全てのKutoolsアドインを一つのインストーラーで

Kutools for Officeスイートは、Excel、Word、Outlook、PowerPoint用アドインとOffice Tab Proをまとめて提供。Officeアプリを横断して働くチームに最適です。

Excel Word Outlook Tabs PowerPoint
  • オールインワンスイート — Excel、Word、Outlook、PowerPoint用アドインとOffice Tab Proが含まれます
  • 1つのインストーラー・1つのライセンス —— 数分でセットアップ完了(MSI対応)
  • 一括管理でより効率的 —— Officeアプリ間で快適な生産性を発揮
  • 30日間フル機能お試し —— 登録やクレジットカード不要
  • コストパフォーマンス最適 —— 個別購入よりお得