| 
    
     |  | ご指導ありがとうござました。ちゃんと動作しました。 また何かありましたらご指導よろしくお願いします。
 
 ▼かみちゃん さん:
 >こんにちは。かみちゃん です。
 >
 >>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列より右かどうかを判定する必要があるかと思います。
 
 
 |  |