質問: 今、142行目のZ列から、以下のようなデータが並んでおります。 ※(行目)|文字列(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個の範囲のセルをまるごとコピーします。(1) この状況で、Z列の文字列の変わり目のセル、上記で言いますと152行目と157行目ですが。 そのようなデータの変わり目に該当する行のAA列~BF列に、1でコピーした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行は同じ値が続くことを前提としています。