|
こんにちは。かみちゃん です。
>sheet1のA1にある数値を変更する前に、A1の値をB1にコピーして残したのですが、もしB1に値がすでにある場合はC1にB1にもC1にも値がある場合はD1に、D1にも値がある場合は、”コピーするセルはありません”とメッセージを出したと思います。途中までのマクロなのですが、隣のセルが空白でなくても上書きされてしまいます。どうしてでしょうか?
ActiveCell.Offset(0, 1).Select
の位置が違います。
以下のようにすると、正しく動作すると思います。
Sub Macro1()
Cells(1, 1).Select
Selection.Copy
If ActiveCell.Offset(0, 1).Value = "" Then
ActiveCell.Offset(0, 1).Select
ActiveSheet.Paste
Else
If ActiveCell.Offset(0, 2).Value = "" Then
ActiveCell.Offset(0, 2).Select
ActiveSheet.Paste
Else
If ActiveCell.Offset(0, 3).Value = "" Then
ActiveCell.Offset(0, 3).Select
ActiveSheet.Paste
Else
MsgBox "コピーするセルはありません"
End If
End If
End If
Application.CutCopyMode = False
End Sub
上記のマクロをもう少しスマートにすると以下のようになります。
Sub Macro2()
Dim i As Integer
Cells(1, 1).Select
Selection.Copy
For i = 1 To 3
If ActiveCell.Offset(0, i).Value = "" Then
ActiveCell.Offset(0, i).Select
ActiveSheet.Paste
Exit For
End If
Next
Application.CutCopyMode = False
If i = 4 Then
MsgBox "コピーするセルはありません"
End If
End Sub
Asakiさんのアイデアだと一番右の列が取得できますが、その列がD列より右かどうかを判定する必要があるかと思います。
|
|