回答編集履歴

1

tuiki

2018/07/25 07:27

投稿

jawa
jawa

スコア3013

test CHANGED
@@ -97,3 +97,127 @@
97
97
  ここらへんがはっきりしないとアドバイスが難しいです。
98
98
 
99
99
  追記・修正をお願いします。
100
+
101
+
102
+
103
+ (回答を受けて追記)
104
+
105
+ ---
106
+
107
+ 整理すると
108
+
109
+ ・A1~A3のセルで値が入力されたタイミングで
110
+
111
+ ・A20~A18の空いているセルに転記する
112
+
113
+ といった感じであってますでしょうか。
114
+
115
+
116
+
117
+ 全てのセルに1回ずつしか値が入力されないのならよいのですが、Worksheet_Chagneイベントは値を変更するたびに発生しますので、A1⇒A2⇒A1(変更)としたときにA18まで転記してしまいそうですね。
118
+
119
+ ここらへんの仕様をどうするか、もう少し詰めた方がいいかもしれません。
120
+
121
+
122
+
123
+ ---
124
+
125
+ とりあえず各セルには1回ずつしか入力されない前提で、簡単なサンプルを提供させていただきます。
126
+
127
+ ```
128
+
129
+ Private Sub Worksheet_Change(ByVal target As Range)
130
+
131
+
132
+
133
+ 'A列以外は監視対象外
134
+
135
+ If target.Column > 1 Then Exit Sub
136
+
137
+
138
+
139
+ '30で割った余りが1~3となる行のみ処理(つまり各グループの先頭3行)
140
+
141
+ If (target.Row Mod 30) >= 1 And (target.Row Mod 30) <= 3 Then
142
+
143
+ If target.Value <> "" Then
144
+
145
+ Call tenki(target)
146
+
147
+ End If
148
+
149
+ Else
150
+
151
+ '対象外の行では何もしない
152
+
153
+ Exit Sub
154
+
155
+ End If
156
+
157
+ End Sub
158
+
159
+
160
+
161
+ Sub tenki(ByVal target As Range)
162
+
163
+
164
+
165
+ Dim i As Integer
166
+
167
+ Dim iRow_Fr As Integer
168
+
169
+ Dim iRow_To As Integer
170
+
171
+ Dim iRow_End As Integer
172
+
173
+
174
+
175
+ '転記元行
176
+
177
+ iRowFr = target.Row
178
+
179
+
180
+
181
+ 'グループ最終行
182
+
183
+ iRowEnd = target.Row - (target.Row Mod 30) + 20
184
+
185
+
186
+
187
+
188
+
189
+ '3行分のループ処理
190
+
191
+ For i = 0 To 2
192
+
193
+ '転記先の行番号
194
+
195
+ iRowTo = iRowEnd - i
196
+
197
+
198
+
199
+ If Cells(iRowTo, "A") = "" Then
200
+
201
+ '転記先のA列が空なら転記
202
+
203
+ Cells(iRowTo, "A") = Cells(iRowFr, "A")
204
+
205
+ Cells(iRowTo, "E") = 10
206
+
207
+ Cells(iRowTo, "F") = "abc"
208
+
209
+
210
+
211
+ '転記で来たらループ終了
212
+
213
+ Exit For
214
+
215
+ End If
216
+
217
+ Next
218
+
219
+ End Sub
220
+
221
+ ```
222
+
223
+ 同じセルに複数回入力したときとか、範囲クリアした時とか問題ありますが、とりあえずの参考までに。