MW211 EXIT

devlog
ExcelVBA/比較
2013年09月02日
数値で比較すると数値に型変換して判定される。
つまり、「If セルの値 = 0」の場合、空欄も真に判定されてしまう。
よって、「0」のみを比較したい場合には、文字列で比較すればよい。
「If セルの値 = "0"」ってことだ。

実際に試してみると、以下のような傾向がある。
┌─────┬───┬───┬───┬───┬───┬───┐
│  比較対象│FALSE │数値0 │文字0 │文字0.0  空欄 │=""   │
│比較方法  │      │書式0.0 '0    │'0.0  │      │      │
├─────┼───┼───┼───┼───┼───┼───┤
│= False   │  ◎  │  ○  │  ○  │  ○  │  ○  │  ×  │
├─────┼───┼───┼───┼───┼───┼───┤
│= 0       │  ○  │  ◎  │  ○  │  ○  │  ○  │  ×  │
├─────┼───┼───┼───┼───┼───┼───┤
│= "0"     │  ×  │  ○  │  ◎  │  ×  │  ×  │  ×  │
├─────┼───┼───┼───┼───┼───┼───┤
│= Empty   │  ○  │  ○  │  ×  │  ×  │  ◎  │  ○  │
├─────┼───┼───┼───┼───┼───┼───┤
│IsEmpty() │  ×  │  ×  │  ×  │  ×  │  ◎  │  ×  │
├─────┼───┼───┼───┼───┼───┼───┤
│= ""      │  ×  │  ×  │  ×  │  ×  │  ◎  │  ○  │
└─────┴───┴───┴───┴───┴───┴───┘
比較対象を論理型、文字型、数値型に換算して比較しているので、
本来想定しているもの以外にも該当するものがでてくるといった感じだ。
少々毛色が違うのが「= Empty」。
これは比較対象の型に自身を換算している感じだ。
よって、数値0の場合は自身を数値0に変換するため一致する一方で
文字列0の場合は、自身は元々文字列""なので不一致となる。

それじゃ文字列の「"0"」と数値の「0」を判別したい場合には?
上記からもわかるように「If セルの値 = Empty」が一つの候補だ。

それ以外に「If WorksheetFunction.IsNumber(セルの値)」で
厳密に「数値0」(真)と「文字列0」(偽)を判別する方法などがある。
分類:ExcelVBA