今回の質問に似た質問を以前もさせていただいておりますが
マクロ初心者なもので、どこをどのように修正したらよいかわからず再度投稿させていただいております。
※以前投稿した質問です。特定列を別シートへコピペしたい。
↓
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も見ています
-
【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
【お題】 ・存在しそうで存在しないモノマネ芸人の名前を教えてください
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
メモのコツを教えてください!
メモを取るのが苦手です。 急いでメモすると内容がごちゃごちゃになってしまったり、ひどいときには全く読めない時もあります。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
VBA別シートの最終行の下行へ貼り付けされるようにしたいです。
その他(Microsoft Office)
-
Excel VBA、 別ブックの最終行セルへのコピー&値ペースト
Visual Basic(VBA)
-
別シートの最終行に貼り付けするマクロを教えてください。 シートYのE3からE15までをコピー シート
Excel(エクセル)
-
-
4
エクセル最終行の下に貼り付け
Excel(エクセル)
-
5
VBA別シートの最終行の次行へ転記したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの保護で、列の表示や...
-
ExcelのVlookup関数の制限について
-
Excel の複数シートの列幅を同...
-
【VBA】複数のシートの指定した...
-
Excel VBA ピボットテーブルに...
-
VBAで繰り返しコピーしながら下...
-
Excelのセルの色を変えた行(す...
-
エクセル マクロ 標準モジュー...
-
文字の色も参照 VLOOKUP
-
【条件付き書式】countifsで複...
-
Excelでの並べ替えを全シートま...
-
SUMPRODUCTにて別シートのデー...
-
Excelに自動で行の増減をしたい...
-
【マクロ】対象データを別シー...
-
EXCEL VBAのコンボボックスに取...
-
スプレッドシートでindexとIMPO...
-
エクセルの列の限界は255列以上...
-
オートフィルタ使用時にCOUNTIF...
-
エクセルで横並びの複数データ...
-
シートをまたぐ条件付き書式に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
文字の色も参照 VLOOKUP
-
エクセルの保護で、列の表示や...
-
Excel の複数シートの列幅を同...
-
Excelでの並べ替えを全シートま...
-
エクセル マクロ 標準モジュー...
-
VBAで繰り返しコピーしながら下...
-
エクセルの列の限界は255列以上...
-
【条件付き書式】countifsで複...
-
Excel VBA ピボットテーブルに...
-
エクセルで、チェックボックス...
-
SUMPRODUCTにて別シートのデー...
-
スプレッドシートでindexとIMPO...
-
VLOOKアップ関数の結果の...
-
【VBA】ピボットテーブルを既存...
-
【VBA】複数のシートの指定した...
-
Excelのセルの色を変えた行(す...
-
Excelに自動で行の増減をしたい...
-
エクセルで横並びの複数データ...
-
エクセルVBA 行追加時に自...
おすすめ情報
①元データ(コピー元)シート名:「29.1月実績」
②貼り付け先シート名①:「元データ(201607~)」
③貼り付け先シート名②:「リスト」