回答編集履歴

3

コード修正

2020/11/12 07:04

投稿

hatena19
hatena19

スコア34075

test CHANGED
@@ -84,7 +84,7 @@
84
84
 
85
85
  Else
86
86
 
87
- Range(r + 1 & ":" & r + cnt * (cnt - 1)).Insert
87
+ Rows(r + 1).Resize(cnt * (cnt - 1)).Insert
88
88
 
89
89
  r = r + cnt * (cnt - 1) + 1
90
90
 

2

コード微修正

2020/11/12 07:04

投稿

hatena19
hatena19

スコア34075

test CHANGED
@@ -70,7 +70,7 @@
70
70
 
71
71
  Sub macro1()
72
72
 
73
- Dim r As Long, cnt As Long, v
73
+ Dim r As Long, cnt As Long
74
74
 
75
75
  r = 3: cnt = 1
76
76
 

1

コード追記

2020/11/12 05:26

投稿

hatena19
hatena19

スコア34075

test CHANGED
@@ -59,3 +59,47 @@
59
59
  End Sub
60
60
 
61
61
  ```
62
+
63
+ ---
64
+
65
+ 自分なりに書くと下記になりました。
66
+
67
+
68
+
69
+ ```vba
70
+
71
+ Sub macro1()
72
+
73
+ Dim r As Long, cnt As Long, v
74
+
75
+ r = 3: cnt = 1
76
+
77
+ Do Until Cells(r + 1, 1) = ""
78
+
79
+ If Cells(r, 1) = Cells(r + 1, 1) Then
80
+
81
+ cnt = cnt + 1
82
+
83
+ r = r + 1
84
+
85
+ Else
86
+
87
+ Range(r + 1 & ":" & r + cnt * (cnt - 1)).Insert
88
+
89
+ r = r + cnt * (cnt - 1) + 1
90
+
91
+ cnt = 1
92
+
93
+ End If
94
+
95
+ Loop
96
+
97
+ End Sub
98
+
99
+ ```
100
+
101
+
102
+
103
+ Do...Loopで前から順にカウントしていく方が分かり安いしシンプルになると思います。
104
+
105
+ ttyp03さんのと考え方は同じですが、挿入はまとめてするようにしてみました。