今、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個の範囲のセルをまるごとコピーします。(①)

この状況で、Z列の文字列の変わり目のセル、上記で言いますと152行目と157行目ですが。
そのようなデータの変わり目に該当する行のAA列~BF列に、①でコピーした64個セルのデータを、どんどんペーストしていきたいのです。
5万行ぐらいのデータがあり、もしそのような処理が出来るマクロ等ありましたら、お教えいただけないでしょうか。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2016/03/17 22:49:48
  • 終了:2016/03/19 08:43:51

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4325ベストアンサー獲得回数17732016/03/18 01:14:47

ポイント1500pt

この状況で、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行は同じ値が続くことを前提としています。

id:moon-fondu

すごいです、実行してみると、データの変わり目ごとに貼り付けられました!ありがとうございますm(__)m

2016/03/19 08:41:38
  • id:taknt
    Z列の重複行を非表示とやると先頭のみになるはずだから それに貼り付けてやればよい・・・かな?
  • id:moon-fondu
    その発想は思いつきませんでした!ありがとうございます。
    1行の場合はそれで出来そうですね・・・。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません