[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『任意のセルのすぐ上をコピー』(営業マン)
マクロの記録をとってみましたがどの様に加工してよいのかわかりません。
どなたかお教えください。
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
分からないまま「利用」するのではなく、理解してから「使用」するようにしましょう。
(カリーニン) 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.