こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBA 別シートの複数のセルの値をコピーする方法

いつもお世話になります。

Dim sh1, sh2 As Worksheet
Set sh1 = Worksheets("sheet1")
Set sh2 = Worksheets("sheet2")

sh1.Range("C6").Value = sh2.Range("F5").Value
として、1つのセルの値ならコピーできるのですが、
sh1.Range("C6:C10").Value = sh2.Range("F5;F9").Value
としても、セルの値を持ってくることができません。
どのように書けば良いのでしょうか?

ちなみに今は、
sh2.Range("F5:F9").Copy
sh1.Range("C5:C9").PasteSpecial Paste:=xlValues
としているのですが、上記だとセルを範囲指定してしまって作業が見えるのでカッコ悪いのです。

投稿日時 - 2005-01-21 11:57:24

QNo.1178554

暇なときに回答ください

質問者が選んだベストアンサー

7-samuraiの質問ですみません。
No5のimogasiさん、いつもお世話様です。

Sub test01()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("sheet2")
Set sh2 = Worksheets("sheet1")
sh1.Range("c1:c5").Value = sh2.Range("A1:A5").Value
End Sub

で、うまくいきますよ。
複数セルの場合Valueは省略できないようです。

投稿日時 - 2005-01-22 01:01:23

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.7

#4のshishishishiさんへ:ありがとうございました。
Valueがいるのですね。
前も同じことをおっしゃるケースがあり、疑問を持ったことがあって、なぜかなと思いつつ。
小生はValueの省略の癖がついているのと、Cellsの愛用のため気がつきませんでした。
7-samurai さんへ:回答者へのお礼を書かせて貰いましたが、済みません。

投稿日時 - 2005-01-22 07:33:32

ANo.5

私は馬鹿の1つ覚えで、こう言う場合
For i = 6 To 10
sh1.Cells(i, "C") = sh2.Cells(i - 1, "F")
Next i
で通してます。
Sub test01()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("sheet2")
Set sh2 = Worksheets("sheet1")
'For i = 6 To 10
'sh1.Cells(i, "B") = sh2.Cells(i - 1, "A")
'Next i
sh1.Range("c1:c5") = sh2.Range("A1:A5")
End Sub
#4さんの事由がなくても、上記で私の場合は上手く行きませんでした。
コメントアウトした部分は復活すると上手く行きます。

投稿日時 - 2005-01-21 22:58:06

お礼

いつもありがとうございます。
私の場合、For Nextを使うと間違えることが多く、いつも恐る恐る使っているので、普通に使っているimogasiさんがうらやましいです。

> 7-samurai さんへ:回答者へのお礼を書かせて貰いましたが、済みません。
私のつまらない質問で、いつもお世話になっている回答者の皆様の情報交換の場にお役立ていただけるなら、非常に光栄です。

投稿日時 - 2005-01-22 10:52:58

ANo.4

> sh1.Range("C6:C10").Value = sh2.Range("F5;F9").Value
> としても、セルの値を持ってくることができません。

変だと思ってみてみました。

そりゃそうでしょう。F5;F9のところがコロンじゃなくセミコロンになってますから。

投稿日時 - 2005-01-21 19:37:13

お礼

ものすごく、単純なミスだったのですね・・・。
お恥ずかしい。

一人ごと:以前も同じ形で試してみてだめだったけど、同じ間違いをしていたのかなあ。

P.S> 7-samuraiの質問ですみません。
私のつまらない質問で、いつもお世話になっている回答者の皆様の情報交換の場にお役立ていただけるなら、非常に光栄です。

投稿日時 - 2005-01-22 10:34:57

ANo.3

Appliction.ScreenUpdating=False
sh2.Range("F5:F9").Copy
sh1.Range("C5:C9").PasteSpecial Paste:=xlValues
Appliction.ScreenUpdating=True

Application.ScreenUpdating = False
sh2.Range("F5:F9").Copy
sh1.Range("C5:C9").PasteSpecial Paste:=xlValues
Application.ScreenUpdating = True
の誤りでした

投稿日時 - 2005-01-21 12:20:58

お礼

教えていただいたコードは、今回の質問のみならず、色々なシーンでつかえそうですね。
ありがとうございました。

投稿日時 - 2005-01-22 10:23:42

ANo.2

こんにちは。

↓でどうでしょうか?
--------------------
Sub test()
Dim sh1 As Worksheet, sh2 As Worksheet

Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")

sh2.Range("F5:F9").Copy _
Destination:=sh1.Range("C5")

End Sub

投稿日時 - 2005-01-21 12:17:18

お礼

また一つ、新しいコードを覚えました。
ありがとうございました。

投稿日時 - 2005-01-22 10:53:52

ANo.1

このコードに対して一番簡単な方法は
Appliction.ScreenUpdating=False
sh2.Range("F5:F9").Copy
sh1.Range("C5:C9").PasteSpecial Paste:=xlValues
Appliction.ScreenUpdating=True
なたは
For I = 6 To 10
Worksheets("sheet2").Cells(I - 1, 6).Value = Worksheets("sheet1").Cells(I, 3).Value
Next

投稿日時 - 2005-01-21 12:16:04

あなたにオススメの質問