[[20060407115307]] 『日付の一覧から一番古い日付を別シートに反映する』(VBA初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『日付の一覧から一番古い日付を別シートに反映する方法』(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

 (川野鮎太郎)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.