プロが教える店舗&オフィスのセキュリティ対策術

いつも大変お世話になっています。
お知恵を貸していただければと思い質問させていただきます。
なお、マクロ作成についてはほぼ初心者です。

マクロ上で変数にもたせた日付が、
エクセルシート上にある「祝日マスタ」シートの中に
含まれているかをチェックするマクロを組んだところ、
変数には「2018/1/23」と代入されたとき、
2018年1月23日は祝日ではないため、「祝日マスタ」シートには
存在しないのですが、実際には祝日と見なされてしまいます。

不思議に思いいろいろ調査したところ、
同じ「祝日マスタ」シートに存在する「2018/11/23(勤労感謝の日)」が入力された、
セルを消したところ、マクロを動かすと祝日とみなされなくなりました。

さらに、「2018/2/23」についても「祝日マスタ」には存在しないものの
祝日とみなされてしまいましたが、
同様に「2018/12/23(天皇誕生日)」が入力されたセルを消すと、
祝日とみなされなくなりました。

どうしてこのような現象が起きてしまうのでしょうか。
また、回避策についてご教授願えればと思います。

どうぞよろしくお願いいたします。

<参考>下記のような記述をしてます(抜粋)
Dim Hiduke As Date
Dim FoundCell As Range
Dim flg as integer

Set FoundCell = ThisWorkbook.Worksheets("祝日マスタ").Range("A:A").Find(What:=Hiduke, LookIn:=xlValues)
If FoundCell Is Nothing Then
flg = 0 '祝日ではない
Else
flg = 1 '祝日である
End If

※「祝日マスタ」シートにはA列に祝日が並べられています。(日付型)

<環境等>
Windows7 Home Edition
Microsoft Excel 2010

A 回答 (2件)

重要な所を抜粋されているので検証は出来ませんが。



Dim Hiduke As Date

の後に変数:Hiduke にどのように値をセットしているのか解りませんが、
仮に文字列を日付型に変換しているとしたら、

Hiduke = CDate("2018/11/10")

~ .Find(What:=Hiduke, LookIn:=xlFormulas, LookAt:=xlWhole)

こんな感じになるかもですね。
セルの値を変数に代入しているのなら、上の代入式は無視して下さい。

あとFind関数ではなくFindメソッドですね。
日付検索は結構昔から悩まれているみたいで、その時のメモを見て回答しました。
今の物に使えなかったらごめんなさい。
    • good
    • 1
この回答へのお礼

迅速なご回答ありがとうございました。
教えていただきました方法を試したところ、
無事に正しく動作するようになりました。

また、関数ではなくメソッドという呼び方
なのは知りませんでした。覚えておきます。

重ね重ね本当にありがとうございました。

お礼日時:2018/01/06 12:38

こんにちは!



VBAでシリアル値を検索する場合は注意が必要です。
セルの表示形式等によって検索できない場合があります。
お使いのバージョンがExcel2010というコトなので、

>・・・Find(What:=DateValue(Hiduke), LookIn:=xlFormulas, lookat:=xlWhole)

としてみてはどうでしょうか?
表示形式等に左右されず判断できると思います。

※ 余計なお世話かもしれませんが、
「flg」 の宣言の型は Boolean型がいいかもしれません。
(TRUEかFALSEのどちらかが返ります)m(_ _)m
    • good
    • 1
この回答へのお礼

迅速なご対応ありがとうございました。
教えていただきました方法で無事に動作できました。

フラグについては今後Boolean型を使っていこうと思います。
重ね重ね本当にありがとうございました。

お礼日時:2018/01/06 12:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!