重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【終了しました】教えて!gooアプリ版

同ブックの別シートの表から、特定の列を複数列コピーしたい。

VBA初心者です。
同ブックの別シートの表から、特定の列を複数列コピーして
Sheet2に貼り付けたいのですが、このコードでは具体的に何がエラーなのかわかりません。
調べても同じような例はなかったので、 
問題点を教えてください。
なにとぞよろしくおねがいします。


ThisWorkbook.Worksheets("商品名一覧(sheet1)").Range("B5", "D5", "F5", "G5", "H5").End(xlDown).Copy _
Destination:=Sheets("商品発注場所(sheet2)").Range("B5")

A 回答 (5件)

あなたの提示するシート名がころころ変わって、よくわかりませんでしたので、


コピー元のシート名:sheet1
コピー先のシート名:sheet2
としました。
以下のようにしていてください。
sheet1のB列の最終行が、D,F,G,Hの最終行と一致している前提です。
(各列に空白はない前提)

Public Sub sample()
Dim maxrow As Long
Dim rg As String
maxrow = Worksheets("sheet1").Cells(Rows.Count, "B").End(xlUp).Row
rg = "B5:B" & maxrow & ",D5:D" & maxrow & ",F5:F" & maxrow & ",G5:G" & maxrow & ",H5:H" & maxrow
Worksheets("sheet1").Range(rg).Copy Destination:=Sheets("sheet2").Range("B5")
End Sub
    • good
    • 1
この回答へのお礼

助かりました

説明の不足が多く、申し訳ありません。
変数に指定する というのが私にとっては不慣れというか苦手で。
ですがこちらの変数指定を応用して、他にやりたいことなども
組み込み、思い通りに作ることが出来ました。
スタイリッシュなコードで感動です。
今回はtatsumaru77さんをベストアンサーとさせていただきます。
ありがとうございます

お礼日時:2020/12/04 16:36

No.3 です。


補足です。
さっきのコードだと、「商品名一覧」以外のシートがアクティブだとエラーになるので、どっからでも呼び出せるよう修正しました。

With Sheets("商品名一覧(sheet1)")
.Range( _
"B5:B" & .Range("B5").End(xlDown).Row & "," & _
"D5:D" & .Range("D5").End(xlDown).Row & "," & _
"F5:F" & .Range("F5").End(xlDown).Row & "," & _
"G5:G" & .Range("G5").End(xlDown).Row & "," & _
"H5:H" & .Range("H5").End(xlDown).Row & "").Copy _
Sheets("商品発注場所(sheet2)").Range("B5")
End With
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
貴殿のコードを一度動かしてみました。
きれいにコピーしてきてくれました。ありがとうございます。
"B5:B"という書き方、参考にさせていただきます。
どこからでも呼べるようにも補足までありがとうございます。
Ggrksdqnさんはとてもお優しい人ですね。
感謝です

お礼日時:2020/12/04 16:35

>Range("B5", "D5", "F5", "G5", "H5").End(xlDown).Copy


こういうことは出来ないです。

<参考コード>

Sheets("商品名一覧(sheet1)").Range( _
"B5:B" & Range("B5").End(xlDown).Row & "," & _
"D5:D" & Range("D5").End(xlDown).Row & "," & _
"F5:F" & Range("F5").End(xlDown).Row & "," & _
"G5:G" & Range("G5").End(xlDown).Row & "," & _
"H5:H" & Range("H5").End(xlDown).Row & "").Copy _
Sheets("商品発注場所(sheet2)").Range("B5")
    • good
    • 1

シート名が


"商品名一覧(sheet1)" と
"商品発注場所(sheet2)" 
であるシートは、実際に存在するのでしょうか?
    • good
    • 1
この回答へのお礼

質問上、わかりやすくするのに(sheet1.2)と記述しました。
逆にわかりにくくなってたらすみません。

お礼日時:2020/12/04 13:56

こんにちは



>具体的に何がエラーなのかわかりません。
エラーの際に、エラーメッセージが表示されるはずです。
まず、その内容を確認しましょう。エラーの直接の原因が示されているはずです。

その辺の情報がないので、特定はできませんが、ありそうなのは
 ・シート名が正しくない
 ・Rangeの指定がおかしい
といったあたりでしょうか。

特に後者の
>Range("B5", "D5", "F5", "G5", "H5")
は確実にエラーになります。
 Range("B5, D5, F5, G5, H5")
のような記述であればエラーにはなりませんが、End(xlDown)としているので、仮にエラーが出なくても、質問者様の意図とは違う結果になるのではないかと懸念します。

とは言っても、実際になさりたいことが何なのかわかっていませんので、違うとは限りませんけれど…
    • good
    • 1
この回答へのお礼

お早い回答ありがとうございます。
不足ですみません。

("商品名一覧(sheet1)")に、A列からH列までの表があり、
4行目を見出し名として、5行目から項目が入っています。

このB,D,F,G,H列を5行目から最終行までコピーして、
("商品発注場所(sheet2)")のB,C,D,E,F列の5行目にペーストしたい
ということです。

掲題コードから↓にコードを直して動かしてみたのですが、
B列最後の1つのセルしかコピペしてきてくれません。
ThisWorkbook.Worksheets("データ項目一覧").Range("B5,D5,F5,G5,H5").End(xlDown).copy _
Destination:=Sheets("項目使用テーブル").Range("B5")

どう記述すれば他の列も含め、5行目から最終行までコピーしてくれでしょうか・・
これで意図がおわかりいただければよいのですが・・
拙くてすみません。よろしくおねがいします。

お礼日時:2020/12/04 13:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!