[[20170601110505]] 『任意のセルのすぐ上をコピー』(営業マン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『任意のセルのすぐ上をコピー』(営業マン)

マクロの記録をとってみましたがどの様に加工してよいのかわかりません。
どなたかお教えください。
Sub Macro1()

    Range("H1").Select
    Selection.Copy
    Range("H2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("H2").Select
    Application.CutCopyMode = False
End Sub
この例ではH1の値をH2にコピーしましたがH1は固定ではありません。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 「任意のセル」とは「選択しているセル」という認識でいいのですか?
 こういうのでいかがでしょう?
    Sub eigyou()
        With Selection
            If .CountLarge = 1 Then
                If .Row > 1 Then
                    .Value = .Offset(-1).Value
                Else
                    MsgBox "2行目以降を選択してください"
                End If
            Else
                MsgBox "セルの選択は一つにしてください"
            End If
        End With
    End Sub
(稲葉) 2017/06/01(木) 11:16

稲葉様
ご回答ありがとうございます。
.Value = .Offset(-1).Value
ここのところが分かりませんでした、利用させていただきます。
本日はありがとうございました。
(営業マン) 2017/06/01(木) 13:48

横から失礼します。

分からないまま「利用」するのではなく、理解してから「使用」するようにしましょう。
(カリーニン) 2017/06/01(木) 13:50


カリーニン様
そうですね、、、コードの意味を調べて動きを見ていました。
その結果これで良いことが分かりました。
それでも結果オーライなのですが、、、
    With Selection
       .Value = .Offset(-1).Value
    End With
(営業マン) 2017/06/02(金) 09:46

横から失礼するゾ〜

>>その結果これで良いことが分かりました。

ん〜確かに目的の動きだけならそれでいいゾ。でもそれは稲葉さんのコードを理解し切れてないことを証明してる気がするゾ。

稲葉さんのコードには安全処置が含まれているんだゾ。
上のセルを参照するという特性上、1行目では使用できない。

If .Row > 1 Then

Else
 MsgBox "2行目以降を選択してください"
End If

それがここのIf文。1行目ではエラーメッセージを吐かせるようになっているゾ。

あとこっちは単一のセル選択時しか動作しないようにしてるゾ。

If .CountLarge = 1 Then

Else
 MsgBox "セルの選択は一つにしてください"
End If

複数行でもやりたいとか仕様に提示されてないしゾ。

まぁ半分老婆心でわざわざ書いてくれたようなもんだゾ。残しといたほうがいいと個人的には思いますゾ。
(hm) 2017/06/02(金) 10:12


 カリーニンさん、hmさんフォローありがとうございます。

 これは私が安直に答えのみを出してしまった弊害ですね。
 申し訳ないです。

 ネストする必要がないIFを面倒だからとネストしてしまったのがわかりにくかったのかもしれませんね。

 少し書き換えました。
 ご確認ください。

    Sub eigyou2()
        Dim msg_err As String

        With Selection
            '//エラー処理
            If .CountLarge > 1 Then '2つ以上セルが選択されていた場合の指示がなかったので、除外
                msg_err = "2つ以上のセルが選択されています。" & vbNewLine
            End If

            If .Row = 1 Then         '1行目が選択されている場合、上の行が無い
                msg_err = msg_err & "1行目が選択されています。" & vbNewLine
            End If

            '//条件分岐と実行
            If Len(msg_err) = 0 Then
                .Value = .Offset(-1).Value
            Else
                MsgBox msg_err
            End If
        End With
    End Sub
(稲葉) 2017/06/02(金) 11:13

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.