Anitaには、10,000行を超えるワークシートがあります。各行は個別の契約を表します。各契約には、開始日(列A)と終了日(列B)があります。彼女は列C、D、Eなどにリストする方法を必要としています。

契約の対象となる個々の月。たとえば、列Aに2017年7月1日が含まれ、列Bに2017年9月30日が含まれる場合、列Cには7月17日、列Dには8月17日、列Eには9月17日が含まれる必要があります。使用する式はすべて契約に対応する必要があります。かなり異なるかもしれない長さ。

このようなタスクを実行するには、いくつかの方法があります。各契約の開始月や月数などを指定するいくつかの中間列を使用することは可能ですが、そのような中間列は必要ないことがわかります。たとえば、契約が2行目から始まると仮定すると、セルC2に次の数式を配置できます。

=TEXT(A2,"mmm yy")

次に、セルD2から始めて、次の数式を配置できます。

=IF(DATE(YEAR($A2),MONTH($A2)+COLUMNS($D2:D2), DAY($A2))>$B2,"",TEXT(DATE(YEAR($A2),MONTH($A2)

+COLUMNS($D2:D2),DAY($A2)),"mmm yy"))

これは1つの数式であり、数式を含むセルの位置と契約開始日を使用して、基本的にその開始月からのオフセット月を計算します。数式は、すべての月と年を表示するために必要な限り、右にコピーできます(列E、F、Gなど)。

この式の1つの欠点は、契約の終了日が契約の開始日よりも前の月の場合、先月が表示されないことです。したがって、契約が2017年6月12日に開始し、2018年2月5日に終了する場合、先月(2月)は数式で表示されません。代わりに、セルC2で次の数式を使用して、必要に応じて右にコピーすることができます。

=IF(DATE(YEAR($A2),MONTH($A2)+COLUMN()-2,0)

>DATE(YEAR($A2),MONTH($B2)+1,0),"",TEXT(DATE (YEAR($A2),MONTH($A2)+COLUMN()-2,0),"mmm yy"))

この式は、それが存在する列にも依存し、それらを使用して契約開始日からのオフセットを計算します。契約の開始日と終了日の関係に関係なく、式は問題なく機能します。

列の配置に依存したくない場合は、別のアプローチをとることができます。次の数式をセルC2に配置します:

=(A2)

次に、セルD2に次の数式を配置します:

=IF($B2>C2,EOMONTH(C2,1),"")

D2の数式を必要な数のセルの右側にコピーし、それらすべてのセル(C2とD2を含む)を月と年のみを表示する日付としてフォーマットします。式はB2(契約終了日)を調べて、C2より大きいかどうかを確認します。そうである場合、数式は連続した翌月の最終日のシリアル番号を返します。そうでない場合は、空白( “”)が返されます。

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

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