今回の質問に似た質問を以前もさせていただいておりますが
マクロ初心者なもので、どこをどのように修正したらよいかわからず再度投稿させていただいております。
※以前投稿した質問です。特定列を別シートへコピペしたい。
↓
https://oshiete.goo.ne.jp/qa/9605241.html
自分なりに、上記マクロを作成して試しに実行してみてなんとかうまく機能したのですが
仮としてそれぞれの2行目にコピペするようにとしか書けず、それを空白行からコピペするといった
式にしたいのです。↓
--------------------------------------------------------------------------------------------------------------------
Sub Sample3()
Worksheets("29.1月実績").Range("G2:Q1000").Copy Worksheets("元データ(201607~)").Range("A2")
Worksheets("29.1月実績").Range("T2:T1000").Copy Worksheets("元データ(201607~)").Range("M2")
Worksheets("29.1月実績").Range("V2:V1000").Copy Worksheets("元データ(201607~)").Range("O2")
Worksheets("29.1月実績").Range("H2:J1000").Copy Worksheets("リスト").Range("A2")
Worksheets("29.1月実績").Range("L2:P1000").Copy Worksheets("リスト").Range("D2")
End Sub
-------------------------------------------------------------------------------------------------------------------
①元データ(コピー元)シート名:「29.1月実績」
②貼り付け先シート名①:「元データ(201607~)」
③貼り付け先シート名②:「リスト」
★したいこと★
①の元データシートのG列からQ列の入力されているすべてのデータを②の「元データ(201607~)」シートA列の入力されている最終行の下からコピペしたい。
②の元データシートのT列の入力されているすべてのデータを②の「元データ(201607~)」シートM列の入力されている最終行の下からコピペしたい。
③の元データシートのV列の入力されているすべてのデータを②の「元データ(201607~)」シートO列の入力されている最終行の下からコピペしたい。
④の元データシートのH列からJ列の入力されているすべてのデータを②の「リスト」シートA列の入力されている最終行の下からコピペしたい。
⑤の元データシートのL列からP列の入力されているすべてのデータを②の「リスト」シートD列の入力されている最終行の下からコピペしたい。
画像も添付いたしますが、説明不足な点あるかと存じますので、質問頂ければ幸いです。
何卒、ご教授願います。
No.5ベストアンサー
- 回答日時:
No3です。
>さっそく実行してみたのですが、コピー先に書き込まれませんでした。。
>また、私の説明が不足&わかりづらく、ちゃんとお伝えできていない可能性が大きい気がしたので
>再度下記に書かせていただきます。
全くなにも、コピーされないのでしょうか?
念のため、以下のマクロを実行していただけますか。
内容は特に変わっていません。
MsgBox ("maxrow1=" & maxrow1 & " maxrow2=" & maxrow2 & " maxrow3=" & maxrow3) '①追加
を追加しただけです。
--------------------------------------
Option Explicit
Public Sub Sample3()
Const sh1 As String = "29.1月実績" 'コピー元シート
Const sh2 As String = "元データ(201607~)" 'コピー元シート
Const sh3 As String = "リスト" 'コピー元シート
Dim maxrow1 As Long 'コピー元最大行
Dim maxrow2 As Long 'コピー先最大行
Dim maxrow3 As Long 'コピー先最大行
Dim rg1 As String
Dim rg2 As String
Dim rg3 As String
maxrow1 = Worksheets(sh1).Cells(Rows.Count, "G").End(xlUp).Row 'コピー元のG列最大行取得
maxrow2 = Worksheets(sh2).Cells(Rows.Count, "A").End(xlUp).Row 'コピー先のA列最大行取得
maxrow3 = Worksheets(sh3).Cells(Rows.Count, "A").End(xlUp).Row 'コピー先のA列最大行取得
MsgBox ("maxrow1=" & maxrow1 & " maxrow2=" & maxrow2 & " maxrow3=" & maxrow3) '①追加
rg1 = "G2:Q" & maxrow1
rg2 = "A" & (maxrow2 + 1)
Worksheets(sh1).Range(rg1).Copy Worksheets(sh2).Range(rg2)
rg1 = "T2:T" & maxrow1
rg2 = "M" & (maxrow2 + 1)
Worksheets(sh1).Range(rg1).Copy Worksheets(sh2).Range(rg2)
rg1 = "V2:V" & maxrow1
rg2 = "O" & (maxrow2 + 1)
Worksheets(sh1).Range(rg1).Copy Worksheets(sh2).Range(rg2)
rg1 = "H2:J" & maxrow1
rg3 = "A" & (maxrow3 + 1)
Worksheets(sh1).Range(rg1).Copy Worksheets(sh3).Range(rg3)
rg1 = "L2:P" & maxrow1
rg3 = "D" & (maxrow3 + 1)
Worksheets(sh1).Range(rg1).Copy Worksheets(sh3).Range(rg3)
End Sub
----------------------------------------------------
上記を実行した場合に
maxrow1:29.1月実績の最終行・・・・1000のはず
maxrow2:元データ(201607~)の最終行・・・・この次の行へコピーされるはず
maxrow3:リストの最終行・・・・この次の行へコピーされるはず
上記のmaxrow1,maxrow2,maxrow3,は期待通りの値が表示されていますでしょうか?
お忙しい中、早速再度のご教授ありがとうございます。
新しくご教授頂いたマクロで無事、解決いたしました。
本当にいつも助かっております。感謝いたします。
No.4
- 回答日時:
#2の回答者です。
私が書いたことは、まず、全体のコードを見やすくするところから始まるものだと考えたのです。
>ご教授頂いたマクロで実行してみたのですがうまく転記されませんでした。
それは、とどのつまり、私のコードの読み違えが発生しているということです。私の書いたコードをいくら説明しても、解決には至らないと思います。
私が示したいことは、長いコードも、変数で登録してみじかくし、そこから、コードでどこが問題かを調べていく、ということだけです。
それは、プロの人でも、やっていることです。
そこで、私は、なるべく、もとのコードに近いスタイルで、加工してみました。
こちらが、ピッタリ合うものを作り上げるというのは、条件が全てわかっていないと無理だと思っています。
> Set sh_291 = Worksheets("29.1月実績")
シート名は短い変数にまとめてしまう。
> iRw = .Cells(Rows.Count, "G").End(xlUp).Row
これはもとのデータの最後尾までを探しているのです。
(なお、私は、日本語の2バイト文字は変数に使いませんので、わかりにくいのかもしれません)Rw は、Row =行 の意味です。i, j, k と接頭辞をつけて、
iRw, jRw, kRw としました。
.Range("G2:Q" & iRw).Copy
ごらんになってわかるように、G2:Q◯ ◯の中には数字が入ります。
この範囲をコピーするという意味です。
だから、
iRw = .Cells(Rows.Count, "G").End(xlUp).Row
G列の最後の行から[↑(アップキー)]で、データのあるところまでを探せという意味です。この意味の解釈が違えば、ぜんぜんコピーなどなされません。
さて、これ以上の説明をしても、実際のコードで試してみるしかありません。
それを、「デバッギング」といい、
ローカルウィンドウを、画面の下において、[F8](ファンクションキー)で、1つずつ進みながら、変数は、何を確保しているのか、とか見ながら進めていくものなのです。
ピッタリとご要望にあったコードが他の回答者さんから出れば、それはそれで良いと思いますが、デバッグの方法を知らないといつまでも同じ繰り返しになってしまうと思っています。あまり、そのようなお気持ちがないのでしたら、どうぞスルーして構いません。
添付画像は、デバッグの様子をみたものです。画面下にあるのは、ローカルウィンドウです。
無知な私にご丁寧にご教授いただきありがとうございます。
「デバッギング」は教えていただいたようにやってみたのですが
まだ知識不足な私にはコードの簡素化含め、まだまだ勉強しなければわからない領域なので
今回、ご教授頂いた内容を今後参考にさせていただければと思います。
また、何かありましたらご教授頂ければ幸いです。
No.3
- 回答日時:
以下のマクロを標準モジュールへ登録し実行してください。
このマクロは、2回実行すると、2回目は、同じデータがコピー先に追加されますのでご注意ください。
(コピー先は上書きにはなりません)
-----------------------------------------------
Option Explicit
Public Sub Sample3()
Const sh1 As String = "29.1月実績" 'コピー元シート
Const sh2 As String = "元データ(201607~)" 'コピー元シート
Const sh3 As String = "リスト" 'コピー元シート
Dim maxrow1 As Long 'コピー元最大行
Dim maxrow2 As Long 'コピー先最大行
Dim maxrow3 As Long 'コピー先最大行
Dim rg1 As String
Dim rg2 As String
Dim rg3 As String
maxrow1 = Worksheets(sh1).Cells(Rows.Count, "G").End(xlUp).Row 'コピー元のG列最大行取得
maxrow2 = Worksheets(sh2).Cells(Rows.Count, "A").End(xlUp).Row 'コピー先のA列最大行取得
maxrow3 = Worksheets(sh3).Cells(Rows.Count, "A").End(xlUp).Row 'コピー先のA列最大行取得
rg1 = "G2:Q" & maxrow1
rg2 = "A" & (maxrow2 + 1)
Worksheets(sh1).Range(rg1).Copy Worksheets(sh2).Range(rg2)
rg1 = "T2:T" & maxrow1
rg2 = "M" & (maxrow2 + 1)
Worksheets(sh1).Range(rg1).Copy Worksheets(sh2).Range(rg2)
rg1 = "V2:V" & maxrow1
rg2 = "O" & (maxrow2 + 1)
Worksheets(sh1).Range(rg1).Copy Worksheets(sh2).Range(rg2)
rg1 = "H2:J" & maxrow1
rg3 = "A" & (maxrow3 + 1)
Worksheets(sh1).Range(rg1).Copy Worksheets(sh3).Range(rg3)
rg1 = "L2:P" & maxrow1
rg3 = "D" & (maxrow3 + 1)
Worksheets(sh1).Range(rg1).Copy Worksheets(sh3).Range(rg3)
End Sub
----------------------------------------------------------------
いつもご教授頂き、感謝しております。
ありがとうございます。
さっそく実行してみたのですが、コピー先に書き込まれませんでした。。
また、私の説明が不足&わかりづらく、ちゃんとお伝えできていない可能性が大きい気がしたので
再度下記に書かせていただきます。
【補足】
①コピー元:"29.1月実績"シートのデータは1月分しか入っておらずA2:W1000までデータがあります。
②コピー先①:"元データ(201607~)"は1月以前のデータが入っている為、以前のデータが入っている最終行の下から貼り付けたい。
③コピー先②:"リスト"シートもコピー先①同様、1月以前のデータが入っている為、以前のデータが入っている最終行の下から貼り付けたい。
★したいこと★→①④⑤の文章を修正しました。
①の元データシートのG列からQ列の入力されているすべてのデータを②の「元データ(201607~)」シートA列からK列の入力されている最終行の下からコピペしたい。
②の元データシートのT列の入力されているすべてのデータを②の「元データ(201607~)」シートM列の入力されている最終行の下からコピペしたい。
③の元データシートのV列の入力されているすべてのデータを②の「元データ(201607~)」シートO列の入力されている最終行の下からコピペしたい。
④の元データシートのH列からJ列の入力されているすべてのデータを②の「リスト」シートA列からC列の入力されている最終行の下からコピペしたい。
⑤の元データシートのL列からP列の入力されているすべてのデータを②の「リスト」シートD列からH列の入力されている最終行の下からコピペしたい。
度々申し訳ありませんが、再度ご教授願います。
No.2
- 回答日時:
文書の一例を取り上げると
①の元データシートのG列からQ列の入力されている[すべてのデータ]を
②の「元データ(201607~)」シートA列の入力されている最終行の下へ、
コピペしたい。
最初に、引っかかるのは「すべてのデータ」という言葉です。
Worksheets("29.1月実績").Range("G2:Q1000").Copy
これがすべてのデータというのは、そのデータの最後までということだと思います。
マクロのコードが読めるようでしたら、私はこう解釈しました。
'//
Sub Sample3r()
Dim sh_291 As Worksheet
Dim shM As Worksheet
Dim shL As Worksheet
Dim iRw As Long '最後の行
Dim jRw As Long 'コピー&ペースト先の最後の行
Dim kRw As Long
Set sh_291 = Worksheets("29.1月実績")
Set shM = Worksheets("元データ(201607~)")
jRw = shM.Cells(Rows.Count, "A").End(xlUp).Row + 1
Set shL = Worksheets("リスト")
kRw = shL.Cells(Rows.Count, "A").End(xlUp).Row + 1
With sh_291
iRw = .Cells(Rows.Count, "G").End(xlUp).Row
.Range("G2:Q" & iRw).Copy shM.Range("A" & jRw)
.Range("T2:T" & iRw).Copy shM.Range("M" & jRw)
.Range("V2:V" & iRw).Copy shM.Range("O" & jRw)
.Range("H2:J" & iRw).Copy shL.Range("A" & kRw)
.Range("L2:P" & iRw).Copy shL.Range("D" & kRw)
End With
End Sub
なお、シートを変数に登録すれば見やすくなるはずです。
ご教授いただきありがとうございます。
申し訳ありません、なんとなくしかコードが読めず。。。
お手数をおかけいたしますが、簡単にご説明いただいてもよろしいでしょうか?
また、ご教授頂いたマクロで実行してみたのですがうまく転記されませんでした。
原因は何が考えられますでしょうか?
度々恐縮ではございますが、何卒ご教授願います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ちょっと先の未来クイズ第2問
9月9日(月)に発表される「第3回子どもマネー川柳」に入賞する川柳を考えてこちらに投稿してください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
Excel VBA、 別ブックの最終行セルへのコピー&値ペースト
Visual Basic(VBA)
-
別シートの最終行に貼り付けするマクロを教えてください。 シートYのE3からE15までをコピー シート
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのブック分割マクロを...
-
Excel VBA ピボットテーブルに...
-
【条件付き書式】countifsで複...
-
VBA 抽出後、別シートにコピー
-
文字の色も参照 VLOOKUP
-
"りんご"と"みかん"というシー...
-
エクセルの保護で、列の表示や...
-
エクセルで、チェックボックス...
-
エクセル マクロ 標準モジュー...
-
Excel 2段組み
-
ExcelのVlookup関数の制限について
-
Excelで、ファイル名、シート名...
-
Excelでの並べ替えを全シートま...
-
検索に引っ掛からない文字行を...
-
Excelで条件別にシートを振り分...
-
【VBA EXCEL データ有無 行 判...
-
A列をK列に変更
-
エクセル マクロで質問です
-
エクセル関数について、特定の...
-
VBA 元データに上書きする 列番...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
エクセルの保護で、列の表示や...
-
文字の色も参照 VLOOKUP
-
Excel の複数シートの列幅を同...
-
VBAで繰り返しコピーしながら下...
-
【条件付き書式】countifsで複...
-
エクセル マクロ 標準モジュー...
-
エクセルの列の限界は255列以上...
-
Excelでの並べ替えを全シートま...
-
エクセルで、チェックボックス...
-
エクセルマクロを教えてほしい...
-
SUMPRODUCTにて別シートのデー...
-
Excel VBA ピボットテーブルに...
-
エクセルのブック分割マクロを...
-
【VBA】複数のシートの指定した...
-
excel 複数のシートの同じ場所...
-
Excelに自動で行の増減をしたい...
-
スプレッドシートでindexとIMPO...
-
エクセルで横並びの複数データ...
-
エクセル複数シートのデータを...
おすすめ情報
①元データ(コピー元)シート名:「29.1月実績」
②貼り付け先シート名①:「元データ(201607~)」
③貼り付け先シート名②:「リスト」