| 
    
     |  | こんにちは。かみちゃん です。 
 >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列より右かどうかを判定する必要があるかと思います。
 
 |  |