- ベストアンサー
エクセルで二つの日付のうち早い方を表示する方法
- エクセルで二つの日付のうち早い方を表示する方法を教えてください。
- 現在、セルA3にセルC2の日付の翌月26日を表示する式を入れていますが、追加でセルD2の日付の翌月26日も表示したいです。
- 二つの条件で、どちらか早い方の日付をセルA3に表示する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
こんにちは。 ご提示の記述では、VBAで処理されているようですが、やっている事はワーク シートのセルに関数式を手入力するのと変わらないようです。 それならば、わざわざVBAを使うまでもなく、セルに直接関数式を設定すれば 良いように思われます。 VBAで行うならば、Formulaプロパティに関数式を設定するよりも、VBA内の 判定及び計算により、日付を計算し、直接Valueプロパティに、計算した日付 を設定する方が自然なように思います。 注)上記はあくまでも私の個人的な感想ですので、あまりお気になさらないで 下さい。 というわけで本題です。 上記を踏まえて、 (1)ワークシートのセルに直接関数式を設定する場合 (2)VBAにて、セルに関数式を設定する場合 (3)VBAにて、内部で計算した日付をセルに設定する場合 の3パターンを作成してみました。 (1)セルに直接関数式を設定する場合 <A3に設定する数式> =IF(OR(ISNUMBER(C2)=FALSE,ISNUMBER(D2)=FALSE), IF(ISNUMBER(C2),DATE(YEAR(C2),MONTH(C2)+1,26), IF(ISNUMBER(D2),DATE(YEAR(D2),MONTH(D2)+1,26),"")), IF(DATE(YEAR(C2),MONTH(C2),1)<=DATE(YEAR(D2),MONTH(D2),1), DATE(YEAR(C2),MONTH(C2)+1,26),DATE(YEAR(D2),MONTH(D2)+1,26))) ※上記の数式は、表示の都合上複数行になっていますが、実際の入力では、 1行で記述して下さい。 <A3の書式(表示形式)> 【表示形式】タブの設定 ・分類 : ユーザー定義 ・種類 : ggg ee "年" m "月" d "日" <数式の補足> ・元になるC2およびD2の日付に対して、双方とも、翌月26日にする部分は 同じなため、日付の大小判定は、元の日付の【年月】で比較しています。 ・C2及びD2に日付(数値)が入力されていない場合を考慮して、エラー値が 表示されない対策をとっています。そのため、数式が長くなっています。 (もっと簡単な記述の仕方があるかもしれませんが。。。) 【例外処理】 1.C2のみに日付(数値)が入力されている場合 ⇒A3には、C2の日付の翌月26日の日付を表示 2.D2のみに日付(数値)が入力されている場合 ⇒A3には、D2の日付の翌月26日の日付を表示 3.C2とD2双方とも、日付(数値)でなかった場合 ⇒A3には、空白を表示 (2)VBAにて、セルに関数式を設定する場合 ・下記『■マクロソース』のリンク先ソースの関数「SelectDate1」をご覧下さい。 (3)VBAにて、内部で計算した日付をセルに設定する場合 ・下記『■マクロソース』のリンク先ソースの関数「SelectDate2」をご覧下さい。 注)上記3バターンに共通した注意事項 C2の日付とD2の日付に加減算する部分(翌月26日にする)が、それぞれ別々に 加減算した日付にする場合(C2には翌月10日、D2には翌月20日など)は、日付 の大小判定で参照する日付も、『加減算した後の日付』で大小判定を行うように 修正して下さい。 ■マクロソース(※下記リンク先参照) http://ideone.com/yfl2N 以上です。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルのシートの日付の「セルの値」は、日付シリアル値という正整数の値であることを知らないのでは。 1900年1月1日からその日までの序数(何番目の日であるか)を示している。 WEBででも「日付シリアル値」で照会して勉強のこと。 従って日付の前後は日付シリアル値の大小になる。セルのValueを大小比較し判定すれば良い。 VBAを使うらしいが、あくまでエクセルのVBAでエクセルのことを知って居ないと、良いプログラムは組めないのだ。
お礼
誠に ご指導ありがとうございます おっしゃる通りだと思います 勉強いたします。 コードはとっても勉強になりました。