「マクロ コピペ」「マクロ 転記」で検索して当ブログをご覧いただいております。
Excelマクロでのコピー(転記)の基礎をまとめてみました。
※カフェにて by α6400
Excelマクロでコピー
次のようなデータがあり、シート「4月」の日付(セルA2)をシート「data」のセルA2へコピーするとします。
(シート「4月」には、25行までデータが入っています)
人の手でやるなら、Ctrl+Cで選択して、Ctrl+Vで貼り付ければ済む話です。
しかしながら、それを繰り返さなければいけません。
もちろん、範囲をまとめて選択して、コピー、貼り付けをすることもできますが、シートが複数あったり、ファイルに分かれていたり、毎月、毎週、毎日やらなければいけないとなると大変です。
コピペだけで済む仕事はできるだけ自動化したいものであり、そのほうが人よりも速くて正確にできます。
人とパソコンの役割分担は、それぞれが得意なことをやるのが原則です。
Excelマクロでコピーをする場合、主に2つに方法があります。
その1つは、copyを使う方法。
こう書きます。
Sub copy() Worksheets("4月").Range("a2").copy Worksheets("data").Range("a2") End Sub
それぞれ、このような意味です。
実行するとこうなります。
他のセルも同様に書けばいいのですが、それだと美しくありません。
まとめてコピーするなら、こう書きます。
セルA2からG25を、Range(“a2”, “g25”)と指定できるのです。
Sub copy() Worksheets("4月").Range("a2", "g25").copy Worksheets("data").Range("a2") End Sub
このような意味になります。
結果はこうなりますが、色(書式)までコピーすると不便な場合もあるでしょう。
値のみを貼り付けるなら、こう書きます。
Sub copy_value() Worksheets("4月").Range("a2", "g25").copy Worksheets("data").Range("a2").PasteSpecial Paste:=xlPasteValues End Sub
実行するとこうなり、データとしても扱いやすいです。
Excelマクロで値(Value)のみ転記
もう1つの方法は、値を入力する方法。
こう書きます。
シンプルに = でつなぐだけです。
Sub value() Worksheets("data").Range("a2", "g25").value = Worksheets("4月").Range("a2", "g25").value End Sub
意味はこうなります。
コピーのときと違い、シート「data」、「4月」の順で書きます。
〇=△で、「〇に△を入れる」という意味ですので。
こちらのほうがシンプルで書きやすいです。
特に、1つのセルをコピーするときは、こちらのValueのほうがいいでしょう。
ただ、連続でデータをコピーする場合は、値のみコピーのほうがわかりやすいです。
私は、
・単独でコピー Value
・複数範囲をコピー 値のみ貼り付け
と使っています。
コピペの繰り返し
これらコピペを繰り返すこともマクロではできます。
値のみコピーの場合
Sub copy_value_repeat() '値のみコピー 繰り返し Dim W_s As Worksheet For Each W_s In Worksheets If W_s.Name <> "data" Then Dim Sheet_row Sheet_row = W_s.Range("a" & Rows.Count).End(xlUp).Row W_s.Range("a2", "g" & Sheet_row).copy Dim Data_row Data_row = Worksheets("data").Range("a" & Rows.Count).End(xlUp).Row Worksheets("data").Range("a" & Data_row + 1).PasteSpecial Paste:=xlPasteValues End If Next End Sub
値を入力する場合
Sub value_repeat() '値を入力 繰り返し Dim W_s As Worksheet For Each W_s In Worksheets If W_s.Name <> "data" Then Dim Sheet_row Sheet_row = W_s.Range("a" & Rows.Count).End(xlUp).Row Dim Data_row Data_row = Worksheets("data").Range("a" & Rows.Count).End(xlUp).Row Worksheets("data").Range("a" & Data_row + 1, "g" & Data_row - 1 + Sheet_row).value = W_s.Range("a2", "g" & Sheet_row).value End If Next End Sub
値をコピーする方法(前者)で解説すると、4月、5月、6月のシートで繰り返し処理できるように、For Eachを使っていますが、シート「data」は除きたいので、IFで指定しています。
赤い部分がFor Each、黄色い部分がIFで、それぞれ、間にあるプログラムを処理するものです。
コピー元のシート(4月、5月、6月)で、データ数を数えて(Sheet_row)、その範囲までコピーしています。
4月だとデータ数は25でしたが、5月は、20なので、それぞれ指定しなければいけませんが、その部分もマクロに数えてもらうわけです。
貼り付け先も、データ数によって場所が変わります。
4月を貼り付けるときは、2行目に貼り付ければいいのですが、
5月の場合は、すでに4月が貼り付けられているので、2行目だと、データを上書きしてしまいます。
4月のデータの下、つまりシート「data」のデータ数を数えて(Data_row)、25、その25に1を足した場所=26(Data_Row+1)に貼り付けるわけです。
サンプルで、試してみていただければ。
EX-ITサンプル コピペマクロ.xlsm
シートを増やしたり、データを増やしたりしてみると、おもしろいです。
Excelファイルを開き、Alt+F11(Altキー、F11を同時押し)で、プログラムを開いて、該当プログラムのSubからEnd Subの間で、実行ボタンまたはF5を押すとプログラムが動きます。
■編集後記
昨日は予定なし。
セミナーの準備や新刊の内容練りこみ、各種手続きなど、結構進みました。
午前中はいまいちでしたが。
Adobeで印鑑データづくり
とある申込
■娘(2歳)日記
昨日は、めばえ(雑誌)の付録づくりを。
UFOキャッチャー(クレーンゲーム)でした。
このめばえ、よくできていて、紙でつくる付録のおもちゃは、実際のおもちゃの廉価版。
これで気に入れば、そのおもちゃを買うという導線が実にうまいです。
アイスクリーム屋はそれで買うことになりました。
■著書
『税理士のためのプログラミング -ChatGPTで知識ゼロから始める本-』
『すべてをがんばりすぎなくてもいい!顧問先の満足度を高める税理士業務の見極め方』
ひとり税理士のギモンに答える128問128答
【インボイス対応版】ひとり社長の経理の基本
「繁忙期」でもやりたいことを諦めない! 税理士のための業務効率化マニュアル
ひとり税理士の自宅仕事術
リモート経理完全マニュアル――小さな会社にお金を残す87のノウハウ
ひとり税理士のセーフティネットとリスクマネジメント
税理士のためのRPA入門~一歩踏み出せば変えられる!業務効率化の方法~
やってはいけないExcel――「やってはいけない」がわかると「Excelの正解」がわかる
AI時代のひとり税理士
新版 そのまま使える 経理&会計のためのExcel入門
フリーランスとひとり社長のための 経理をエクセルでトコトン楽にする本
新版 ひとり社長の経理の基本
『ひとり税理士の仕事術』
『フリーランスのための一生仕事に困らない本』
【監修】十人十色の「ひとり税理士」という生き方