見出し画像

マクロルーティン#24(全行確認して指定のシートにまとめる!)

データ一覧の中から必要な行を指定のシートに一行ずつまとめていく。

皆さんこんにちは。
今回は前回の続きで、指定のシートに2行目から順に必要な行をコピペでまとめていく書き方をご紹介します。

動画でもご確認いただけます。


前回はデータ一覧から必要な行を見つけてコピーするというところまで書けました。

画像1

★コードを書き始めるときの考え方やどこから書き始めるのかはマクロルーティン#23でわかりやすくご説明していますので一度ご覧になってください。

画像2

◆ここまでの解説
上のコードを実行すると、
記録シートのB列2行目の値が ”美容” なら記録シートの2行目をコピーする

記録シートのB列3行目の値が ”美容” なら記録シートの3行目をコピーする

記録シートのB列4行目の値が ”美容” なら記録シートの4行目をコピーする



★値が ”美容” でなかった場合はコピーのコードに移らず、「End If」までスキップされて→「Next」と進み「i」に次の行の数字がはいって、またIf文から実行されるという流れです。
ですから実行してもコピーしているだけですから、見た目には何も変わりません。

指定のシートに一行ずつまとめていく

いよいよ美容シート2行目から順に行貼付けの部分を書いていきます。

◆書くコード

j = 2 
For i = 2 To 10
 If Worksheets("記録").Range("B" & i).Value = "美容" Then
  Worksheets("記録").Rows(i).Copy
  Worksheets("美容").Rows(j).PasteSpecial
  j = j + 1
 End If
Next

◆解説
太字で書いてあるコード(3行分)が今回追加されたコードです。
まず考えるコードは
Worksheets("美容").Rows(j).PasteSpecial
直前のコードで必要な行をコピーしているので、これは貼り付けているコードですね。
「美容」シートの「j」行に貼り付けるというコードです。

★新たな変数「j」を使う
この貼付けのコードが実行されるのは、「記録」シートのB i 列が「美容」のときだけです。
「記録」シートでは全行に対してIf文の判定がされますが、その中で「美容」の行だけ「美容」シートにコピペするので、
「美容」シート内で行の移動をさせなければいけません。
➡一行貼り付けられたら次の行番号を取得しておく。(j = j + 1
➡貼り付けられない限り行を移動しない。
➡常に新規の行でスタンバっておく(j = 2  ← 初期値)(j = j + 1

画像3

★このマクロの書き方を習得することで大抵のマクロ操作が可能になりますので是非自分のものにしてくださいね。


では、問題です。

画像5

画像4

上図のようなデータがあったときC列の金額が「10000以上」のデータを「一万以上」のシートにまとめるマクロを作ってください。
ただし、For 文If 文を使って書いてください。


それでは、次回マクロルーティン#25で。


この記事が気に入ったらサポートをしてみませんか?