JoeはEOMONTH関数を頻繁に使用しますが、Excel 2007に移行してから、問題が発生しました。 JoeはAnalysisToolPakをアクティブにしており、最初はEOMONTH関数が機能します。ただし、ワークブックを保存して後で開くと、クリックするまでEOMONTH関数を含むセルは正常に表示されます。次に、数式バーに#N / Aが表示されます。数式が消えました。これが発生しても、AnalysisToolPakは引き続きアクティブです。これはすべての場合に発生するわけではありませんが、無視できないほど頻繁に発生します。また、ジョーには、ワークブックで同じ問題が発生している同僚がいます。

EOMONTHに関するこの問題は、Excelの新しいバージョン(Excel 2007以降)でEOMONTH関数に変更が加えられたために発生したようです。

以前のバージョンのExcel(Excel 2003以前)では、EOMONTHはAnalysisToolPakの一部でした。それ以降のバージョンのExcelでは、ToolPakは不要になりました。この関数はExcel自体の一部です。つまり、EOMONTHを使用するためにAnalysisToolPakをアクティブにする必要はありません。

これは問題につながります。以前のバージョンのExcelで作成されたブックがあり、それ以降のバージョンのExcelで互換モードを使用して開いた場合、ブックの数式が評価され、状況によっては、関数に使用される内部の「トークン」が更新されます。

ブックが保存されて元に戻されると、更新されたトークンがブックに保存され、ブックが再ロードされると、トークンはExcelが無効な関数として解釈するものを指すようになります。

マイクロソフトは、現時点では、このエラーについてナレッジベースに何も投稿していません。この問題は断続的であるように思われ(Joeが指摘したように)、4〜8回のオープン/編集/保存サイクルを経た後にのみワークブックに影響を及ぼします。

解決策は、ブックを開き、問題が明らかにならない場合は、[名前を付けて保存]を使用してブックをネイティブExcel形式で保存することです。

(まあ、Excel 2007からそれ以降のバージョンのExcelまでのExcel形式でネイティブです。)それ以降は互換モードが含まれないため、問題が再発することはありません。問題が明らかになった場合は、ブックを修正して再構築する必要があります。

ブックをExcelの現在のネイティブ形式で保存できない場合(プログラムを更新していない他のユーザーと作業するには、古いExcel形式を使用する必要がある可能性があります)、EOMONTH関数に依存しないことを検討する必要があります。 。代わりに、次のいずれかの式を使用してください。

=A1+31-DAY(A1+31)

=DATE(YEAR(A1),MONTH(A1)+1,1)-1

必要に応じて、独自のユーザー定義関数を作成して、月の最終日を計算できます。以下は1つのアプローチです:

Function LastOfMonth(Any_Date As Date) As Date     ' Returns the date of the last day of     ' the month of the passed date argument

LastOfMonth = DateAdd("d", -1, _       DateAdd("m", 1, Month(Any_Date) _       & "/1/" & Year(Any_Date)))

End Function

セル内の日付を参照するか、リテラルの日付を引用符で囲むことにより、関数に有効な日付を渡すようにする必要があります。セルB7に日付10/15/18が含まれているとすると、次の両方で同じ結果が返されます。

=LastOfMonth(B7)

=LastOfMonth("10/15/2018")

注:

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

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

このヒント(6613)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。