If~ThenステートメントとAnd演算子

このQ&Aのポイント
  • windows7、エクセル2013でIf~ThenステートメントとAnd演算子を使用して処理を行いたいが、構文がエラーになる。
  • セルに式が入っていて計算結果がエラーの場合や空白、0の場合は処理を行わず、それ以外の場合に処理を行いたい。
  • 現在の構文ではエラーが発生しているが、どこが悪いのかわからない。
回答を見る
  • ベストアンサー

If~ThenステートメントとAnd演算子

windows7、エクセル2013です。 セルに式が入っていてその計算された値が、 計算ERRを起こしている場合(#DIV/0!とか#VALUE!)、空白の場合、0の場合 は処理をしないで それ以外の場合は処理をするようにしたいのですが 以下の構文ではerrになります。 どこが悪いのでしょうか? よろしくお願いします。 If IsError(Cells(x, 20)) And (Cells(x, 20)) = 0 And (Cells(x, 20)) = "" Then Else y = Cells(x, 20) * Cells(x, 23) End If

  • gx9wx
  • お礼率95% (440/460)

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8026/17154)
回答No.1

If IsError(Cells(x, 20)) Then ElseIf (Cells(x, 20)) = 0 Or (Cells(x, 20)) = "" Then Else y = Cells(x, 20) * Cells(x, 23) End If

gx9wx
質問者

お礼

Thenを使う行は1行でと思ったのですが やはり2行でないとできないようです。 ありがとうございました。

その他の回答 (2)

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.3

素人の、戯言 かも、知れません お許しください。 例えば、 (Cells(x, 20))) = 0 と、されていますが Cells() は、 謂わば 構造体への参照で 端的に、言うと .Value以外の値も、内包しています お示しの式、では 構造体中の、 どのメンバーの値を 評価対象に、するのか 指定してません よね? なので、 Cells(x, 20) を、 Cells(x, 20).Value と、試してみて 頂けませんか? 参考にどうぞ https://www.moug.net/tech/exvba/0100047.html

gx9wx
質問者

お礼

ご丁寧にありがとうございました。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

こんな感じでどうでしょう。 ・先にセルがエラーで無い事を確認しないと、値の確認(0や空白の確認)でエラーになります。 ・セルが空白でも0でも値は0なのでまとめました。 If IsError(Cells(x, 20)) = False Then   If Cells(x, 20) <> 0 Then     y = Cells(x, 20) * Cells(x, 23)   End If End If 質問のコードで気になりましたが、and と or の違いについて、もう少し理解が必要かと思えました。

gx9wx
質問者

お礼

遅くなって申し訳ありません。 >and と or の違い はい。確かに勘違いしておりました。 ありがとうございました。

関連するQ&A

  • 【VBA】 IFの中にIF

    いつもこちらの識者の方々にはお世話になっています。 VBAの質問です。 やりたいことは下記構文を見ていただければわかると思うのですが、 ------------------------------------------------------------------------------ Sub Test() Dim f As Long Dim lRow As Long lRow = Cells(Rows.Count, 1).End(xlUp).Row For f = lRow To 2 Step -1 If Cells(f, 2).Value = "りんご" Then Cells(f, 2).EntireRow.Delete Else Cells(f, 2).Value = Cells(f, 2) & "0" & Cells(f, 3) Cells(f, 18).Value = If Cells(f, 4).value = 1 Then Cells(f, 13) Else Cells(f, 14) Endif End If Next f End Sub ------------------------------------------------------------------------------ Cells(f, 18).Value = If Cells(f, 4).value = 1 Then Cells(f, 13) Else Cells(f, 14) Endif の部分が解決したい部分になります。 IFで条件分岐したあとの処理にさらにIFで分岐を加えたいのですが、無茶だと思いつつやってみたらやはり通りませんでした。 こういうのはなんというのでしょうか、ネストとも違うと思うのですが・・・ 上記のような場合、どのような構文が適していますでしょうか。

  • If x < y Then 0 Then ←この書き方の意味は?

    VB6.0の出来たプログラムをVB.NETに移行する為にソースを見ているのですが If x < y Then 0 Then ~処理A~ Else ~処理B~ End If と記述されている部分がありました。 「0 Then」がなければ、xがyより小さい時、処理Aを行い、 それ以外の場合は、処理Bを行うというのはわかります。 この時のThen 0 Thenとはどういった意味になるのでしょうか?

  • If~Thenステートメントについて

    お世話になります。 マクロを作成するのに、If~Thenを使用したいのですが上手く使えません。 <例> A列に文字・数字が入っているとき→B列に”い”、C列に”う”、D列に”え”と反映させる。 A列が空白のセルになったら→その行はすべて空白にする。 行数は50行程度の予定です。     A      B      C      D 1   あ     い      う      え 2   空白   空白     空白    空白 3   あ     い      う      え 4   空白   空白     空白    空白 ---------------------------------------------------------- 数値に対して一致・大小等の条件であれば、問題なく作成できたのですが…。 私の探し方が悪いのだとは思いますが、 セルが空白か否かを判断して文字を反映させる、というのが見つけられませんでした。 関数を使えば簡単なのは承知しておりますが、その他の処理をすべてマクロで作成したので、 できれば統一させてしまいたい…と思っています。 初心者用の本を見ながら作成している初心者ですが、何卒ご教示頂けませんでしょうか? よろしくお願いいたします。

  • IFステートメントの条件式が間違っているのでしょうか?

    エクセルVBA初心者です。下記の式を作りましたが、計算した結果が正しい答えになりません。構文エラーが出ないので構文は間違ってはいないと思うのですが、答えが違うので参っています。どなたか何が間違っているのかおしえて下さい。よろしくお願いします。 Cells(6, "E") にある数字時を入れた時の答えをCells(6, "G") に求めるものです。 Sub 計算() Dim my As Long If Cells(6, "E") <= 90 Then my = 50000 * Cells(6, "E") / 30 Cells(6, "G") = my ElseIf 90 < Cells(6, "E") <= 120 Then my = 50000 + 40000 * (Cells(6, "E") - 90) / 30 Cells(6, "G") = my ElseIf 120 < Cells(6, "E") <= 150 Then my = 90000 + 30000 * (Cells(6, "E") - 120) / 30 Cells(6, "G") = my ElseIf 150 < Cells(6, "E") <= 180 Then my = 120000 + 20000 * (Cells(6, "E") -150) / 30 Cells(6, "G") = my ElseIf 180 < Cells(6, "E") <= 210 Then my = 140000 + 10000 * (Cells(6, "E") -180) / 30 Cells(6, "G") = my End If End Sub

  • IFステートメントの使い方 どちらでもないならば

    「出金も入金も0じゃないならば」としたい場合、どのようなifステートメントを作ればいいでしょう? Sub test() Dim 出金 As Currency Dim 入金 As Currency 出金 = 0 入金 = 0 '(1) If Not (出金 = 0) And Not (入金 = 0) Then MsgBox "出金0入金0ではありません" End If '(2) If (出金 = 0) And (入金 = 0) Then Else MsgBox "出金0入金0ではありません" End If End Sub (1)だとうまくいきません。 (2)のように Elseを使って対応するしかないのでしょうか? (2)でいけますが、今後の勉強の為にelseを使わずに、「どちらでもないならば」の方法を教えてください。

  • エクセルVBAのIf ~ Thenステートメントで

    予約フォームの作成に挑戦しています。 予約日が2022年8月1日の時のみ、シート4に結果を記入して行きたいのですが、 Private Sub CommandButton1_Click() If ListBox1.Text = "44774" Then Sheet4.Select Range("C2").End(xlDown).Offset(1, 0).Select ActiveCell.Value = Reservationform.ListBox2.Value ActiveCell.Offset(0, 1).Value = Reservationform.ListBox3.Value ActiveCell.Offset(0, 2).Value = Reservationform.ListBox4.Value ActiveCell.Offset(0, 2).NumberFormat = Range("C2").NumberFormat Exit Sub End If End Sub で、とりあえず成功しています。 "44774" の部分を、"Sheet6のA2"だった時のみ結果を記入するようにしたいです。 " "の中身をそのまま変えて、 If ListBox1.Text = "sheet6.Range("A2")" Then や If ListBox1.Text = "sheet6.Cells(2, 1).Value" Then に変えてみましたがうまく行きませんでした。 どのようにしたら良いでしょうか?

  • エクセル VBA If~Then~Else

    エクセルのA列に以下の文字列が入っています。 A1 A2=100-101 A3=102-103 A4=104-105 A5=106-107 A列の文字列を上から順に結合するため下記のVBAを実行しました。 結合の条件として、文字列の最後の数字と次のセルの最初の数字が連続しているならば、互いに消去して結合、そうでないなら「,」 (カンマ)でつなげて結合したいと思っています。 なので期待する結果としては A1=100----107 となってほしいのですが、実際は A1=100--103,104-105,106-107 となってしまいました。 (ループ中の1回目の条件分岐だけが成功し、2回目以降は違っている) 「IF~Then」の部分が間違っているようなのですが・・・・・わかりません。 プロパティの使い方など全体的に至らぬ点があるかもしれませんがよろしくお願いします。 Dim i As Integer Dim X As String Dim mojisu As String i = 3 X = Cells(i, 1) mojisu = 3 Cells(1, 1) = Cells(2, 1) Do Until Cells(i, 1).Value = "" If Left(X, mojisu) - Right(Cells(1, 1), mojisu) = 1 Then Cells(1, 1).Value = Left(Cells(1, 1), Len(Cells(1, 1)) - mojisu) & Right(X, Len(X) - mojisu) Else Cells(1, 1).Value = Cells(1, 1).Value & "," & Cells(i, 1).Value End If i = i + 1 Loop

  • VBA の if 文の質問です

    下記のようなif文を実行したのですが Or のあとの条件が無視されてしまっているようなのですが、このような書き方ではだめなのでしょうか? else if で地道に分岐させたほうがいいのでしょうか? If Cells(1, 1).Value <> "" Or Cells(1, 2).Value <> "test" Or Cells(1,3) <> 0 Then 処理内容 End If

  • IFとANDの組み合わせ

    VBAで、条件を2つとも満たす場合について、 という式を作りたいと思っています。 ElseIf Cells(gyou + 1, 5).Value = 0 And Cells(gyou, 5).Value = 0 Then という式を作ったのですが、どこか誤りがありますか。 もし、上下のセルが「0」の場合・・・という式のつもりでしたが 機能しない、ということもありますし、そもそも、AND関数はエクセルの関数のためこのような使い方をしていいものか定かではありません。

  • マクロの構文でわからない所があります

    エクセル2013です。 退職者の作成したマクロの中で 何を処理しているのか、わからないところが あります。 以下の構文ですが、 これは、何がどうした時、どういう処理 をするのでしょうか? f8を押しながら見ていてもよくわかりません。 よろしくお願いします。 Do While Cells(Z, 6).Value <> "" If Cells(Z, 1).Value <> "" Then Sheets("集計表").Cells(Z, 1).Value = Cells(Z, 1).Value Else: Sheets("集計表").Cells(Z, 1).Value = "-" If Cells(Z, 5).Value <> "" Then Sheets("集計表").Cells(Z, 5).Value = Cells(Z, 5).Value Else: Sheets("集計表").Cells(Z, 5).Value = "-" If Cells(Z, 6).Value <> "" Then Sheets("集計表").Cells(Z, 6).Value = Cells(Z, 6).Value Else: Sheets("集計表").Cells(Z, 6).Value = "-" Z = Z + 1 Loop

専門家に質問してみよう