人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

今、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万行ぐらいのデータがあり、もしそのような処理が出来るマクロ等ありましたら、お教えいただけないでしょうか。

●質問者: moon-fondu
●カテゴリ:コンピュータ 学習・教育
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●1500ポイント ベストアンサー

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


moon-fonduさんのコメント
すごいです、実行してみると、データの変わり目ごとに貼り付けられました!ありがとうございますm(__)m
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ