回答編集履歴
1
tuiki
answer
CHANGED
@@ -47,4 +47,66 @@
|
|
47
47
|
・A2やA3が変更された時はどんな動作?
|
48
48
|
|
49
49
|
ここらへんがはっきりしないとアドバイスが難しいです。
|
50
|
-
追記・修正をお願いします。
|
50
|
+
追記・修正をお願いします。
|
51
|
+
|
52
|
+
(回答を受けて追記)
|
53
|
+
---
|
54
|
+
整理すると
|
55
|
+
・A1~A3のセルで値が入力されたタイミングで
|
56
|
+
・A20~A18の空いているセルに転記する
|
57
|
+
といった感じであってますでしょうか。
|
58
|
+
|
59
|
+
全てのセルに1回ずつしか値が入力されないのならよいのですが、Worksheet_Chagneイベントは値を変更するたびに発生しますので、A1⇒A2⇒A1(変更)としたときにA18まで転記してしまいそうですね。
|
60
|
+
ここらへんの仕様をどうするか、もう少し詰めた方がいいかもしれません。
|
61
|
+
|
62
|
+
---
|
63
|
+
とりあえず各セルには1回ずつしか入力されない前提で、簡単なサンプルを提供させていただきます。
|
64
|
+
```
|
65
|
+
Private Sub Worksheet_Change(ByVal target As Range)
|
66
|
+
|
67
|
+
'A列以外は監視対象外
|
68
|
+
If target.Column > 1 Then Exit Sub
|
69
|
+
|
70
|
+
'30で割った余りが1~3となる行のみ処理(つまり各グループの先頭3行)
|
71
|
+
If (target.Row Mod 30) >= 1 And (target.Row Mod 30) <= 3 Then
|
72
|
+
If target.Value <> "" Then
|
73
|
+
Call tenki(target)
|
74
|
+
End If
|
75
|
+
Else
|
76
|
+
'対象外の行では何もしない
|
77
|
+
Exit Sub
|
78
|
+
End If
|
79
|
+
End Sub
|
80
|
+
|
81
|
+
Sub tenki(ByVal target As Range)
|
82
|
+
|
83
|
+
Dim i As Integer
|
84
|
+
Dim iRow_Fr As Integer
|
85
|
+
Dim iRow_To As Integer
|
86
|
+
Dim iRow_End As Integer
|
87
|
+
|
88
|
+
'転記元行
|
89
|
+
iRowFr = target.Row
|
90
|
+
|
91
|
+
'グループ最終行
|
92
|
+
iRowEnd = target.Row - (target.Row Mod 30) + 20
|
93
|
+
|
94
|
+
|
95
|
+
'3行分のループ処理
|
96
|
+
For i = 0 To 2
|
97
|
+
'転記先の行番号
|
98
|
+
iRowTo = iRowEnd - i
|
99
|
+
|
100
|
+
If Cells(iRowTo, "A") = "" Then
|
101
|
+
'転記先のA列が空なら転記
|
102
|
+
Cells(iRowTo, "A") = Cells(iRowFr, "A")
|
103
|
+
Cells(iRowTo, "E") = 10
|
104
|
+
Cells(iRowTo, "F") = "abc"
|
105
|
+
|
106
|
+
'転記で来たらループ終了
|
107
|
+
Exit For
|
108
|
+
End If
|
109
|
+
Next
|
110
|
+
End Sub
|
111
|
+
```
|
112
|
+
同じセルに複数回入力したときとか、範囲クリアした時とか問題ありますが、とりあえずの参考までに。
|