ページを更新しました。
fastclassinfo.com
上記のページで、最新情報を記載しています。
このページの情報は古いので、ぜひ上記のページの情報をご覧ください。
エクセル業務で別シートへ項目別にデータを転記する作業があります。
実際、単純に転記作業を行うとき、以下のように感じる人は少なくないはずです。
・エクセルをコピペする作業を一つ一つ手入力するのって非効率
・ミスタイプや間違いを確認するのは面倒
・こんな単純作業でミスしたら上司や同僚に何か言われてしまう…
・毎日の定型作業だから自動化して仕事をラクに終わらせたい!
そこで、この記事ではエクセルマクロVBAを使って、別シートへ情報を自動転記する方法を紹介します。
データ項目数に応じて、シートを連続で自動作成するプログラムを事例を用いてお伝えしていきます。
- エクセルマクロVBAでデータ項目別にシート作成し自動転記する事例を動画で紹介
- データを自動転記するマクロVBAのメリットやデメリット
- 「データを自動転記する」マクロの難易度は?
- エクセルVBAでデータ項目別にシート作成し自動転記するプログラム
- データを自動転記するマクロ|for next構文、if文、最終行の取得を活用
- 動画で紹介した「自動でシート作成し転記するマクロ」の入ったエクセルをダウンロードする
- ダウンロードファイルの使い方
- エクセルを自分用に編集アレンジして使いたいなら、エクセルマクロの無料動画で学ぼう
ページを更新しました。
fastclassinfo.com
上記のページで、最新情報を記載しています。
このページの情報は古いので、ぜひ上記のページの情報をご覧ください。
エクセルマクロVBAでデータ項目別にシート作成し自動転記する事例を動画で紹介
データ項目別に自動転記するエクセルマクロVBAについてイメージをつかんでもらうために、動画の事例を紹介します。
まずは上記の動画を見て、これから解説するマクロについて全体像をつかんでください。
なお、この動画では以下の2つのマクロを紹介しています。
マクロ2|不要なシートを自動削除(1分36秒~終わり)
この記事ではマクロ1|データを項目別に自動転記に限定して解説しています。
もし、マクロ2|不要なシートを自動削除について知りたい人は、以下の記事をご覧ください。
手入力での作業は誰でも出来るが非効率である
さて、これからデータを自動転記するマクロを事例を使って紹介していきます。
ただ、それを紹介する前に覚えておいてほしいことがあります。
それは、手入力での作業が誰でも出来るけれど、非効率であるということです
例えば、以下のA列の「型式」の項目毎にシート別に情報を転記する作業を考えます。
上記のA列の「型式」はバラバラの項目が順不同に並んでいます。
これを以下のように{a, b, c, d…}の型式毎にシート別に情報を格納します。
このとき、シートの名前も型式通りに変更します。
このような作業があるとき、多くの人はエクセルの機能を活用して、以下の作業を行います。
[2] フィルターをかける
[3] シートをコピー
[4] コピーしたシートに型式aの情報をコピペして貼り付ける
[5] コピーしたシートの名前を型式名に書き換える
[6] 型式の項目ごとに[3]~[5]を繰り返す
この作業はマウスを使って一つずつ処理すれば誰でも出来ます。
しかしデータ数が多くなると、時間がかかってしまいます。
しかも、数が多くなると当然コピペのミスや型式名の変更し忘れなどが発生しがちです。
ただ、そもそもこのような単純作業は、本当にあなたを含めた人間がやるべき作業なのでしょうか。
このような作業が人がやれば、ミスを起こして当然です。
どのような人がやってもミスが起こりうる作業を人がやるような状態にしておくことが間違いだということです。
ぜひ以下で紹介するデータ転記作業の自動化の方法を実践してみてください。
データを自動転記するマクロVBAのメリットやデメリット
エクセルマクロVBAでデータを自動転記するとき、さまざまなメリットがあります。同時にデメリットもあります。
具体的には以下の通りです。
[1] マクロ初心者でも挑戦しやすい
[2] 定型作業であれば、かなりの効率化が期待できる
[3] コピペミスやタイプミスがなくなるので、確認作業が不要になる
●デメリット
[1] 初心者の基礎力が試される
[2] 元データがまとまっていないとマクロで自動化するのが難しい
[3] 書籍やウェブでは事例を使った情報は少ない
以下で詳しく説明していきます。
データを別シートへ自動転記するエクセルマクロVBAのメリット
まず、メリットから紹介します。
[1] マクロ初心者でも挑戦しやすい
[2] 定型作業であれば、かなりの効率化が期待できる
[3] コピペミスやタイプミスがなくなるので、確認作業が不要になる
[1] マクロ初心者でも挑戦しやすい
データを別シートへ転記するマクロは初心者でも挑戦しやすいです。
その理由は、エクセルさえエクセルさえインストールされていれば、新しくプログラムの開発環境を作る必要がありません。
また、難しいプログラムが不要なのも初心者向けの理由です。
基本となるプログラムをいくつか押さえれば、実際に仕事で使えるプログラムを作ることができます。
[2] 定型作業であれば、かなりの効率化が期待できる
マクロで自動化したいデータ転記作業が定型であれば、大きな効率化を期待できます。
なぜなら、仕事がボタン一つで終わるからです。
例えば、手入力でデータを転記する場合、作業時間は「データ項目数×1項目あたり転記時間」です。
仮に、転記したいデータ項目数が10個で、1個あたり作成時間が2分であれば、20分かかることになります。
しかし、マクロを使って自動化すればボタン一つで作業が終わります。データ項目数が10個でも100個でも、ボタンを押せば作業が完了します。
作業がボタン一つで終わるため、急ぎで仕事を行う必要があっても、すぐに上司や同僚に報告することが可能です。
[3] コピペミスやタイプミスがなくなるので、確認作業が不要になる
データ転記作業で厄介なことの一つに、コピペミスやタイプミスがあります。
例えば、コピーする範囲を間違えてデータが抜けてしまうことがあります。
しかしマクロで設定してしまえば、ボタン一発で、必要情報を全て転記することが可能です。
このように、一度マクロ化してしまえば、コピペミスやタイプミスの確認作業が不要になるのです。
さらに、動画で紹介しているようなデータ転記作業を自動化すれば、人に仕事を渡すのが容易になります。
そうすれば、新しい仕事にチャレンジする時間を作ることができるようになるのです。
データを別シートへ自動転記するエクセルマクロVBAのデメリット
上記ではメリットを紹介しましたが、当然デメリットもあります。
[1] 初心者の基礎力が試される
[2] 元データがまとまっていないとマクロで自動化するのが難しい
[3] 書籍やウェブでは事例を使った情報は少ない
以下で一つずつ説明します。
[1] 初心者の基礎力が試される
メリットで初心者向けとお伝えしました。
データ転記のVBAは、確かに初心者向けです。それは難しいプログラムを扱う必要がなく、基本のプログラムで作成可能だからです。
例えば、基本のプログラムとしては「if文」「for next構文」「変数」があります。
これらを理解し上手く組み合わせれば、比較的ラクにプログラムを作成できます。
しかし、「if文」「for next構文」「変数」と聞いて不安を感じるようであれば、マクロを作成するレベルが足りていないことが露呈されます。
つまりこのプログラムを理解して自力で書けないと、他のプログラムを学ぶのが時期尚早と言えます。
はっきり申し上げますが、このプログラムを理解できないようでは、エクセルマクロVBAの基本を理解できていないと言わざるを得ません。
[2] 元データがまとまっていないとマクロで自動化するのが難しい
データ転記のマクロを扱う前提として、エクセルのデータがまとまっていることがあります。
例えば以下のようにデータがまとまっていれば、マクロですぐに自動化することができます。
「データがまとまっている」というのは「四角のデータ」になっていることを指します。
以下の記事で詳しく解説しています。
上記のようにデータがまとまっていない場合、マクロの難易度が上がります。
もし、データがまとまっていない場合は、マクロを作成する前にデータをまとめることを優先するといいでしょう。
[3] 書籍やウェブでは事例を使った情報は少ない
データ転記に関するマクロのプログラムは、書籍やウェブサイトで数多く提供されています。
しかし、断片的で辞書的な説明しかされていないものが多いです。
実際に仕事で使おうと思ったとき、何を目指してどのようなマクロを作ればいいのか分かりづらいです。
つまり、事例ベースの情報が少なく、最初に参考すべき軸となるコードがあまり出回っていないのです。
そのため、初心者がデータ転記作業を行いたいなら、自分で考えてマクロを作成する必要があります。
実際、私がエクセルマクロを勉強し始めた当初、書籍やウェブサイトを使って勉強してきました。
たまに情報が記載されているのですが、事例として使いまわせる情報が少なく、苦戦を強いられました。
そのような経験もあり、この記事でデータ転記を自動化したいあなたに情報を届けることにしました。
「データを自動転記する」マクロの難易度は?
上述の通り、「データを自動転記する」マクロはVBA初心者向けです。
理由は、エクセルのデータがまとまっていれば、基本のプログラムで作成することができるからです。
それでは、基本のプログラムとは何でしょうか。
具体的に私が考えるVBAの基礎として、「if文」「for next構文」「変数」を理解していることがあります。
このような基礎について人に説明できるレベルであれば、データ転記マクロは比較的すぐに出来るようになります。
つまりあなたが、エクセルVBAの基本を抑えていれば試行錯誤しながら、なんとかコードを書きあげることができるでしょう。
したがって、エクセルマクロVBAの基本を理解できているかどうかが重要なのです。
逆に言えば、あまりにもVBAの理解が乏しいと、難しく感じるかもしれません。
もし、エクセルマクロの基本と聞いて不安を感じる人は、入門レベルから学ぶことをお勧めします。
そうしないと、途中で躓いて最初からやり直しになってしまいます。
私のお勧めはこちらでエクセルVBAの基本について学ぶことをオススメします。
エクセルVBAでデータ項目別にシート作成し自動転記するプログラム
それでは、ここからエクセルマクロVBAでデータを自動転記するプログラムを紹介します。
これから解説するプログラムは以下の動画で解説しているマクロと同じです。(以下の動画は記事の冒頭紹介したものと同じです)
マクロ化する作業を簡単に説明します。
下記の画像のようなエクセルデータがあります。
上記のA列の「型式」はバラバラの項目が順不同に並んでいます。
これを以下のようにA列の「型式」{ a, b, c, d…j } の項目毎に新しいシートを作成し、それぞれのシートに情報を格納します。
マクロ実行後に、以下のような状態を目指します。
このとき、シートの名前も型式通りに変更します。
プログラムの全体像|コピペして活用可能
「データを自動転記するエクセルマクロVBA」を事例を通じてステップ毎に紹介します。
具体的には、以下のステップを一つずつ説明していきます。
ステップ1|cmaxの定義と変数設定
ステップ2|「nouhin」シートを「セルA2~セルEcmax」の範囲で並び替える
ステップ3|変数の定義
ステップ4|for next構文
ステップ5|if文を使って新規シートを追加するかどうか決める
ステップ6|新しく作成したシートに「nouhin」シートの情報を転記する
ステップ7|jに1を加える
それでは全体のプログラムを紹介します。
'ステップ0|マクロ開始おまじない Option Explicit Sub Createsheet() 'ステップ1|cmaxの定義と変数設定 Dim cmax cmax = Worksheets("nouhin").Range("A65536").End(xlUp).Row 'ステップ2|「nouhin」シートを「セルA2~セルEcmax」の範囲で並び替える ActiveWorkbook.Worksheets("nouhin").Sort.SortFields.Clear ActiveWorkbook.Worksheets("nouhin").Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("nouhin").Sort .SetRange Range("A2:E" & cmax) .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With 'ステップ3|変数の定義 Dim i, j Dim torihiki 'ステップ4|for next構文 For i = 2 To cmax 'ステップ5|if文を使って新規シートを追加するかどうか決める If torihiki <> Worksheets("nouhin").Range("A" & i).Value Then torihiki = Worksheets("nouhin").Range("A" & i).Value Worksheets("template").Copy After:=Worksheets("nouhin") ActiveSheet.Name = torihiki j = 2 End If 'ステップ6|新しく作成したシートに「nouhin」シートの情報を転記する Worksheets(torihiki).Range("A" & j).Value = Worksheets("nouhin").Range("A" & i).Value Worksheets(torihiki).Range("B" & j).Value = Worksheets("nouhin").Range("B" & i).Value Worksheets(torihiki).Range("C" & j).Value = Worksheets("nouhin").Range("C" & i).Value Worksheets(torihiki).Range("D" & j).Value = Worksheets("nouhin").Range("D" & i).Value Worksheets(torihiki).Range("E" & j).Value = Worksheets("nouhin").Range("E" & i).Value 'ステップ7|jに1を加える j = j + 1 Next End Sub
データを自動転記するマクロ|for next構文、if文、最終行の取得を活用
それでは、プログラムの解説をしていきます。以下のステップに分けて説明します。
上記マクロを以下のステップに分けて紹介していきます。
ステップ1|cmaxの定義と変数設定
ステップ2|「nouhin」シートを「セルA2~セルEcmax」の範囲で並び替える
ステップ3|変数の定義
ステップ4|for next構文
ステップ5|if文を使って新規シートを追加するかどうか決める
ステップ6|新しく作成したシートに「nouhin」シートの情報を転記する
ステップ7|jに1を加える
以下で詳しく解説をします。
ステップ0|マクロ開始おまじない
Option Explicit Sub Createsheet()
1行目|Option Explicitはマクロ開始前に記載するおまじないのようなものです。
2行目|プログラム名を Createsheet()に設定する
ステップ1|cmaxの定義と変数設定
Dim cmax cmax = Worksheets("nouhin").Range("A65536").End(xlUp).Row
1行目|cmaxという変数を新しく定義
2行目|cmaxを「nouhin」シートのセルA65536から上に数えて最初に値が記入されているセルの行数とする
ステップ2|「nouhin」シートを「セルA2~セルEcmax」の範囲で並び替える
ActiveWorkbook.Worksheets("nouhin").Sort.SortFields.Clear ActiveWorkbook.Worksheets("nouhin").Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("nouhin").Sort .SetRange Range("A2:E" & cmax) .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With
1行目|今操作しているエクセルブック(ファイル)の「nouhin」シートの並び替えに関する情報をリセット(クリア)する
2行目|今操作しているエクセルブック(ファイル)の「nouhin」シートの並び替えに関する情報をセルA1の情報をもとに昇順で並び替える(ここではアルファベット順に並び替える)
3行目|With構文で4~9行目の ActiveWorkbook.Worksheets("nouhin").Sortの記載を省略する
4行目|並び替えの範囲をセルA2からEcmaxとする(cmaxは変数で、ステップ1で値を入れるようにしている)
5行目|ヘッダーは並び替えには含まない(4行目で選択した範囲に対して、その1行目を並び替えに含めないxlNo、含めるならxlYes)
6行目|大文字と小文字を区別するならTrue、しないならFalse
7行目|並び替えの方向をxlToptoBottomにする(上から下に向かって並び替える)
8行目|ふりがなを使うかどうかを設定する(xlPinYinで問題なし)
9行目|並び替えの実行
10行目|With構文の終わり
ステップ3|変数の定義
Dim i, j Dim torihiki
1行目|iとjを変数として定義
2行目|torihikiを変数として定義
ステップ4|for next構文
For i = 2 To cmax
1行目|for next構文を使って、i に2~cmaxを一つずつ入れ込む。マクロがステップ7のnextまで進んだら、ステップ4に戻り、iに1加算される
つまり、i=2でステップ4,5,6,7と進んでいき、ステップ7のnextまで進んだら、次はステップ3に戻ってi=3となる。
そして、i=3でステップ4,5,6,7と進んでいき、ステップ7のnextまで進んだら、次はステップ3に戻ってi=4となる。
これをi=cmaxとなるまで繰り返す。
ステップ5|if文を使って新規シートを追加するかどうか決める
ステップ2でA列をアルファベット順に入れ替えてあります。
そのため、ステップ5では「nouhin」シートのA列の値を上から調べていき、その値が次のアルファベットに切り替わる段階で新しいシートを作成するようにしています。
例えば、セルA2~セルA100まで"a"と記入されており、セルA101で"b"となっている場合、i=101で新しいシートを「b」という名前で作成するのです。
これをa,b,c,d,,,,jまで繰り返していきます。
このような頭の使い方ができると、マクロでプログラムを作成できるようになります。
さて、ステップ5のプログラム解説をします。
If torihiki <> Worksheets("nouhin").Range("A" & i).Value Then torihiki = Worksheets("nouhin").Range("A" & i).Value Worksheets("template").Copy After:=Worksheets("nouhin") ActiveSheet.Name = torihiki j = 2 End If
1行目|もし、「torihikiという変数の値」が「nouhin」シートのセルAiの値と違っていたら
2行目|torihikiを「nouhin」シートのセルAiの値にする
3行目|「template」シートをコピーして新しいシートを作成する(「nouhin」シートの右横に作成)
4行目|3行目で作成した新しいシートの名称をtorihikiとする(torihikiの変数には、a,b,c,d,,,,jの値がどれかが入ります)
5行目|変数 j を2とする
6行目|if文の終わり
ステップ6|新しく作成したシートに「nouhin」シートの情報を転記する
ステップ6で転記作業を行います。
新しく作成したシートのA列~E列に「nouhin」シートのA列~E列の情報を一行ずつ入れていきます。
Worksheets(torihiki).Range("A" & j).Value = Worksheets("nouhin").Range("A" & i).Value Worksheets(torihiki).Range("B" & j).Value = Worksheets("nouhin").Range("B" & i).Value Worksheets(torihiki).Range("C" & j).Value = Worksheets("nouhin").Range("C" & i).Value Worksheets(torihiki).Range("D" & j).Value = Worksheets("nouhin").Range("D" & i).Value Worksheets(torihiki).Range("E" & j).Value = Worksheets("nouhin").Range("E" & i).Value
1行目|「torihiki」シートのA列の j 番目のセルの値を「nouhin」シートのA列の i 番目のセルの値にする(torihikiにはa,b,c,d,,,,,j のどれかが入ります)
2行目|「torihiki」シートのB列の j 番目のセルの値を「nouhin」シートのB列の i 番目のセルの値にする
3行目|「torihiki」シートのC列の j 番目のセルの値を「nouhin」シートのC列の i 番目のセルの値にする
4行目|「torihiki」シートのD列の j 番目のセルの値を「nouhin」シートのD列の i 番目のセルの値にする
5行目|「torihiki」シートのE列の j 番目のセルの値を「nouhin」シートのE列の i 番目のセルの値にする
ステップ7|jに1を加える
j = j + 1
1行目|j に1を加える
以上で、説明は終わります。
ここでは、マクロのプログラムを紹介しました。
実は、このプログラムは初心者が新しいことを学ぶのを少なくできるようにプログラムを書きました。
そのため、このマクロのプログラムは可読性があまりよくありません。
例えば、並び替えや転記の部分は改善の余地があります。
ぜひ、あなた自身が勉強して、自分で編集してもっといいものを作成できるようになってほしいと思います。
もし、自分のPCでエクセルマクロを使ってみたいけれど、使い方・始め方が分からない人は以下の記事を参考にしてみてください。
動画で紹介した「自動でシート作成し転記するマクロ」の入ったエクセルをダウンロードする
この記事を読んでいる人の中には、プログラムを作成するのが面倒だけど、マクロを使ってみたいと考えている人もいるはずです。
そのような人のために、無料でダウンロードできるようにしました。
以下のフォームにメールアドレスを入力いただくと、返信メールから動画で解説しているマクロが入ったエクセルファイルをダウンロードできます。
なお、ダウンロードしたマクロには以下の2つのマクロが入っています。
マクロ2|不要なシートを削除する
マクロ1については、この記事で解説しています。
しかしマクロ2については、この記事で解説していません。別の記事で解説しています。
マクロ2について解説が欲しい人は、以下の記事を読んでみてください。
ダウンロードファイルの使い方
ダウンロードしたエクセルファイルでマクロの使う場合は、以下の3つのことを理解した腕活用ください。
[B] ボタン「シート削除」を押すと、[1]で作成されたシートを削除
[C] 注意点| 「nouhin」 「template」のシート名を変えない
以下で一つずつ説明します。
[A] ボタン「シート作成」を押すと、A列の型式ごとにシートを作成
[1] ボタンを押す
[2] シートを自動作成し、A列の型式別に新しく作成したシートに情報を転記する
[B] ボタン「シート削除」を押すと、[1]で作成されたシートを削除
[1] ボタンを押す
[2] 「nouhin」 「template」以外のシートを全て削除する
[C] 注意点| 「nouhin」 「template」のシート名を変えない
この記事で紹介するマクロでは、「nouhin」 「template」といったシートを削除したり、シート名を変更したりしないことをお勧めします。
なぜなら、「nouhin」 「template」といったシート名に手を加えるとエラーが出てしまう場合があるからです。
ただ、マクロを自力で編集できる力があるなら別です。
ぜひシート名を変えたり、他の機能を追加したりしたいなら自力でプログラムを編集してみてください。
あなたの仕事に合わせてカスタムする力がつけば、きっとマクロが仕事をラクにしてくれるはずです。
エクセルを自分用に編集アレンジして使いたいなら、エクセルマクロの無料動画で学ぼう
この記事では、データ項目別にシートを作成し自動転記するマクロについて紹介しました。ここで紹介したマクロを利用すれば、作業の自動化が可能になります。
しかしデメリットもあります。それはカスタムできないことです。
なぜなら、色々な要望が増えるからです。
この動画を見たとき、「もっと○○ができるのでは?」や「ここはなんとかならないのか」と感じる人は少なくないはずです。
例えば、「他の条件を付け加えたい」や「日付毎に条件を変えたい」といった要望が出るかもしれません。
このような要望を満たすには、マクロを勉強して自力でマクロを編集できるようになる必要があります。
もし、自力でマクロを編集できるようになれば、今より仕事の効率はグッと上がります。
実際、私も自力でマクロを書けるようになってからは、仕事の生産性が一気に上がりました。
他の人が30分~1時間かけて行う仕事が、ボタン一つで終わらせることができるようになったのです。その結果、周囲からの信頼も増し、仕事で高い評価を得られるようになりました。
ただ、要望に応えるようになるためには、マクロを学ぶ必要があります。
まずは無料でマクロを勉強してみる
ウェブや書籍で勉強すれば、マクロを習得できると考えている人は少なくありません。
しかし、仕事で使えるマクロを習得したいなら、仕事で使える部分に特化した教材で学ぶことをお勧めします。
なぜなら、ウェブや書籍には仕事に関係しない部分まで提供していることが多いからです。
例えば、マクロ初心者なのに配列を学ぼうとする人がいます。実は配列なしでも仕事で使えるマクロを書くことは可能です。
しかし、マクロ初心者ほど「全ての知識が必要だ」と考えて、無駄な学習に時間を使ってしまうのです。詳しくは、こちらの記事で紹介しています。
そこで、私がお勧めするのは仕事に直結するマクロ教材です。とくにお勧めするのは、こちらの無料オンライン動画です。
なぜなら、仕事に直結する部分に絞って、エクセルマクロを学ぶことができるからです。
マクロの作り方・考え方から解説しているので、教材をしっかり学べばここで紹介したマクロをゼロから書けるようになります。
マクロ初心者が、仕事に直結したいマクロを学ぶなら、まずはこちらの無料オンライン動画を試すのがいいです。
興味がある人は、まずは無料でエクセルマクロの勉強を始めてみてください。
もっと学びたいと感じたら、さらに深く勉強をしてみることをお勧めします。