[[20190312141756]] 『VBAでの繰り返し処理』(ダンモ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAでの繰り返し処理』(ダンモ)

VBAで下記の処理(マクロの記録にて作成)をもっと簡潔に
書けませんでしょうか。

なお、繰り返し処理はA列が空になるまで続けたいです。
よろしくお願いいたします。


Sub Macro4()
'
' Macro4 Macro
'

'

    Rows("7:7").Select
    Selection.copy
    Rows("8:10").Select
    Selection.Insert Shift:=xlDown
    Rows("17:17").Select
    Application.CutCopyMode = False
    Selection.copy
    Rows("18:20").Select
    Selection.Insert Shift:=xlDown
    Rows("27:27").Select
    Application.CutCopyMode = False
    Selection.copy
    ActiveWindow.SmallScroll Down:=12
    Rows("28:30").Select
    Selection.Insert Shift:=xlDown
    Rows("37:37").Select
    Application.CutCopyMode = False
    Selection.copy
    Rows("38:40").Select
    Selection.Insert Shift:=xlDown
    ActiveWindow.SmallScroll Down:=18
    Rows("47:47").Select
    Application.CutCopyMode = False
    Selection.copy
    Rows("48:50").Select
    Selection.Insert Shift:=xlDown
    Rows("57:57").Select
    Application.CutCopyMode = False
    Selection.copy
    ActiveWindow.SmallScroll Down:=9
    Rows("58:60").Select
    Selection.Insert Shift:=xlDown
End Sub

< 使用 Excel:Excel2013、使用 OS:Windows10 >


 こんにちは。
 
 コピーする行には、規則性とか何かルールはありますか?

 コピーする行番号が10づつ増えているように見えますが、
 実は、3行挿入したあとの10行下なので、確認です。
 
 マクロつくるときは、行/列の挿入・削除は、行番号が変わるので、
 影響がないように後ろの方から処理してくるのが良いです。

 規則性がわかれば、For〜Next で繰り返し処理することで、わかりやすくなると思います。
(でれすけ) 2019/03/12(火) 14:29

でれすけさん

ご返信ありがとうございます。

コピーする行番号が10づつ増えているように見えますが、 実は、3行挿入したあとの10行下なので、確認です。

おっしゃる通り、行番号は10ずつ増えています。
7行で1つのデータとなっており、最終行のデータを直下3行に【コピーした行の挿入】しております。

処理回数がシートによって異なる場合、余裕を持った回数でFor〜Nextを使えば大丈夫でしょうか。
(ダンモ) 2019/03/12(火) 14:41


 Sub test()

     Dim r As Long

     Application.ScreenUpdating = False

     r = 7
     Do
        Rows(r).Copy
        Rows(r + 1 & ":" & r + 3).Insert Shift:=xlDown
        r = r + 10
        Application.CutCopyMode = False
     Loop Until Cells(r, 1).Value = ""

     Application.ScreenUpdating = True

 End Sub

 みたいなことでしょうか?
(bi) 2019/03/12(火) 15:05

 >7行で1つのデータとなっており、最終行のデータを直下3行に【コピーした行の挿入】
 要件はこれでいいですね。

 先に書いたように、行の最初の方から行を挿入してくると、
 最終行がどんどん動くので、処理が煩雑になります。

 なので、データ最終行から行先頭に向かって、逆順で処理を進めていくと考えれば、
 データの最終行がわかれば、繰り返し処理の回数が決定できます。

 例えば、A列のデータ最終行は、以下で取得できます。

    Dim LastRow As Long
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row

 これでLastRowに最終行の番号が入りました。

 LastRow から10行目まで、7行おきに処理するので、

    Dim R As Long

    For R = LastRow To 10 Step -7
        ' ここで行コピー&挿入
    Next

 とFor〜Nextループで繰り返し処理を行うことができます。

(でれすけ) 2019/03/12(火) 15:08


(bi)さん

ご返信ありがとうございます。

まさにこれです!助かりました!本当にありがとうございます。
(ダンモ) 2019/03/13(水) 11:09


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.