回答編集履歴
1
tuiki
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
|
+
同じセルに複数回入力したときとか、範囲クリアした時とか問題ありますが、とりあえずの参考までに。
|