- ベストアンサー
【Excel】値のみコピーのコードの書き方
Excel2003を使用しています。 Sheet1のE41:E54までをSheet2のアクティブセルに値のみコピーするコードを書きたいのですが、ただ“コピー”するだけなら書けたのですが、“値のみコピー”の書き方がわかりません。 もしよろしければ、“値のみコピー”の部分のコードだけでなく、全体を書いていただけると、マクロ勉強中ですので、参考になります。 よろしくお願いします!
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 値コピーの場合は、難しいメソッドを使う必要はありませんね。 本来は、単に、.Value = .Value です。しかし、ActiveCell があるので、その方法がややこしくなるだけです。 Sub ValuesCopy() If ActiveCell.Parent.Name = "Sheet2" Then With Worksheets("Sheet1").Range("E41:E54") ActiveCell.Resize(.Rows.Count, .Columns.Count).Value = .Value End With End If End Sub
その他の回答 (4)
- tinu 2000(@tinu2000)
- ベストアンサー率40% (147/366)
#4です。 操作が分らなかった。(^^ゞ Sheet2のあるセルをアクティブしてマクロを実行したら、 Sheet1のE41:E54までの値のみを、Sheet2のそのセルから貼り付けたい。 ということでしょうか? 例えば、今回はG9から、その次はJ3からと、いろいろ変わる。と理解してよろしいのですね。 であれば、マクロを訂正します。 Sub Macro3() Dim SEL As String SEL = ActiveCell.Address Sheets("Sheet1").Range("E41:E54").Copy Range(SEL).PasteSpecial Paste:=xlValues End Sub 副産物として、いくつシートがあっても、どのシートからでも、アクティブにしたセルに貼り付けます。
お礼
再度の回答ありがとうございます。 >Sheet2のあるセルをアクティブしてマクロを実行したら、 Sheet1のE41:E54までの値のみを、Sheet2のそのセルから貼り付けたい。 ということでしょうか? 例えば、今回はG9から、その次はJ3からと、いろいろ変わる。と理解してよろしいのですね。 そのとおりです。 教えていただいたコードでも、うまくいきました。 ありがとうございました。
- tinu 2000(@tinu2000)
- ベストアンサー率40% (147/366)
Sub Macro3() Range("E41:E54").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.PasteSpecial Paste:=xlValues End Sub Sheet1のE41:E54までを Sheet2のアクティブセル(A1にしました。) なお、「新しいマクロの記録」で記録されるマクロには、省略可能なデフォルトまでバカ丁寧に記録されます。 そんなデフォルトは消すとスッキリします。 > こちらに質問させていただく前に、「新しいマクロの記録」を利用してやってみたのですが、エラーが出てしまったので… であれば、話が早いです。 「マクロ勉強中」であるならなおさら、そのソースやエラーを提示して、 何でエラーなのか、どうすべきか、聞いたほうが勉強になります。
お礼
回答ありがとうございます。 >「新しいマクロの記録」で記録されるマクロには、省略可能なデフォルトまでバカ丁寧に記録されます。 そんなデフォルトは消すとスッキリします。 そうなんですね、知りませんでした(^_^;) ということは、値のみコピーは“Selection.PasteSpecial Paste:=xlValues”の部分ということですか。。。 あと、コピー先のアクティブセルですが、ある表の一部に値のみ貼り付けるマクロで、このマクロを実行するたびに貼り付けるセルの位置が変わるので、『Sheet2のアクティブセルに…』と書いています。
- ysko614
- ベストアンサー率31% (103/329)
ある範囲を選択して、別シートに貼り付けた際の貼り付け方の違い、A1には値貼り付け、C1にはすべて貼り付けを行いました。 マクロを作成して、そう言う違いを見るのも勉強になりますよ。 Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("C1").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False
お礼
回答ありがとうございます。 >A1には値貼り付け、C1にはすべて貼り付けを行いました。 マクロを作成して、そう言う違いを見るのも勉強になりますよ。 こちらで質問させていただく前に、「新しいマクロの記録」を利用して、値のみ貼り付けとすべて貼り付けの両方を作成して、違いも見てみたのですが、エラーが出てしまいまして… どこか別のところに間違いがあるのかもしれないと思い、質問させていただきました。
- driverII
- ベストアンサー率27% (248/913)
わからない部分は「新しいマクロの記録」で、実際に作業を行い、記録されたマクロを利用すれば効率よく書けますよ。 Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,SkipBlanks:=False, Transpose:=False
お礼
>わからない部分は「新しいマクロの記録」で、実際に作業を行い、記録されたマクロを利用すれば効率よく書けますよ。 こちらに質問させていただく前に、「新しいマクロの記録」を利用してやってみたのですが、エラーが出てしまったので… 回答ありがとうございました。
お礼
Wendy02 さん、こんにちは。 >値コピーの場合は、難しいメソッドを使う必要はありませんね。 本来は、単に、.Value = .Value です。 Wendy02 さんの書かれたコードは随分すっきりしていますね。 私は、Sheet1を選択→E41:E54を選択してコピー、Sheet2を選択→アクティブセルを選択して貼り付け…とたて続けに Select がありますが、コピー元とコピー先が別のSheetなので、ある程度仕方がないのかなと思っていました。。。 大変参考になりました。ありがとうございました。