質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

5回答

7981閲覧

Excel VBA 0と空白の比較

nuko3

総合スコア31

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/11/05 07:18

前提・実現したいこと

Excelで表を作り、VBAで比較を行うようにしたいのですが、0と空白セルの比較が同じになり、比較がうまくいきません。
例1か例2に1以上の数字があったら空の判定は出来るのですが、どちらかに0があると空の判定が出来ません。。
どちらかに空のセルがあったら判定が空にしたいです。
理想形↓

列1列2判定
11
12
1
0

該当のソースコード

If (Cells(ii, 1).Value = Cells(ii, 2).Value) Then Cells(ii, 3).Value = "正" ElseIf (Cells(ii, 1).Value = Empty) Or (Cells(ii, 2).Value = Empty) Then Cells(ii, 3).Value = "空" Else Cells(ii, 3).Value = "誤" End If

結果

列1列2判定
11
12
1
0

試したこと

空白の比較などを調べてみて.Value = ""、.HasFormula、.Formula = ""などを試してみましたが、同じでした。

補足情報(FW/ツールのバージョンなど)

Excel 2016

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2018/11/05 07:28

(チェックの順番的な意味で)最初に empty を確認したら?
nuko3

2018/11/05 08:22

確認の順番を変えるという方法は試していませんでした...これが正解でした。ありがとうございます。
guest

回答5

0

takasima20さんも書いてますが、先にemptyを見ればいいような気がします。
その他の案としては、文字列として比較すればいけます。
最初のIf文を次のようにしてみてください。

VBA

1' 方法1:Valueを文字列に変換する 2If CStr(Cells(1, 1).Value) = CStr(Cells(1, 2).Value) Then 3 4' 方法2:Textプロパティで比較する 5If Cells(1, 1).Text = Cells(1, 2).Text Then

投稿2018/11/05 07:47

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Cells().Value = Empty ではなく、
IsEmpty(Cells())で判定するべきですね。

空文字も含めて、空かどうか判定したい時は、
CStr(Cells().Value) = "" と、自分は書きます。
※型を意識して、明示的に文字列型で判定させましょう。

投稿2018/11/05 09:25

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

imihito

2018/11/05 11:12

IsEmpty関数が用意されている意味、セルがエラー値の場合を想定すると、私もこの方法がベストだと思います。
guest

0

ベストアンサー

以下のようにしてください。
0のセルの場合もEmptyが成立しますので、空白セルは""で判定してください。
msgboxへ表示しているのは、0の場合に、Emptyが成立が成立することを確認する為です。

VBA

1Public Sub 空白試験() 2 Dim ii As Long 3 For ii = 1 To 4 4 If Cells(ii, 1).Value = "" Or Cells(ii, 2).Value = "" Then 5 Cells(ii, 3).Value = "空" 6 ElseIf Cells(ii, 1).Value = Cells(ii, 2).Value Then 7 Cells(ii, 3).Value = "正" 8 Else 9 Cells(ii, 3).Value = "誤" 10 End If 11 If Cells(ii, 1).Value = Empty Then 12 MsgBox (Cells(ii, 1).Address & "=Empty") 13 End If 14 Next 15End Sub 16

投稿2018/11/05 07:54

tatsu99

総合スコア5438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nuko3

2018/11/05 08:18

ありがとうございます。空の判断を先にしてみると、0も空になってしまいましたが、書いてある通り、=Enptyを=""にしてみると理想の形になりました。
guest

0

まあ、取りあえずは評価順序を変更するのが手っ取り早くはあります。

VBA

1If (Cells(ii, 1).Value = Empty) Or (Cells(ii, 2).Value = Empty) Then 2 Cells(ii, 3).Value = "空" 3ElseIf (Cells(ii, 1).Value = Cells(ii, 2).Value) Then 4 Cells(ii, 3).Value = "正" 5Else 6 Cells(ii, 3).Value = "誤" 7End If

投稿2018/11/05 07:52

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

追記・修正の依頼にてtakasima20さんがおっしゃっている通りなので回答として改めて記載するのも恐縮ですが…
以下の通りチェックの順番を入れ替えることで解決すると思います。

VBA

1If (Cells(ii, 1).Value = Empty) Or (Cells(ii, 2).Value = Empty) Then 2 Cells(ii, 3).Value = "空" 3ElseIf (Cells(ii, 1).Value = Cells(ii, 2).Value) Then 4 Cells(ii, 3).Value = "正" 5Else 6 Cells(ii, 3).Value = "誤" 7End If

投稿2018/11/05 07:45

shun_kuwa

総合スコア187

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問