アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもこちらの識者の方々にはお世話になっています。
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で分岐を加えたいのですが、無茶だと思いつつやってみたらやはり通りませんでした。
こういうのはなんというのでしょうか、ネストとも違うと思うのですが・・・
上記のような場合、どのような構文が適していますでしょうか。

A 回答 (2件)

> Cells(f, 18).Value = If Cells(f, 4).value = 1 Then Cells(f, 13) Else Cells(f, 14) Endif



こういう場合は、三項演算子を利用します。

Cells(f, 18).Value = IIf(Cells(f, 4).value = 1, Cells(f, 13), Cells(f, 14))


三項演算子を2つも3つも組み合わせて利用することも可能です。
ex)
IIf(value = 1, "a", IIf(value = 2, "b", "c"))
    • good
    • 0
この回答へのお礼

できました!すばらしいです。
三項演算子、初めて聞く名前です。
これからも精進します。
ありがとうございました!

お礼日時:2013/09/05 17:00

「if」の中に「if」っていうのはよく使いますよ。



この場合には
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)
If Cells(f, 4).value = 1 Then
 Cells(f, 18).Value = Cells(f, 13)
Else
Cells(f, 18).Value = Cells(f, 14)
end if
End If
Next f

End Sub

が正しいですね!
    • good
    • 0
この回答へのお礼

こちらもできました!
VBAは奥が深いですねぇ。
ご回答ありがとうございました!

お礼日時:2013/09/05 17:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!