プロが教える店舗&オフィスのセキュリティ対策術

図のようにsheet1とsheet2があり、sheet1のC列のあああ、いいい、うううのそれぞれで
H列に日付を入れたいです。

・C列があああの場合=E列の日付+30
・C列がいいいの場合=Sheet2のH列を持ってくる
・C列がうううの場合=E列の日付+60

超初心者なので一応書いてみましたが動きませんでした。
また、もしあああ いいい ううう以外の文字があったら空白にしたいです。
教えてください。
よろしくおねがいします。

Sub test()
Dim i As Long
for i = i to Cells(Rows.Count, 1).End(xlUp)
If Cells(i, 3) = "あああ" Then
Cells(i, 8) = Cells(i, 5) + 30
ElseIf Cells(i, 3) = "いいい" Then
Cells(i, 8) = Cells(i, 8)
ElseIf Cells(i, 3) = "ううう" Then
Cells(i, 8) = Cells(i, 5) + 60
End If
End sub

「マクロ VBA Elseif 初心者です」の質問画像

A 回答 (2件)

修正した部分についてコメントを付けましたので、参考にしてください。


cells(x,y)=cells(a,b)にすると値コピーと同じになり、書式のコピーになりません。対象セルが日付形式なので、書式もコピーされるようにしました。

Sub test()
Dim i As Long
Worksheets("Sheet1").Activate           'Sheet1を指定します
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row  'i=iではなくi=1です。また、行を取得するには末尾に.rowをつけます。つけないとセルの値になってしまいます
If Cells(i, 3) = "あああ" Then
Cells(i, 5).Copy Cells(i, 8)             '日付なので書式もコピーできるようにします。cells()=だと値のコピーと同じになり書式はコピーされません
Cells(i, 8) = Cells(i, 8) + 30            'ここで値の計算をします
ElseIf Cells(i, 3) = "いいい" Then
Worksheets("Sheet2").Cells(i, 8).Copy Cells(i, 8)  'コピー元にSheet2を指定します
ElseIf Cells(i, 3) = "ううう" Then
Cells(i, 5).Copy Cells(i, 8)
Cells(i, 8) = Cells(i, 8) + 60
Else                        'いずれの条件にも合わないとき
Cells(i, 8) = ""                   '空白とします
End If
Next i                       'for~nextなので対で使わないとエラーになります
End Sub
    • good
    • 0
この回答へのお礼

できました!
ありがとうございます!!
ホントに感謝です。

お礼日時:2019/06/22 09:26

次のようにすれば、とりあえず、動きそうですが、希望どおりの動きになるかは分かりません。


For i = 1 to Cells(Rows.Count, 1).End(xlUp).Row


Next i

それから、シートを明示的に指定するのは、こんな風に書きます。
Worksheets("Sheet1").Cells(i, 8)
    • good
    • 0

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