1が6連続登場したらその行をコピーするVBAマクロ
私は、Excelの「マクロの記録」で自動記述されたマクロを少々いじる程度しかできないスキルです。
行いたい処理がEXCEL VBAで実現できなくて困っています。どうぞお力を貸してください。
毎日、添付した画像の「上の表」のようなデータが出ます。
「下の表」は、二日後のデータに見立てています。このように、日ごとに列が増えていく表です。
(値の部分は、数値で0か1しか入りません。)
(上下に表を並べていますが、実際には「月初から本日まで」の1つの表しかありません。)
ここで、やりたいことは・・・
最後の日付から遡って6日間にわたり1が連続したら、その行だけ取り出して別シートにコピーしたいのです。
添付画像には、「すべての6連続した1」に黄色の網掛けをしていますが、
必要なのは「一番最後の日から遡って6日連続しているものだけ」です。
たとえば7/10の時点(上の表)では、工藤さんの行だけが該当。
7/12時点(下の表)では、石井さんだけが該当することになります。
該当した行を丸ごと、別のシートにコピーしたいわけです。
日によって、該当する行が複数行存在するときもあります。
自分で考えた限りでは、
データの右端(合計列)を見つけ、そこから左へ1セルだけオフセット→変数へセット
そこからさらに左へ5セルオフセット→変数へセット
それを選択範囲の開始セルと終了セルにできれば、
その中身がすべて1だった場合のみ、その行をコピーすればよいのでは・・・
と考えました。
行を1ずつ下に移動しながら最終行まで処理を続ける。
それを、行が終わるまで、繰り返す・・・(日によって行は増えたり減ったりする)
(データは0か1かしか入らないので、最終日から6日間を範囲選択している場合、全部1か?という判断をしてもよいし、足して6か?という判断でもよさそうです)
しかし、オフセットでセルはセレクトできても、
それを開始セル・終了セルとした「範囲」にすることができず、
また、行が終わるまで繰り返す処理も記述の仕方がわかりませんでした。
全く形になっていないので書く意味はなさそうですが、自分の記述を下記に示します。
繰り返し処理はネットで検索しました。
----------------------
Sub testMacro()
'
' testMacro Macro
'
Dim i As Long
Dim MaxRow as Long
Range("A2").End(xlToRight).Select '2行目で、データの右端をセレクトする。変数にセットすべき?
Selection.Offset(0, -1).Select 'これが選択範囲の最初。変数にセットすべき?
Selection.Offset(0, -5).Select 'これが選択範囲の最後。変数にセットすべき?
Range(開始セル:終了セル).Select'この範囲指定がわからない
MaxRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row '最後の行を知る(どの列でもいい)
For i = 1 To MaxRow '1ずつ増やしながら最終行まで繰り返す
'範囲内が全部1かどうか(あるいは足して6かどうか)調べて、そうでなかったら次の行へ。
'もし全部1ならならコピーして別シートへコピー。
Next i
End Sub
----------------------
本当にまったく形になっていなくてすみません。
お力を貸していただけると嬉しいです
よろしくお願いします
お礼
お礼遅くなりました。本当にありがとうございました。大変助かりました。