今回の質問に似た質問を以前もさせていただいておりますが
マクロ初心者なもので、どこをどのように修正したらよいかわからず再度投稿させていただいております。
※以前投稿した質問です。特定列を別シートへコピペしたい。
↓
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Excel(エクセル) VBAのoffsetの動き方について教えてください 3 2022/11/25 23:36
このQ&Aを見た人はこんなQ&Aも見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
あなたにとってのゴールデンタイムはいつですか?
一週間の中でもっともテンションが上がる「ゴールデンタイム」はいつですか? その逆で、一週間でもっとも落ち込むタイミングでも構いません。 よかったら教えて下さい!
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
プリン+醤油=ウニみたいな組み合わせメニューを教えて!
プリンと醤油を一緒に食べると「ウニ」の味がする! というような意外な組み合わせから、新しい味になる食べ物って色々ありますよね。 あなたがこれまでに試した「組み合わせメニュー」を教えてください。
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
VBA別シートの最終行の下行へ貼り付けされるようにしたいです。
その他(Microsoft Office)
-
Excel VBA、 別ブックの最終行セルへのコピー&値ペースト
Visual Basic(VBA)
-
別シートの最終行に貼り付けするマクロを教えてください。 シートYのE3からE15までをコピー シート
Excel(エクセル)
-
-
4
エクセル最終行の下に貼り付け
Excel(エクセル)
-
5
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
6
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
7
オートフィルタで抽出したデータを別シートの最終行に追加させたい。
Excel(エクセル)
-
8
VBA 空白行に転記する
Visual Basic(VBA)
-
9
VBA別シートの最終行の次行へ転記したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
エクセルの保護で、列の表示や...
-
エクセル マクロ 標準モジュー...
-
スプレッドシートでindexとIMPO...
-
文字の色も参照 VLOOKUP
-
エクセルの列の限界は255列以上...
-
Excel の複数シートの列幅を同...
-
ユーザーフォームのデータをそ...
-
【VBA】複数のシートの指定した...
-
Excel VBA ピボットテーブルに...
-
Excelでの並べ替えを全シートま...
-
Excelに自動で行の増減をしたい...
-
VBAで繰り返しコピーしながら下...
-
【VBA】ピボットテーブルを既存...
-
Excelのセルの色を変えた行(す...
-
【マクロ】対象データを別シー...
-
【VBA】シート名と見出しが一致...
-
【条件付き書式】countifsで複...
-
エクセルで、book全体の検索&...
-
SUMPRODUCTにて別シートのデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
文字の色も参照 VLOOKUP
-
エクセルの保護で、列の表示や...
-
Excel の複数シートの列幅を同...
-
Excelでの並べ替えを全シートま...
-
エクセル マクロ 標準モジュー...
-
VBAで繰り返しコピーしながら下...
-
エクセルの列の限界は255列以上...
-
【条件付き書式】countifsで複...
-
Excel VBA ピボットテーブルに...
-
エクセルで、チェックボックス...
-
SUMPRODUCTにて別シートのデー...
-
スプレッドシートでindexとIMPO...
-
VLOOKアップ関数の結果の...
-
【VBA】ピボットテーブルを既存...
-
【VBA】複数のシートの指定した...
-
Excelのセルの色を変えた行(す...
-
Excelに自動で行の増減をしたい...
-
エクセルで横並びの複数データ...
-
【エクセル】1列のデータを交...
おすすめ情報
①元データ(コピー元)シート名:「29.1月実績」
②貼り付け先シート名①:「元データ(201607~)」
③貼り付け先シート名②:「リスト」