Help us understand the problem. What is going on with this article?

Q9.別のワークシートにセルの値をコピーするには?②

今回は、Q7で取り扱った別のワークシートへのコピーをもう一度取り扱って行こうと思います。

というのも、Q7の時は3シート分のデータを別シートへコピーするというものでした。
その為、かなり単調なコードにしてしまったからです。
今回は、13人分のデータを用意しました。(Q8参照)

こちらです。

Q8.png

前回の3人+10人分のデータが追加されています。
これらのシートにある名前とそれぞれの得点を一つのシートに集約するマクロを作ってみましょう。

■ポイント

ループ処理を利用することで、効率的に書くことができます。
どこからどこのデータを取得したくて、それをどのように記述するかを考えていくのが今回のポイントです。

ただ単に、記載するだけなら、Q7の時のように単純に記述すればいいだけですからね。
だけど、そうすると今回の数が多くなってきたときに不便になります。
今回は、その不便さをどうやって解消するかがポイントとなります。

■回答

Sub Q9_Answer()
    Dim i As Integer
    Dim StartRow As Integer
    StartRow = 3
    For i = 3 To Worksheets.Count
        Worksheets("全体").Range("B" & StartRow).Value = Worksheets(i).Range("B3").Value
        Worksheets("全体").Range("C" & StartRow).Value = Worksheets(i).Range("C3").Value
        Worksheets("全体").Range("D" & StartRow).Value = Worksheets(i).Range("D3").Value
        Worksheets("全体").Range("E" & StartRow).Value = Worksheets(i).Range("E3").Value
        StartRow = StartRow + 1
    Next i
End Sub

■解説

まず、StartRowについて。StartRowは集約するシートの記載する最初の行を表しています。
今回は、3行目で、データシートの最初のインデックス番号である3とたまたま一致していたので、StartRowに関する記述をすべて無くして、iにすることで同様のことを実現できますが、
可読性なども考慮し、今回のようにしています。

次に、For文ですが、i = 3と3からループが始まっていますね。
これは、データシートの最初のインデックス番号を表しています。
インデックス番号は左から1から順番に振られていきます。

なので、これ以前に別にシートを挿入してしまうと、動作がうまくいきません。
マクロを使う環境に合わせて適宜変えていく必要があります。
今回は、データシート以外は固定である前提で作成しています。

そして、最後が代入する値をWorksheets(i).Range("B3").Valueと
インデックス番号を使用して記述していることです。

こうすることでもし仮にデータシートが増えたとしても一切手を加えることなく、
同様の処理を行うことができます。
極端な話、1000件分のデータや10000件分のデータも取り扱うことができます。

最後にマクロを実行し、集約した後の画像を掲載しておきます。

Q9.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away