※(行目)|文字列(Z列)
142|あいうえお
143|あいうえお
144|あいうえお
145|あいうえお
146|あいうえお
147|あいうえお
148|あいうえお
149|あいうえお
150|あいうえお
151|あいうえお
152|かきくけこ
153|かきくけこ
154|かきくけこ
155|かきくけこ
156|かきくけこ
157|さしすせそ
158|さしすせそ
159|さしすせそ
160|さしすせそ
161|さしすせそ
162|さしすせそ
163|さしすせそ
164|さしすせそ
165|さしすせそ
・
・
・
というように文字列が並んでいます。
そして142行目と143行目のAA列~BF列にも、データが入ってます。
AA~BFですから1行32セル、2行で64個のセルです。
この64個の範囲のセルをまるごとコピーします。(①)
この状況で、Z列の文字列の変わり目のセル、上記で言いますと152行目と157行目ですが。
そのようなデータの変わり目に該当する行のAA列~BF列に、①でコピーした64個セルのデータを、どんどんペーストしていきたいのです。
5万行ぐらいのデータがあり、もしそのような処理が出来るマクロ等ありましたら、お教えいただけないでしょうか。
この状況で、Z列の文字列の変わり目のセル、上記で言いますと152行目と157行目ですが。
質問の例だと、142~143行目を、152~153行目、157~158行目の AA~BF 列に貼り付けるということで良いのでしょうか。
以下のコードを標準モジュールに貼り付けて、copy_aa_bf サブルーチンを実行してください。
Const MAX_ROW = 50000 ' 処理対象の最大行数 Function is_blank_cell(c) is_blank_cell = IsEmpty(c) Or c.Value = "" End Function Sub copy_aa_bf() c = 26 ' Z列 r0 = 142 ' 開始行 ' AA142:BF143 をコピー Range(Cells(r0, c + 1), Cells(r0 + 1, c + 32)).Copy r = r0 + 1 prev = Cells(r0, c).Value Do Until is_blank_cell(Cells(r, c)) v = Cells(r, c).Value If v <> prev Then Cells(r, c + 1).Select ActiveSheet.Paste End If prev = v DoEvents r = r + 1 If r > MAX_ROW Then ' 念のため Exit Do End If Loop End Sub
ビビリなので、最大処理行数を MAX_ROW で指定しています。
適宜、増やしてください。
2行をコピーして貼り付けるので、Z列の値は最低でも 2行は同じ値が続くことを前提としています。
すごいです、実行してみると、データの変わり目ごとに貼り付けられました!ありがとうございますm(__)m
2016/03/19 08:41:38