2016-08-16 4 views
1

ここでは、私が作業しているコードを示します。それは本当にシンプルですが、期待どおりに動作していません。今Excel VBA if文の出力値が0のみ

Dim hey As Range 
Set hey = Range("A1:A5") 

For Each i In hey 

If i.Value = "15" Then 
i.Offset(0, 2).Value = "15" And i.Offset(0, 3).Value = "15" 

ElseIf i.Value = 10 Then 
i.Offset(0, 2).Value = "10" And i.Offset(0, 3).Value = "10" 

ElseIf i.Value = 5 Then 
i.Offset(0, 2).Value = "5" And i.Offset(0, 3).Value = "5" 

ElseIf i.Value > 15 And i.Value = "*5" Then 
i.Offset(0, 2).Value = "10" And i.Offset(0, 3).Value = "5" 

Else: i.Offset(0, 2).Value = 10 And i.Offset(0, 3).Value = 10 
End If 
Next i 

、それがどうなるすべては、私は、なぜ区別することはできませんし、私はこれで私の精神的なロープの終わりに午前2列と出力0によって相殺されます。私はそれが何か遅れて簡単に私は見落としていると確信しています。

私はステップスルーを試みましたが、それはサンプルの各値に対して正しく評価されているように見えますが、依然として0の値を示しています。また、引用と一緒に遊んでいたのかどうかを見ていましたが、私は彼らと一緒に仕事をしたいと思っています。

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

+2

if文の外にある 'And'文を取り出してください。各部分を2つの行に分割します。 – PartyHatPanda

+0

私はVBAの専門家はいませんが、最後のElse節には値のアポストロフィがありません –

+8

最初は 'If'の代わりに' Select Case'を使うのがいい場所のようです。第二に、あなたは数値やテキストでいっぱいになっていますか?あなたは入力のサンプルを与えることができますか?第3に、 'i.Offset(0、2).Value =" 15 "そしてi.Offset(0、3).Value =" 15 "'結果を 'i.Offset(0、2).Value'に入れることを意味します。 「15」とi.Offset(0、3).Value = "15" 'であり、おそらくあなたがしようとしているものではありません。 –

答えて

6

これは私がAndステートメントを除去することによって、何を意味するかです:

Dim hey As range 
Set hey = range("A1:A5") 

For Each i In hey 

If i.Value = "15" Then 
i.Offset(0, 2).Value = "15" 
i.Offset(0, 3).Value = "15" 

ElseIf i.Value = 10 Then 
i.Offset(0, 2).Value = "10" 
i.Offset(0, 3).Value = "10" 

ElseIf i.Value = 5 Then 
i.Offset(0, 2).Value = "5" 
i.Offset(0, 3).Value = "5" 

ElseIf i.Value > 15 And i.Value = "*5" Then 
i.Offset(0, 2).Value = "10" 
i.Offset(0, 3).Value = "5" 

Else 
i.Offset(0, 2).Value = 10 
i.Offset(0, 3).Value = 10 
End If 
Next i 

EDIT:コンピュータプログラムに

、そして比較演算子です。それは人間とまったく同じようにそれを理解していません。別の人間と話し合うときは、「と」でつなげられた一連のタスクを与えることができます。タスク自体が混乱しない限り、何をすべきかに混乱はありません。コンピュータはAndを使用して、複数の条件が同時に満たされているかどうかを確認します。あなたの最後のElseifでは、これを正しく使用してコンピュータに「i.Valueが15かどうかをチェックし、i.Value = "* 5"かどうかを確認してください(Andステートメントのために)条件が真であれば、次のコードを実行してください。

これは違いを説明するのに役立ちます。

EDIT 2:@liteliteの提案から

は、Like演算子を使用します。

ElseIf i.Value > 15 And i.Value Like "*5" Then 
i.Offset(0, 2).Value = "10" 
i.Offset(0, 3).Value = "5" 
+2

OPに「と」が本当に意味することを説明することは良い考えだと思います。 – litelite

+0

ああ、私はandとステートメントでこれをやったことがあります。論理的には私にとって意味がありますが、コードにはなぜそれがうまくいかないのか覚えています。上記のコードは、 ElseIf i.Value> 15およびi.Value = "* 5"を除いて正常に機能しました。その後、 行が正しく評価されませんでした。 – SsaSnakebite

+0

@liteite提案をいただき、ありがとうございました。 – PartyHatPanda

1

@PartyHatPandaの裏側のアンサーにちょうどいいです。 ElseIf i.Value > 15 And Right(i.Value, 1) = 5 Thenを使用できます。これは、i.valueの最後の数字が5に等しいかどうかをチェックします。

+0

私は申し訳ありませんが、私はかなりのOPが後にあることを確信しています – Ross

+0

私はLikeの演算子の上記の提案を使用し、それは私のために十分に動作します! – SsaSnakebite