特定の日付範囲(2つの日付間)で最大値または最小値をExcelで見つけるにはどうすればよいですか?
日々のデータ分析、特にトランザクション記録や時系列データを扱う場合、特定の期間内に発生する最大値または最小値を特定する必要がよくあります。例えば、以下スクリーンショットに示すような表があり、2016/7/1から2016/12/1までの2つの日付間での最大値または最小値を決定したいとしましょう。これは、特定の期間に関するレポートを作成したり、月ごとのパフォーマンスを比較したり、データのピークや底を追跡する際によく求められる要件です。この記事では、Excelの数式、VBAコード、および組み込み機能を使用して、迅速かつ正確に必要な値を抽出するためのいくつかの実用的な解決策を紹介します。
➤ 配列数式を使用して特定の日付範囲内の最大値または最小値を見つける
➤ VBAコード:指定された日付範囲内の最大値または最小値を自動的に見つける
➤ その他の組み込みExcelメソッド:ピボットテーブルを使用して日付範囲別に最大値/最小値をフィルタリングおよび表示する
配列数式を使用して特定の日付範囲内の最大値または最小値を見つける
簡単な方法の一つは、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,""))
この数式は、どの日付があなたの開始日と終了日の間に該当するかをチェックし、一致する行の値のみを考慮して最大値を計算します。
2016/7/1から2016/12/1の間の最小値を見つける
同じ日付範囲内で最小値を見つけるには、同様のアプローチを使用します。次の数式を入力し(再度、Ctrl + Shift + Enterで確定)、
=MIN(IF((A5:A17<=$D$1)*(A5:A17>=$B$1), B5:B17, ""))
この数式も同様に動作しますが、日付条件に一致する最小値を返します。
注意:
- 上記の例では、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. マクロを実行するには、 ボタンをクリックします(または F5を押します)。日付範囲と値範囲を選択し、開始日と終了日を入力するよう指示に従います。指定した日付範囲の最大値および最小値がダイアログボックスに表示されます。
ヒント:
- 選択された日付範囲と値範囲が同じ行数を持ち、互いに直接対応していることを確認してください。
- このアプローチは、膨大なリストを処理したり、変更する基準に基づいて反復的な最大/最小計算を自動化する際に特に役立ちます。
- 空または無効な範囲が選択されている場合、または日付入力が正しくフォーマットされていない場合、コードが有効な結果を生成できない場合があります。実行前に選択内容を再確認してください。
その他の組み込みExcelメソッド:ピボットテーブルを使用して日付範囲別の最大/最小をフィルタリングおよび表示する
数式やコードを使いたくない場合、Excelのピボットテーブル機能を利用すると、インタラクティブで数式不要の方法でデータを日付でフィルタリングし、最大値や最小値などのサマリー値を表示できます。このソリューションは、データを探索したり、レポートを作成したり、グラフィカルインターフェースを使って簡単に基準を調整したりする必要があるユーザーに適しています。
表(日付と値を含む)を選択し、挿入タブに行き、ピボットテーブルをクリックします。
ピボットテーブルの作成ダイアログで、ピボットテーブルを配置したい場所を選択し、OKをクリックします。
ピボットテーブルフィールドペインで、日付フィールドを「行」エリアにドラッグし、最大値または最小値を見つけたい値フィールドを「値」エリアにドラッグします。デフォルトでは合計が表示されます。値フィールドをクリックし、「値フィールドの設定」を選んで、最大値または最小値に変更します。
4. 特定の日付範囲でフィルタリングするには、日付 フィールドの行ラベルのドロップダウンをクリックし、日付フィルター > 「指定範囲内...」 を選択し、開始日と終了日を指定(例:2016/7/1 から 2016/12/1)してOK をクリックします。
ピボットテーブルは、指定した範囲内の各日付の最大値または最小値を表示します。範囲全体で単一の最大値または最小値が必要な場合は、さらにフィルタリングするか、サマリー結果を目視でスキャンすることができます。
注意:
- 日付列のすべてのセルが実際の日付(テキストではない)であることを確認してください。形式が混在していると、フィルターが行を見逃す可能性があります。
- 元のデータが変更された場合、ピボットテーブルを右クリックし、「更新」を選択して結果を更新します。
- レイアウトによっては、Excelが日付を月/四半期/年ごとにグループ化することがあります。必要に応じて、ピボットテーブル内の日付を右クリックし、「グループ解除」(または「グループ...」で目的のレベルを設定)を選択します。
- 非常に大きなデータセットの場合、ピボットテーブルを新しいワークシートに配置することで可読性とパフォーマンスが向上します。
ヒント:
- 日付フィールドのスライサー(ピボットテーブル解析 > スライサーの挿入)を追加して、範囲をインタラクティブに変更します。
- フィルタリングされた範囲全体で単一の最大/最小が必要ですか?フィルタリング後に値列を並べ替えたり、もう1つの値フィールドを追加して最大値/最小値に切り替えます。
- ピボットチャートと組み合わせて、フィルタに連動して更新される視覚的なサマリーを作成します。
この方法は、手動での数式入力を避け、動的な操作を可能にします—プレゼンテーションやマルチユーザーシナリオに最適です。高度にカスタマイズされた出力や多くのシートにわたるバッチ自動化が必要な場合は、数式またはVBAアプローチを検討してください。
関連記事:
- Excelでテキスト文字列内の最初/最後の数字の位置を見つけるにはどうすればよいですか?
- Excelで毎月の最初または最後の金曜日を見つけるにはどうすればよいですか?
- Excelで最初、2番目、またはn番目の一致値を見つけるにはどうすればよいですか?
- Excelで最も頻度の高い値を持つ範囲内の値を見つけるにはどうすればよいですか?
最高のオフィス業務効率化ツール
🤖 | Kutools AI Aide:データ分析を革新します。主な機能:Intelligent Execution|コード生成|カスタム数式の作成|データの分析とグラフの生成|Kutools Functionsの呼び出し…… |
人気の機能:重複の検索・ハイライト・重複をマーキング|空白行を削除|データを失わずに列またはセルを統合|丸める…… | |
スーパーLOOKUP:複数条件でのVLookup|複数値でのVLookup|複数シートの検索|ファジーマッチ…… | |
高度なドロップダウンリスト:ドロップダウンリストを素早く作成|連動ドロップダウンリスト|複数選択ドロップダウンリスト…… | |
列マネージャー:指定した数の列を追加 |列の移動 |非表示列の表示/非表示の切替| 範囲&列の比較…… | |
注目の機能:グリッドフォーカス|デザインビュー|強化された数式バー|ワークブック&ワークシートの管理|オートテキスト ライブラリ|日付ピッカー|データの統合 |セルの暗号化/復号化|リストで電子メールを送信|スーパーフィルター|特殊フィルタ(太字/斜体/取り消し線などをフィルター)…… | |
トップ15ツールセット:12 種類のテキストツール(テキストの追加、特定の文字を削除など)|50種類以上のグラフ(ガントチャートなど)|40種類以上の便利な数式(誕生日に基づいて年齢を計算するなど)|19 種類の挿入ツール(QRコードの挿入、パスから画像の挿入など)|12 種類の変換ツール(単語に変換する、通貨変換など)|7種の統合&分割ツール(高度な行のマージ、セルの分割など)|… その他多数 |
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、PowerPoint用アドインとOffice Tab Proが含まれます
- 1つのインストーラー・1つのライセンス —— 数分でセットアップ完了(MSI対応)
- 一括管理でより効率的 —— Officeアプリ間で快適な生産性を発揮
- 30日間フル機能お試し —— 登録やクレジットカード不要
- コストパフォーマンス最適 —— 個別購入よりお得