• ベストアンサー

エクセル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 としているのですが、上記だとセルを範囲指定してしまって作業が見えるのでカッコ悪いのです。

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

  • ベストアンサー
回答No.6

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は省略できないようです。

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.7

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

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.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さんの事由がなくても、上記で私の場合は上手く行きませんでした。 コメントアウトした部分は復活すると上手く行きます。

7-samurai
質問者

お礼

いつもありがとうございます。 私の場合、For Nextを使うと間違えることが多く、いつも恐る恐る使っているので、普通に使っているimogasiさんがうらやましいです。 > 7-samurai さんへ:回答者へのお礼を書かせて貰いましたが、済みません。 私のつまらない質問で、いつもお世話になっている回答者の皆様の情報交換の場にお役立ていただけるなら、非常に光栄です。

回答No.4

> sh1.Range("C6:C10").Value = sh2.Range("F5;F9").Value > としても、セルの値を持ってくることができません。 変だと思ってみてみました。 そりゃそうでしょう。F5;F9のところがコロンじゃなくセミコロンになってますから。

7-samurai
質問者

お礼

ものすごく、単純なミスだったのですね・・・。 お恥ずかしい。 一人ごと:以前も同じ形で試してみてだめだったけど、同じ間違いをしていたのかなあ。 P.S> 7-samuraiの質問ですみません。 私のつまらない質問で、いつもお世話になっている回答者の皆様の情報交換の場にお役立ていただけるなら、非常に光栄です。

  • big_fool
  • ベストアンサー率22% (43/193)
回答No.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 の誤りでした

7-samurai
質問者

お礼

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

回答No.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

7-samurai
質問者

お礼

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

  • big_fool
  • ベストアンサー率22% (43/193)
回答No.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

関連するQ&A

  • VBA:Offsetから値が貼付けれない

    はじめまして。 VBAを利用してマクロを作っているのですが、 Range("a6:l6").Copy Worksheets("結果シート").Range("A65536").End(xlUp).Offset(1) というのは動くのですが、結果シートへの貼付けを「値」で行いたいと思い、 以下の通りValueを指定しても動きません。 Range("a6:l6").Copy Worksheets("結果シート") .Range("A65536").End(xlUp).Offset(1).value PasteSpecialを使うと良いのかと思い、 Range("a6:l6").Copy Worksheets("結果シート") .Range("A65536").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues としてもエラーが出ます。 数式の結果を取得して、別のシートの空白セルを探し、「値」として張付ける。 というのがしたいのですが、なにか上手い方法があれば、ご教授お願いします。

  • エクセル2010 マクロで値のみコピー

    こんばんは、エクセル2010を使っています。 マクロでデータを値のみをコピーしたいのですが、うまくいきません。 文は 以下の様なものです。 Sub ボタン1_Click() Worksheets("Sheet4").Range("e1").Copy Worksheets("sheet2").Range("b1").PasteSpecial Paste:=xlValues End Sub マクロの画面を閉じようとした時に、Pasteの部分が選択され  コンパイルエラー 修正候補:ステートメントの最後 と言うダイアログボックスが出てしまいます。 ご存知の方教えて頂けないでしょうか、よろしくお願いします。 ※ ちなみに Worksheets("Sheet4").Range("e1").Copy Worksheets("sheet2").Range("b1")  ならちゃんとコピーされるのですが、コピー元の数式がコピーされるので、値のみをコピーしたいのです。

  • 助けてください!!VBA初心者なんですが、複数範囲をコピーして指定列に貼り付けたいのですが

    助けてください!!VBA初心者なんですが、複数範囲をコピーして指定列に貼り付けたいのですが、エラーが出てしまいます。 説明が下手なので図のようなもので 下図1  ABCDE 1あいうえお 2あいうえお 3あいうえお 4あいうえお 下図2  ABCDEFGHIJ 1あ い う  え お 2あ い う  え お 3あ い う  え お 4あ い う  え お まずは下図1のように下図2の様に指定した列に貼りたいのですが。 Range("A1:E5").Copy Range("A1,C1,E1,H1").PasteSpecial Paste:=xlValues でエラーになり別々にと考えて Range("A1:A5,B1:B5,C1:C5,D1:D5,E1:E5,").Copy Range("A1,C1,E1,H1").PasteSpecial Paste:=xlValues でも無理でした…なにかいい方法があれば教えてください。 単純に Range("A1:A5").Copy Range("A1").PasteSpecial Paste:=xlValues Range("B1:B5").Copy Range("C1").PasteSpecial Paste:=xlValues Range("C1:C5").Copy Range("E1").PasteSpecial Paste:=xlValues Range("D1:D5").Copy Range("H1").PasteSpecial Paste:=xlValues Range("E1:E5").Copy Range("a1").PasteSpecial Paste:=xlValues とするしかないんでしょうか? なにかいい方法があればお教えください!!

  • エクセル 何故かシート間の値のコピーが出来ない

    いつもお世話になります。 開いているブックのシート「リスト1~3」に、Book1.xlsの「リスト1~3」の値をコピーする為に、下記のマクロを作成しました。 Dim SH1, SH2, SH3, SH4, SH5, SH6 As Worksheet Set SH1 = ThisWorkbook.Worksheets("リスト1") Set SH2 = ThisWorkbook.Worksheets("リスト2") Set SH3 = ThisWorkbook.Worksheets("リスト3") Set SH4 = Workbooks("Book1.xls").Worksheets("リスト1") Set SH5 = Workbooks("Book1.xls").Worksheets("リスト2") Set SH6 = Workbooks("Book1.xls").Worksheets("リスト3") 'リスト1をコピーする D = SH4.Range("A1").CurrentRegion.Rows.Count E = SH4.Range("A1").CurrentRegion.Columns.Count SH1.Range(Cells(1, 1), Cells(D, E)).Value = SH4.Range("A1").CurrentRegion.Value 'リスト2をコピーする F = SH5.Range("A1").CurrentRegion.Rows.Count G = SH5.Range("A1").CurrentRegion.Columns.Count SH2.Range(Cells(1, 1), Cells(F, G)).Value = SH5.Range("A1").CurrentRegion.Value 'リスト3をコピーする H = SH6.Range("A1").CurrentRegion.Rows.Count I = SH6.Range("A1").CurrentRegion.Columns.Count SH3.Range(Cells(1, 1), Cells(H, I)).Value = SH6.Range("A1").CurrentRegion.Value 以上を実行すると、「アプリケーション定義またはオブジェクト定義のエラーです」とエラーメッセージが出てしまいます。 それぞれのシートの処理の時に、 SH1.Select SH2.Select SH3.Select を入れて、シートを選択してから実行すると問題なく動くのですが、何故このようなことが起こるのでしょう?

  • VBAで値だけコピー

    EXCEL VBAで別ファイルの値をコピーして貼り付けをしているのですが、セルの中の一部のみを貼り付けしたいと思いますが、 どのようにしたらいいのでしょうか? 関数では取り出すことができたのですが、できればVBAの中で処理できればと思っています。 =IFERROR(MID(Z2,FIND("6",Z2),FIND(" has",Z2)-FIND("6",Z2)),"") やりたいこと 1.左から見て6~空白までの値のみを貼り付けしたい 2.エラーの時は空白にしたい Sub SO_Copy() Dim ws As Worksheet Set ws = Worksheets("Sheet1") Dim FilePath, FileName As String 'C8&C9にファイルパス/ファイル名を入力 FilePath = ws.Range("C8").Value & "\" & ws.Range("C9").Value FileName = ws.Range("C9").Value Workbooks.Open FilePath 'Z2~コピーして、"メール送信.xlsm"のD11以降に値だけ貼り付け Range("Z2", Range("Z2").End(xlDown)).Copy Windows("メール送信.xlsm").Activate Range("D11").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Workbooks(FileName).Close End Sub

  • 初心者です。VBでセルの値を違うシートに連続コピーする方法を教えてください

    ・A、Bシートが有りBシートのV17からAU17迄数値が入っています。この値をAシートのL6からV6、L10からV10、S14からAU17へ一個づつコピーしたいのですが、以下の様な式しか私には出来ません。 Sheets("B").Activate Range("v17").Copy Sheets("A").Activate Worksheets("A").Range("L6").Select Selection.PasteSpecial Paste:=xlValues ・For文とかで繰り返しできる方法を教えて下さい。宜しく御願いします。

  • セルをコピーしてシート名を取得 【VBA】

    こんばんわ。 エクセルのVBAについて、どうしてもわからなくなったので質問させて下さい。 マクロの内容は 1.一番前のシート(名前はSheet1ではありません。)のボタン35をクリック 2.シートをコピーして3番目に置く。 3.値にする。 4.シート名をセルの"DE16"に入っている値にする。 5.ボタンを消す。 以下の内容になりましたが、名前のところでデバックがおこります。 Sub ボタン35_Click() Worksheets(1).Select Worksheets(1).Copy After:=Sheets(3) Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Worksheets(3).Select Worksheets(3).Name = Range("DE16").Value ActiveSheet.Shapes("Button 11").Select Selection.Delete Application.CutCopyMode = False End Sub どなたかお知恵を貸して下さい。

  • .copy で値だけの貼付け方法を教えてください

    セル結合してある備考欄の値を、別のブックのセルに貼り付けます。 貼り付けるブックのセルには罫線があるので、これを消さずに、値だけ貼り付けたいです。 Workbooks(MyFName).Worksheets("部品表").Range("P" & j + 5).Copy Workbooks(MyFName2).Worksheets("PartsList").Range("M" & k + 1) とすると、罫線が消えてしまうので おしりに .PasteSpecial Paste:=xlValues を付けてみましたら、赤く反転しエラーになってしまいました。 どうしたら、.copyで値のコピー貼付けができますか どうかご指導ください

  • 【VBA】コピー&複数個所のペースト繰り返し

    下記のように、1つの値をコピーし、別シートの複数個所(同じ列の違う行)へ順次ペーストしたいのですが、貼付けデータやペースト箇所が増えた場合でも対応できるようなVBAを教えてください。 よろしくおねがいいたします。 ========================================================= Sub コピペ() '←1人目をコピー Worksheets("“コピー元シート”").Range("B7").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B9", "B37", "B65", "B93", "B121", "B149", "B177").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←2人目をコピー Worksheets("“コピー元シート”").Range("B8").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B11", "B39", "B67", "B95", "B123", "B151", "B179").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←3個の値をコピー Worksheets("“コピー元シート”").Range("B9").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B13", "B41", "B69", "B97", "B125", "B153", "B181").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←4個の値をコピー Worksheets("“コピー元シート”").Range("B10").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B15", "B43", "B71", "B99", "B127", "B155", "B183").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←5個の値をコピー Worksheets("“コピー元シート”").Range("B11").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B17", "B45", "B73", "B101", "B129", "B157", "B185").Select Selection.PasteSpecial Paste:=xlPasteFormulas End Sub

  • 【VBA】シートのコピー ~ 値に直す

    大変お世話になります。 VBAのコードについてご教示いただけませんでしょうか。 ■やりたいこと -------------------------------------------------------------------------------- (1) 【原紙】Sheetを、同ブック内の新規シートへコピー (2) 新規シートのシート名を、[セル:B5]の値に変更 (3) 新規シートにコピーされてきた数式を値に変更 ■作成してみたコード -------------------------------------------------------------------------------- Sub SheetCopy1() Worksheets("【原紙】Sheet").Copy Before:=Worksheets("【原紙】Sheet") ActiveSheet.Name = Range("B5").Value Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub -------------------------------------------------------------------------------- 本日初めてVBAに触れた者が、見よう見まねで『■やりたいこと』を並べたコードのため、やはりエラーになってしまいます。 上記は、どこをどう直せばよろしいでしょうか。 もしくは、そもそも間違っておりますでしょうか。 ご教示いただきたく、何卒よろしくお願いいたします。 ◎もし可能でしたら、併せてご教示ください◎ ---------------------------------------------------------------------------- (1)の動作をさせるために、【原紙】Sheetの任意の場所に”ボタン”を設置するのですが、新規シートにもコピーされるため、そのコピー側のボタンを削除できたら…とも考えていますが、そういう動作も可能でしょうか。

専門家に質問してみよう