電子書籍の厳選無料作品が豊富!

Excel VBA初心者です。
Worksheet_Changeは既に使われています。

C列に入力すると他の行に一つ上をコピーペースト出来る様にしたいです。
例えばC9列に入力するとG9行からAA9行に一つ上のG8行からAA8行をコピーペーストしたいと思っています。ただ J 列に時間が入ります。どの様にすれば良いのか分からないです。どうか教えて下さいお願いします。
式は、Cに入力するとカーソル移動と時間が出る様になっています

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng, r As Range
Dim i As Integer, j As Integer
If Intersect(Target, Range("C8:C47,F8:F47")) Is Nothing Then Exit Sub
Application.EnableEvents = False
If Target.Column = 3 Then
Set rng = Intersect(Target, Range("C8:C47"))
If rng Is Nothing Then Exit Sub
For Each r In rng
If r.Value <> "" Then
Range("J" & r.Row).Value = Format(Now(), "hh:mm")
Elsle
Range("J" & r.Row).'ClearContents
End If
Next r
j = 6
Else
j = 3
End If
For i = 8 To 47
If Cells(i, j).Value = "" Then
Cells(i, j).Select
Exit For
End If
Next i
Application.EnableEvents = True

End Sub

質問者からの補足コメント

  • 先にG行からAA行までに入力変更するとC列に入力したらコピーペースト出来ない様にしたいです。

      補足日時:2016/05/14 14:02
  • C列に入力時は、J列に時間が、必ず出る様にしたいです。

      補足日時:2016/05/14 14:28

A 回答 (5件)

G~AA列の入力件数をCountA関数でカウントして、ゼロの場合のみ、コピーをするようにしてはいかがでしょう。


例えば、こんな感じです。

If r.Value <> "" Then
If r.Row <> 8 And _
WorksheetFunction.CountA(Range("G" & r.Row & ":AA" & r.Row)) = 0 Then
Range("G" & r.Row & ":AA" & r.Row).Value = Range("G" & r.Row - 1 & ":AA" & r.Row - 1).Valu
End If
Range("J" & r.Row).Value = Format(Now(), "hh:mm")
    • good
    • 0
この回答へのお礼

ありがとうございます。G行からAA行までは数字ではなく文字入力になるのですが。
こんな感じです。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng, r As Range
Dim i As Integer, j As Integer
If Intersect(Target, Range("C8:C47,F8:F47")) Is Nothing Then Exit Sub
Application.EnableEvents = False
If Target.Column = 3 Then
Set rng = Intersect(Target, Range("C8:C47"))
If rng Is Nothing Then Exit Sub
For Each r In rng
If r.Value <> "" Then
Range("J" & r.Row).Value = Format(Now(), "hh:mm")
Else
Range("J" & r.Row).Delete    'ClearContents ?
End If
Next r
j = 6
Else
j = 3
End If
For i = 8 To 47
If Cells(i, j).Value = "" Then
Cells(i, j).Select
Exit For
End If
Next i
Application.EnableEvents = True
End Sub

お礼日時:2016/05/14 15:20

No2、3のママチャリです。



>G行からAA行に違う文字を入力するとコピーペーストしない様にしたいです。

すいません。意味が分かりません。
すでに「何か入力されていたら、上の行をコピーしない」ということでしょうか?
    • good
    • 0
この回答へのお礼

はい。先にG行からAA行までに入力変更されていたらコピーペーストしないという事です。ただJ列は、必ず時間が、C列に入力したら出る様にしたいと思っています。

お礼日時:2016/05/14 14:40

If r.Value <> "" Then


If r.Row <> 8 Then
Range("G" & r.Row & ":AA" & r.Row).Value = Range("G" & r.Row - 1 & ":AA" & r.Row - 1).Valu
End If
Range("J" & r.Row).Value = Format(Now(), "hh:mm")
    • good
    • 0
この回答へのお礼

ありがとうございます。G行からAA行に違う文字を入力するとコピーペーストしない様にしたいです。
教えて下さいお願いします。

お礼日時:2016/05/14 13:55

J列に時刻を設定する直前に、前行をコピーする命令を入れればOKでしょう。


こんな感じです。

If r.Value <> "" Then
Range("G" & r.Row & ":AA" & r.Row).Value = Range("G" & r.Row - 1 & ":AA" & r.Row - 1).Value
Range("J" & r.Row).Value = Format(Now(), "hh:mm")
    • good
    • 0
この回答へのお礼

ありがとうございます。出来ました。すみません言い忘れていました。G8からAA8は一つ上をコピーペーストしない様に出来ないでしょうか。

お礼日時:2016/05/14 12:29

動作がどうなっているのかよくわかりません。


① 作業するエリアは C8~F47 ですか?
② C列にデータを入力するとその行上のデータをコピーするとともに J列にその時間が入力される。
③ 抜けている所が有ったらそこへカーソルを持っていく?
みたいな動作でしょうか?
    • good
    • 0
この回答へのお礼

作業するエリアはC列とF列機種名と会社名を紐づけにG行AA行までが紐づけと誰が何をやったかを行を埋める作業を簡略したいと思っています。

お礼日時:2016/05/14 12:15

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