ここから本文です

Excel VBAで12月をカウントするとバグが起こります。

tok********さん

2014/8/1915:54:18

Excel VBAで12月をカウントするとバグが起こります。

こんにちは
今 2014/11/10,2014/12/1,2015/01/15, "空白"

という横並びの日付からMonth()で月の値を取得して
If Month() = 11 then a = a + 1
みたいな式を作っているのですが
何故か12月の月を取得すると
一気にaが13になってしまいます。

具体的言いますと
Dim r as rangeで
rは今”空白”のセルを指している状態なのに
If Month(r) = 12 then a = a + 1
この状態の時に何故かthenに行ってしまっている状態でした。
わけがわからなくなってきましたので
If r = "" Then Exit For
をつけてループを抜け出しましたが

これは一体どのような現象だったのでしょうか
前のセルの数値がまだ残っていたのでしょうか
まだ少し混乱しています。

補足回答頂き誠に感謝をしております

あの差し出がましいですが…
もしよろしければ対処方法をどのようにすれば回避できるか
とっかかりだけでもいいので教えていただけませんか?

ぱっと思いつたのが空白が+1するなら-1をすれば良いという方法ですが
今後変則的なパターンだと詰みそうですし…

閲覧数:
141
回答数:
2
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

por********さん

2014/8/1916:11:32

こんにちは。
r = empty
msgbox year(r) & "/" & month(r) & "/" & day(r)
としたら、結果は
1899/12/30
でした。
つまり、空白を扱う、ということは、1899/12/30ということになります。

仕様の範囲です

  • por********さん

    2014/8/1917:48:34

    >セルに0を入れて書式を日付に変えてるとわかります。
    結果
    0は、1900/1/0となり、month関数は1となります。
    12月とはなりません。

    シートの関数で扱う場合と、VBAコードで処理する場合で、動作が変化するので
    ご注意ください

  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2014/8/20 14:31:18

降参 返信誠に感謝しております。
Isdateは使えなかったのですがIsEmpty関数を思い出すことで
表が完成しました。
ありがとうございます。

ベストアンサー以外の回答

1〜1件/1件中

riv********さん

2014/8/1916:24:22

イミディエイトウインドで?Month(0)としてみてください
12と表示されるはずです。

日付は1900/1/1を1としてそこからの日数で表されています。
(ちなみに2016/8/19と入力して数値表示に書式を変えると42601となります。19001/1から数えて42601日目ということです)

なので0は1900/1/0であり1900/1/1の前日としてMonth関数の引数とされると12月と判定されることになります。
空白は0とみなされその月は12月となってしまうのです。

セルに0を入れて書式を日付に変えてるとわかります。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる