• 締切済み

EXCEL VBA マクロ 日付

fumufumu_2006の回答

回答No.1

こんなのではどうでしょうか? 質問のパターンはクリアしたと思いますが、「その他、いろいろ」に引っかかったら"日付エラー"と表示します。 標準モジュールでsampleを実行してください。 '日付チェック(どうしても変換できない場合は"") Function dateCheck(str As String) As String Dim er As Integer On Error Resume Next str = DateValue(str) er = Err.Number On Error GoTo 0 'エラーなしなら終わり If er = 0 Then dateCheck = str Exit Function End If 'エラーならいろいろ試す str = StrConv(str, vbNarrow) '全角文を半角文字に変換 'Dim re As New RegExp Dim re As Object Set re = CreateObject("vbscript.regexp") re.Pattern = "\D" '数字以外 re.Global = True '全体に str = re.Replace(str, " ") '数字以外を空白に Set re = Nothing str = Trim(str) '余計な空白を削除 str = Replace(str, " ", "/") '空白を/に変換 If (InStr(str, "/") = 0) Then If (Len(str) = 8) Then '8桁数値(yyyymmdd)を変換 str = Format(str, "@@@@/@@/@@") ElseIf (Len(str) = 6) Then '6桁数値(yymmdd)を変換 str = Format(str, "@@/@@/@@") End If End If '最後に日付変換してみて、それでもエラーなら""を返す On Error Resume Next str = DateValue(str) er = Err.Number On Error GoTo 0 If er <> 0 Then str = "" ' End If dateCheck = str End Function Sub sample() Dim r As Long Dim s As String For r = 1 To Range("C1").End(xlDown).Row '日付チェック s = dateCheck(Range("C" & r)) If s = "" Then '""なら変換できなかった Range("D" & r) = "日付エラー" '日付としておかしい場合 Else '年月範囲内か? If (Year(DateValue(s)) = Range("A1")) And (Month(DateValue(s)) = Range("B1")) Then '範囲内なら表示 Range("D" & r) = s Else '範囲外なら"" Range("D" & r) = "" End If End If Next End Sub

関連するQ&A

  • エクセルマクロで日付検索について

    エクセルのマクロで日付を検索するマクロについて質問です。 ブックAのシート1のA列に A1 2017/3/13 A2 2017/4/1 A3 2017/4/19 A4 2017/5/16 A5 2017/7/17 A6 2017/9/5 というような日付が入っています。 ブックBのシート1のA1セルに2017/6/3と入力してマクロを実行した際に その日付に一番近い一つ前の日付を探し、見つけた日付のB列のセルを ブックBのシート1のA2セルに表示したいです。 今回の例であれば2017/6/3に対してブックAのシート1のA列はA4セルが当てはまり その当てはまったA4セルの1つ横のB4セルの内容をブックBのシート1のA2セルに表示するということです。 よろしくお願いします。

  • エクセル 日付比較のマクロ

    以下の処理をエクセルで自動で行おうと思っています。 ___________A列__________________B列 1行目 2008/9-2009/7______終了 2行目 2009/3/12 ____________実施中 3行目 2008/10-2009/8_____終了 4行目 2008/9~2009/7_____終了 5行目 2008/10~2009/8 ___終了 6行目 2009/9/1 ______________実施中 B列が「実施中」でA列が処理日の「翌月以降」の行と B列が「終了」でA列が処理日の「前月以前」の行を 削除するマクロを作成したい。 例:2009/8/10に処理する場合、    A1が 2008/9-2009/7の行は削除対象    A4が 2008/9~2009/7の行は削除対象 A6が2009/9/1の行は削除対象 なお、年月日指定、年月の期間指定(ハイフンと~が混在) の2つの形式がある。 処理日との日付比較をどのように行えば良いでしょうか?

  • エクセルVBA 日付の評価、大小を比べるには

    エクセルのセルに日付データーが入っています。 その値を取得して、他のセルに入っている日付と比べたいのですが、 日付データをどの形に変換して比べればいいか分かりません。 ___|_____A_________|_____B___________|______C_____ 1_|_2007/6/1__|__2007/7/1__|____________ 2_|_2007/7/1__|__2007/7/23_|____________ 例えば上の表があったとして、A列とB列にある日付を比べて、大きい 方をC列に記入するということをVBAでしようとするとき、セルに入って いるデーター形式をどの形に変換して評価すればいいでしょうか? 日付データーをシリアル値に変換する方法とかあるのでしょうか? どなたか教えていただけないでしょうか?

  • 【エクセルVBA】テキストを入れたら日付が別セルに

    まだまだ初心者ですが・・・ Dのセルにテキストを入れたら 同じ列のA、B、Cのセルに 順に西暦、月、日付が自動で入るようにするマクロを教えてください。 またDセルを消したら連動してそれらのセルもクリアされるようにしたいです。

  • Excelで日付セルをコピー&ペーストすると…

    Excel2000を使っています。 ある日付形式のセルを、他のBookにコピー&ペーストすると、年の値が変わってしまいます。 具体的には、2003/5/16だったものが、コピペ後のセルでは2007/5/16になります。 「形式を選択して貼り付け」でも、通常の「貼り付け」でも同様です。 いまは列Aに年、列Bに月/日というデータを作っており、 A   B 2003 5/16 という表示形式にしているので不都合はないのですが、 この列Aのセル値を列Bのセルの「年」として指定する方法はありますか? (列Aは標準形式になっています) 分かりにくい文章で申し訳ありませんが、ご存知の方教えてください。

  • 日付に絡むマクロの作り方

    エクセルのマクロ初心者です。 以下のようなデータがあり、 テキストボックスで任意の商品を指定し、 その商品と同じ日付のデータを抽出する操作をしたいです。 A列が商品名、B列が時間、C列が備考欄です。 データ数は月によりランダムですが1000程度あります。 A列   B列        C列 商品A 2011/5/1/12:00 関東 商品B 2011/5/2/2:30 北陸 商品C 2011/5/1/18:15 近畿 (商品Aと入力すると・・・) A列   B列        C列 商品A 2011/5/1/12:00 関東 商品C 2011/5/1/18:15 近畿 (商品Aと同じ5月1日のデータ(商品C)を抽出) DAY関数で日付だけ引用してなんとかやってみようと思いましたが、 私の現状の技量ではできませんでした。 まだVBAは参考書のものをコピーして使い、 基本的に「マクロの記録」で操作を覚えさせて用いているレベルなので 初歩的な質問で申し訳ありません。 詳しい方、エッセンスだけでもご教授ください。 不明点がありましたら補足いたします。

  • エクセルVBAマクロ検索について

    エクセルで検索してフラグを立てるマクロを教えてください。 A列  B列   C列   D ・・・・・ NO.  日付1  日付2  というリストがあり、A列からNOを検索してB列に日付のフラグを立てる作業をしたいのですが、 まず日付を入力するボックスで設定させてから、A列のIDを検索し、 該当IDのB列にその日付をフラグ入力させるというものです。 このときフラグ入力された該当IDのある列が表示されるようにします。 もしも既に日付フラグが立っているものがあれば、「重複です」等のメッセージボックスが出るか、 またはC列に新たな日付フラグが立つようにしたいです。 それと、上記マクロでA列を参照してB列にフラグという内容を違う列に変える場合(同類の違うリストでもこのマクロを活用したいため)、参照列とフラグ列はマクロでどこを直せばいいのか教えていただけると助かります。 いろいろ自力で調べては見たのですが、知識不足でお力を貸していただけると幸いです。 よろしくお願いいたします。 

  • エクセルマクロを教えてください

    エクセル2003を使用しています。ブックに1シートあります。シート名は「C3」セルに入力してある日付にしますが、シート上の表示形式は「平成20年1月」となっているところをシート名は「08-01」にします。その後シートを11枚コピーし、それぞれのシートの「C3」セルに年月を入力し、シート名を「08-02」「08-03」・・・「08-12」としたいのですが、うまくいきません。 マクロに詳しい方のご指導をお願いいたします。

  • エクセルで日付から曜日を求めたい

    A1のセルに年月が 2012年6月 A7のセルに日付が 1 とデータが入っています。 B7のセルに曜日を求めたいと思っていますが、式はどう書くのでしょうか?

  • エクセル 日付に関する質問

    エクセルでの質問です。   5/25 26 27 28 29 30 31 6/1 2 3 4 5 上記のようにしたいです。 連続する日付です。 月が替わった時だけ、セルの書式設定-表示形式-日付-種類が“3/14”になる様ににしたいです。 それ以外は、日にちだけにしたいです。(“d”) 一番初めのセルは、手入力します(例)5/25 右隣のセルは、"a+1" として右にドラックします。 よろしくお願いします。