ビジネス情報を追跡するためのワークシートを作成する場合、日付の範囲内のすべての金曜日を決定する必要がある場合があります。これを行う最良の方法は、ワークシートのデータと結果を表示する方法によって異なります。

列に日付のリストがある場合は、いくつかの異なるワークシート関数を使用して、それらの日付が金曜日であるかどうかを判別できます。

WEEKDAY関数は、引数として使用される日付の曜日に応じて、1から7までの数値を返します。

=WEEKDAY(A2)

A2の日付が金曜日の場合、この使用法は数値6を返します。この数式を日付の列の横にコピーすると、Excelのオートフィルター機能を使用して、平日が6(金曜日)の日付のみを表示できます。

Excelの条件付き書式設定機能を使用して、日付のリスト内のすべての金曜日を強調表示することもできます。次の手順に従ってください:

。日付のリストを選択します。

。リボンの[ホーム]タブが表示されていることを確認します。

。 [スタイル]グループの[条件付き書式]ツールをクリックします。 Excelは一連の選択肢を表示します。

。 [新しいルール]をクリックします。 Excelは、[新しい書式設定ルール]ダイアログボックスを表示します。

(図1を参照)

。ダイアログボックスの上部にある[ルールタイプの選択]領域で、[数式を使用してフォーマットするセルを決定する]を選択します。 (図2を参照)

。数式領域に次の数式を入力し、A2を手順1で選択したアクティブセルのアドレスに置き換えます。= WEEKDAY(A2)= 6。 [フォーマット]をクリックして、[セルのフォーマット]ダイアログボックスを表示します。

。必要に応じて金曜日を強調表示するようにフォーマットオプションを設定します。

。 [OK]をクリックして、[セルの書式設定]ダイアログボックスを閉じます。

。 [OK]をクリックします。

開始日と終了日に基づいて一連の金曜日を決定する場合は、一連の数式を設定してそれらを計算できます。

開始日がA2にあり、終了日がA3にあるとすると、次の式を使用して、最初の金曜日の日付を計算できます。

=IF(A2+IF(WEEKDAY(A2)<=6,6-WEEKDAY(A2),6)>A3, "",A2+IF(WEEKDAY(A2)<=6,6-WEEKDAY(A2),6))

この数式をセルC2に配置し、日付として書式設定すると、次の数式を使用して、範囲内の次の金曜日を決定できます。

=IF(C2="","",IF(C2+7>$A$3,"",C2+7))

この数式を多数のセルにコピーすると、A2とA3で指定された日付の範囲の金曜日のリストが表示されます。

金曜日を特定の日付範囲で実際に「プル」する場合は、マクロを使用する必要があります。これについては、いくつかの方法があります。この単純なマクロは、A2:A24の範囲のすべての日付を調べます。

金曜日の場合、日付はC2から始まる列Cにコピーされます。もちろん、その結果、C2から始まるリストには、金曜日の日付のみが含まれます。

Sub PullFridays1()

Dim dat As Range     Dim c As Range     Dim rw As Integer

Set dat = ActiveSheet.Range("A2:A24")

rw = 2     For Each c In dat         If Weekday(c) = vbFriday Then             Cells(rw, 3).Value = Format(c)

rw = rw + 1         End If     Next End Sub

必要に応じて、A2:A24参照を変更するだけでマクロによって検査される範囲を変更できます。また、rw(行)の値と3(列)の値を変更することで、日付の書き込み場所を変更できます。細胞は機能します。

開始日と終了日を操作したい場合は、マクロを変更して、日付をステップスルーすることができます。次のマクロは、開始日がセルA2にあり、終了日がセルA3にあることを前提としています。

Sub PullFridays2()

Dim dStart As Date     Dim dEnd As Date     Dim rw As Integer

dStart = Range("A2").Value     dEnd = Range("A3").Value

rw = 2     While dStart < dEnd         If Weekday(dStart) = vbFriday Then             Cells(rw, 3).Value = dStart             Cells(rw, 3).NumberFormat = "m/d/yyyy"

rw = rw + 1         End If         dStart = dStart + 1     Wend End Sub

マクロは引き続き金曜日を範​​囲から引き出し、C2から始まるリストに配置します。

別のマクロアプローチは、範囲内の特定の金曜日を返すユーザー定義関数を作成することです。以下はまさにそれを行います:

Function PullFridays3(dStartDate As Date, _                       dEndDate As Date, _                       iIndex As Integer)

Dim iMaxDays As Integer     Dim dFirstday As Date

Application.Volatile     If dStartDate > dEndDate Then         PullFridays3 = CVErr(xlErrNum)

Exit Function     End If

dFirstday = vbFriday - Weekday(dStartDate) + dStartDate     If dFirstday < dStartDate Then dFirstday = dFirstday + 7     iMaxDays = Int((dEndDate - dFirstday) / 7) + 1

PullFridays3 = ""

If iIndex = 0 Then         PullFridays3 = iMaxDays     ElseIf iIndex <= iMaxDays Then         PullFridays3 = dFirstday + (iIndex - 1) * 7     End If End Function

この関数は、ワークシートのセルで次のように使用します。

=PULLFRIDAYS3(A2,A3,1)

関数の最初の引数は開始日で、2番目の引数は終了日です。 3番目の引数は、指定された範囲内から返される金曜日を示します。 1を使用すると、最初の金曜日を取得し、2は2番目の金曜日を返します。3番目の引数に0を使用すると、関数は指定された範囲の金曜日の数を返します。指定された開始日が終了日よりも大きい場合、関数は#NUMエラーを返します。

注:

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

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

このヒント(8147)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。