Excel2007でCOUNTIFS前ゼロ否定条件
Excel2007 のCOUNTIFS関数での否定条件の
指定方法について教えてください。
VBAのマクロの中で
(略)
For i = 1 to 10
Cells(i, "B").Formula = "=COUNTIFS(" & "A1:A10, $C$" & i & ")"
Next i
のような形で COUNTIFSを利用しています。
COUNTIFSの条件に <>を使って否定条件を指定したいのですが、以下の
ように期待した動作になりません。
例
A B C D
1 '080 一般品 <>'080 =COUNTIFS(A1:A5,C1)
2 '020 一般品 <>一般品 =COUNTIFS(B1:B5,C2)
3 '040 一般品
4 '060 特別品
5 '080 一般品
セルC1の記述を変えた結果は以下の通りです。
C1 D1 備考
1) <>'080 5 3 が入ってほしい。
2) <>080 5 ' の有無で結果は変わらず。
'(シングルクォーテーション)は接頭辞で上記結果には無関係と理解。
3) "<>'080" 0 "<>'080" 全体を条件値として認識してしまう。
4) '080 2 当然
5) <='060 3 当然
ちなみに C2に <>一般品 と条件を設定すると D2には1と期待通りの値が入ります。
1)2) の結果から A列に記述されている'080と セルC1の式に書か
れた '080 が、なぜか別の値と評価され 結果 D1が 5 となっていると理解しています。
A列のシングルクォーテーションは削除、A列の書式を文字列とし
文字列"080"とIF関数で比較すると以下の結果でした。
A B B列の式
1 080 FALSE IF(A1<>"080",TRUE,FALSE)
2 020 TRUE IF(A2<>"080",TRUE,FALSE)
3 040 TRUE IF(A3<>"080",TRUE,FALSE)
4 060 TRUE IF(A4<>"080",TRUE,FALSE)
5 080 FALSE IF(A5<>"080",TRUE,FALSE)
Excelの「数式」メニュー -「ワークシート分析」-「数式の検証」で
C1セルに <>'080 、<>080、"<>'080" 、<='060 を指定した時、それぞれ
1) COUNTIFS(A1:A5,"<>'080")
2) COUNTIFS(A1:A5,"<>080")
3) COUNTIFS(A1:A5,"""<>'080""")
5) COUNTIFS(A1:A5,"<='060")
と評価されています。
また VBAのテクニックを解説するWebなどでは、"<>"と値'080を&
でつなげる方法も紹介されていましたが、上記の場合結局
COUNTIFS(A1:A5,"<>080") → 5 と評価されて
しまいます。
文字列同士で比較すれば、期待する結果になりそうですが
条件の書き方には工夫がいりそうです。どのように記述すればよいでしょうか
お知恵をお借りしたくいと思います。どうかよろしくお願い致します。
以上
補足
早速の回答頂き有難うございます。ご教示頂き有難うございます。 恐縮ですが以下の点確認させてください。 Q1 >文字列は数字や日付シリアル値よりも大きいと判定されるため、 >今回のような結果になります。 この点は 実機で確認すると sheet1 のA1:A3が「文字列の数字」で '2014/04 Sheet2 のA2 が 「>=2014/04」では カウント0 となります。 なので >= で比較した時 (Sheet1のA1の文字列) 「’2014/04」 < (Sheet2のA2の数字や日付シリアル値)である「2014/04」 が成りたっているのでしょうか? ここがよくわかっていません。 ただ実機では以下のようになり、等号が使えないので見た目が 通常の以上や以下の形で表現できないので惜しいですが 以下の指定方法でも何とか納得できるレベルだと思います。 条件 件数 >2014/03* 3 >2014/04* 2 >2014/05* 1 となります。 この場合は2014/03* とすると文字列同士の比較と評価され、 "2014/04 > "2014/03 " となって カウント3となる という訳ですよね? 以上