- ベストアンサー
マクロで日付を
大変お世話になります。 早いうちに仕上げたいのでこの場をかりさせていただきます。 たとえば、A1~A10に日付が入力されています。 その中から、 ・過去の日付のもの(今日も含む) ・一番古い日付のもの を拾ってメッセージボックスを出したいんですが、 なかなかできません。 教えていただきたいです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。Wendy02です。 >基礎がない? 質問するしないに関わらず、出来る限り、段階的に、自分の中で情報を集め溜めていくことだと思います。僭越かもしれませんが、私のやってきたことと同じこと道を歩んでいる方のような気がしました。 最初は、あまり難しいものには手を出さないほうがよいです。勉強の時は、分からないものはそのままにして、ともかく、全体的に一巡してみることですね。また、Shapes (オートシェイプ)は、本当は、マクロで行うと、まだ底知れないむつかしさがあります。 それと、ワークシート ←→ VBAという行き来するものは難しいです。最初は、VBAだけで処理するものをやってみると、やってみて不思議に楽です。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 それは、単に、Min を出せばよいのではありませんか? 最初から、マクロという手もないわけではありませんが、そのためには、ループを使わなくてはなりません。 Sub OldDateFind() Dim rng As Range Dim myDat As Double Dim myFormat As String Set rng = ActiveSheet.Range("A1:A10") myFormat = rng.Cells(1).NumberFormatLocal '書式を取得 If WorksheetFunction.Count(rng) > 0 Then myDat = WorksheetFunction.Min(rng) End If MsgBox Format$(myDat, myFormat) Set rng = Nothing End Sub 本来は、「書式を取得」などは、キメウチで、Format の中で決めてしまってよいです。 If の条件文も必ずしも必要ではありません。 本来、データが分かりきっている場合は、 whMin =WorksheetFunction.Min(Range("A1:A10")) Msgbox =Format(whMin,"yy/mm/dd") としても可能です。 p.s. 昨日のご質問、回答を書こうとしたら締められてしまったので、こちらに書いておきます。 もうお分かりになったと思いますが、以下が余分です。 Selection.ShapeRange.Fill.Solid '塗りつぶし、という意味です。 記録マクロでは、その後に打ち消しの命令が入るけれども、それは、タイムラグがあって成立しますが、VBAからですと、プロパティへの設定になるので、うまく行かないようです。 それから、慣れてくると、その手のプロパティが多いものは省略してもよいものが多くありますが、無意味なようで入れなくてはならないものと、そのように意味のないものとがあります。それは、長い期間、失敗の中から覚えることが多いものです。正直なところ、今回のご質問よりも、遥かに難しいものです。
補足
いつもありがとうございます。 昨日はマクロの記録で書いた文の行を消したり有効にしたりしてたら、なんとか自分の思ったとおり動きました。なるほどご回答いただいた内容で理解が深まりました。 また、「Minを出す」、ご指摘のとおりでございました。 あと、指定セル範囲から、過去の日付だけをひろうのがいまだにできてません。 マクロの学習法が荒すぎる(基礎がない?)気がしてきましたが、また時間があればご回答いただきたいです。 よろしくおねがいします。
お礼
やっと、思い通り動きました。 いろいろありがとうございます。 エクセルはそうとう奥が深いですね。 ワードやパワーポイントなどもより覚えたいんですけど、エクセルでいっぱいいっぱいな印象が強くなってきました。 アドバイス参考にさせて頂きます。