Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


64056 / 76733 ←次へ | 前へ→

【17260】Re:値のコピー
回答  かみちゃん  - 04/8/25(水) 23:18 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>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列より右かどうかを判定する必要があるかと思います。

3 hits

【17258】値のコピー MIKA 04/8/25(水) 22:49 質問
【17259】Re:値のコピー Asaki 04/8/25(水) 22:58 回答
【17260】Re:値のコピー かみちゃん 04/8/25(水) 23:18 回答
【17268】Re:値のコピー MIKA 04/8/26(木) 12:16 お礼

64056 / 76733 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free