プロが教えるわが家の防犯対策術!

エクセルのマクロでA1の値が1ならばB1にaを、2・3・4ならばbを、5ならばCを、それ以外は「該当無し」と入れたいのですが下のマクロではうまく行きません。ぜひご指導ください。
Sub
If Left(Cells(1, 1).Value, 1) = 1 Then Cells(2,1).Text = "a"
ElseIf Left(Cells(1,1).Value, 1) = 2 Or _
Left(Cells(1,1).Value, 1) = 3 Or _
Left(Cells(1,1).Value, 1) = 4 Then Cells(2,1).Text = "b"
ElseIf Left(Cells(z, 37).Value, 1) = 5 Then Cells(2,1).Text = "c"
Else: Cells(z, 40).Text = "該当無し"
End If
End Sub

A 回答 (3件)

入力ミスなのか、いくつもエラーがあります。


>A1の値が1ならばB1にaを、2・3・4ならばbを、5ならばCを、
ということの作業であれば Select Case文を勉強してみてください。
Sub Macro1()
Select Case Left(Cells(1, 1).Value, 1)
Case 1
Cells(2, 1).Value = "a"
Case 2, 3, 4
Cells(2, 1).Value = "b"
Case 5
Cells(2, 1).Value = "c"
Case Else
Cells(2, 1).Value = "該当無し"
End Select
End Sub
といった具合にシンプルになります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/10 13:51

VBのElseIfの勉強でなければ、


VBAの上達度は、私の持論では、IF文をどれだけ減らせたかにあると思っている。
コードか簡潔になる。
見通しがよくなる。
エラーが少なくなる。
(VBでなく)VBAを生かせる。
などのメリットがある。
そのためにはエクセルそのものの機能の勉強が先だが。
ーー
本件は、Case文もあるが
F1:G5に
1a
2b
3b
4b
5c
を作って
コード例として
Sub test05()
On Error GoTo err1
For i = 1 To 5
Cells(i, "B") = WorksheetFunction.VLookup(Cells(i, "A"), Range("F1:G5"), 2, False)
Next i
Exit Sub
err1:
Cells(i, "B") = "該当なし"
Resume Next
End Sub
なんてのもある。
>質問コードのLeftは文字列の一部を判別するのか?無視したが。
ーー
対応表をプログラムのコードの中に持つ手もある。

この回答への補足

>質問コードのLeftは文字列の一部を判別するのか?無視したが。

説明部位側でした。申し訳ありません。そうです。
A1のセルの文字の一番最初の文字を判別しようとしていました。

補足日時:2008/10/10 13:05
    • good
    • 0
この回答へのお礼

For Nextを使用することも出来るのですね。ありがとうございました!

お礼日時:2008/10/10 13:53

Sub TEST()


  Select Case Cells(1, 1)
  Case 1
    Cells(1, 2) = "a"
  Case 2, 3, 4
    Cells(1, 2) = "b"
  Case 5
    Cells(1, 2) = "c"
  Case Else
    Cells(1, 2) = "該当なし"
  End Select
End Sub
-------------------------------
で、どうでしょう
    • good
    • 0
この回答へのお礼

Select Caseを使ったら簡単で分かりやすいですね。ありがとうございます!

お礼日時:2008/10/10 13:51

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

このQ&Aを見た人はこんなQ&Aも見ています