[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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
ご返信ありがとうございます。
まさにこれです!助かりました!本当にありがとうございます。
(ダンモ) 2019/03/13(水) 11:09
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.