[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『日付の一覧から一番古い日付を別シートに反映する方法』(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.