『日付の一覧から一番古い日付を別シートに反映する方法』(VBA初心者) シート2枚目にランダムに記載されている日付の一覧の中から、一番 古い日付をシート1枚目に転記する方法を教えて頂けないでしょうか? 現在以下の通り記載しているのですが、必ずエラーが出てしまいます。 これらを元にVBAでスケジュール表の作成をしたいので、VBAのみの方法を 教えて下さい。 ----- '変数の宣言 Dim Cday As Date 'カレンダー開始日 Dim Eday As Date 'カレンダー終了日 Dim cRange As Date 'カレンダー範囲 'カレンダー開始日の取得 Sheets("sheet2").Select Range("A:E").Select cRange = Selection.Value Cday = WorksheetFunction.Min(cRange) ---- cRange は Variant で宣言しないと配列で受け取れません。 また、Selectが何箇所かありますがSelectする必要はありません。 対象の範囲に未入力のセルがあると求める結果は得られません。 (やっちん) ---- MINワークシート関数を使用しているので、 Dim cRange As Range Set cRange = Selection が妥当。 ただし、提示された範囲に対してのMIN関数の 使用が妥当かどうかは疑問。(他の数値がないことが前提) (みやほりん)(-_∂)b。 ---- やっちんさん、みやほりんさんありがとうございます! 一番古い日付を引っ張るのにMIN関数しか思いつかなかったのですが、お二人の指摘する「空白セル」があっても対応出来るような、いい方法はありますか? 色々と申し訳ありませんが教えていただけると助かります。 ---- 私の一回目の投稿では勘違いがあったので修正しました。 cRangeをRange型で宣言する場合では A:Eの範囲に日付が入力されており、数値とみなされるものが日付だけなら Cday = WorksheetFunction.Min(cRange) は有効。空白・文字列は無視されます。   こちらの検証ではVariant型で格納すると、リテラル値(日付を返す式)で格納。 直接には数値とみなされず、 Cday = WorksheetFunction.Min(cRange) では対象範囲に全て日付データがあっても常に「0」が返る結果になりました。 (みやほりん)(-_∂)b ---- みやほりんさんの仰るように全て日付が入力された範囲をVarintに格納しても MINで最小値は返ってきませんね。ばらでMINの引数に入れると大丈夫なのに不思議。 ということで、最初に私が載せた方法は×でした。ごめんなさい。 (やっちん) ---- えっと、以下で良いのでしょうか。 Sub Test() '変数の宣言 Dim MyRange As Range Set MyRange = Sheets("Sheet2").Range("A1:C100") MyDay = Format(Application.Min(MyRange), "YYYY/M/D") MsgBox (MyDay & "です。") End Sub (川野鮎太郎)