Excel VBA質問箱 IV

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

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


11239 / 13646 ツリー ←次へ | 前へ→

【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 お礼[未読]

【17258】値のコピー
質問  MIKA  - 04/8/25(水) 22:49 -

引用なし
パスワード
   みなさん よろしくお願いします。
sheet1のA1にある数値を変更する前に、A1の値をB1にコピーして残したのですが、もしB1に値がすでにある場合はC1にB1にもC1にも値がある場合はD1に、D1にも値がある場合は、”コピーするセルはありません”とメッセージを出したと思います。途中までのマクロなのですが、隣のセルが空白でなくても上書きされてしまいます。どうしてでしょうか?
Sub Macro1()
  Cells(1, 1).Select
  Selection.Copy
  ActiveCell.Offset(0, 1).Select
 
  If ActiveCell.Offset(0, 1).Value = "" Then
   ActiveSheet.Paste
   End If
   If ActiveCell.Offset(0, 1).Value = "<>""" Then
   ActiveCell.Offset(0, 2).Select
   ActiveSheet.Paste
   End If
  
End Sub

【17259】Re:値のコピー
回答  Asaki  - 04/8/25(水) 22:58 -

引用なし
パスワード
   こんばんは。

その行のIV列を選択した状態で、Ctrl+← の操作をマクロの記録してみてください。
これで、その行で入力されている一番右の列が解ります。

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

【17268】Re:値のコピー
お礼  MIKA E-MAIL  - 04/8/26(木) 12:16 -

引用なし
パスワード
   ご指導ありがとうござました。ちゃんと動作しました。
また何かありましたらご指導よろしくお願いします。

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

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