teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

サンプルコードもうひとつ追加。

2016/11/28 04:11

投稿

twyujiro15
twyujiro15

スコア217

answer CHANGED
@@ -31,4 +31,18 @@
31
31
  Next
32
32
  Application.ScreenUpdating = True
33
33
  End Sub
34
- ```
34
+ ```
35
+
36
+ ---
37
+ 他にも Range による飛び飛びの行を複数指定することで一度に挿入することもできます。
38
+ 例えば次のようなコードになります。
39
+
40
+ ```
41
+ Range("2:3,6:7").Insert
42
+ ```
43
+
44
+ kpiyohiko さんへのコメントで、指定数に上限があったり、
45
+ 処理を分けると行情報がずれてしまったりなど問題があるとのことですが、
46
+ 行を挿入する処理を最下行からおこなえば
47
+ 行情報がずれることはないと思うので、
48
+ その問題に関しては工夫次第でなんとかなると思います。

1

サンプルコード追記

2016/11/28 04:11

投稿

twyujiro15
twyujiro15

スコア217

answer CHANGED
@@ -7,4 +7,28 @@
7
7
  [VBAシステム開発: 2.6.3 画面描画と数式再計算を止める](https://sites.google.com/site/compositiosystemae/home/vbaworld/primitive/exp1/stopredrow)
8
8
 
9
9
  紹介したサイトにも書いてありますが、
10
- 停止させたものは元に戻す必要があるのでご注意ください。
10
+ 停止させたものは元に戻す必要があるのでご注意ください。
11
+
12
+ ---
13
+ 上記の対策は最初におこなわれていましたね。
14
+ 申し訳ありませんでした。
15
+
16
+ Insert を 1 回だけ呼ぶようにするだけでも
17
+ だいぶ変わるんじゃないでしょうか。
18
+ サンプルコードを下記に掲載します。
19
+
20
+ ```VBA
21
+ Sub test()
22
+ Dim i As Long
23
+ Dim r As Long
24
+ Const 追加行数 As Long = 4
25
+ r = Range("A" & Rows.Count).End(xlUp).Row
26
+ Application.ScreenUpdating = False
27
+ For i = r To 2 Step -1
28
+ If Range("A" & i).Value <> "" Then
29
+ Range("A" & i + 1).Resize(追加行数).EntireRow.Insert
30
+ End If
31
+ Next
32
+ Application.ScreenUpdating = True
33
+ End Sub
34
+ ```