回答編集履歴
2
追加修正
answer
CHANGED
@@ -43,4 +43,39 @@
|
|
43
43
|
|
44
44
|
結果的に「日付が違っていたら出力位置を2列移動して5行目に戻す」という判定に変更しています。
|
45
45
|
|
46
|
+
|
47
|
+
|
48
|
+
追加修正
|
49
|
+
---
|
50
|
+
上記のコードでは入力シートの日付の並びと出力シートの日付の並びが一緒でない場合(日付けが飛んだりしている場合)に、関係ない日付の列にデータを出力してしまうケースが存在しました。
|
51
|
+
|
52
|
+
そのようなデータが想定される場合は、出力シートで正しい日付の列を見つけるまでループしてあげる必要があります。
|
53
|
+
```
|
46
|
-
|
54
|
+
Sub 台帳転記()
|
55
|
+
Dim gyod
|
56
|
+
Dim gyoi
|
57
|
+
Dim hir
|
58
|
+
Dim hig
|
59
|
+
Dim retu
|
60
|
+
hir = 3
|
61
|
+
gyoi = 5
|
62
|
+
retu = 2
|
63
|
+
For gyod = 2 To Worksheets("入力").Cells(Rows.Count, 1).End(xlUp).Row
|
64
|
+
Do
|
65
|
+
If Worksheets("確認用").Cells(2, hir) = Worksheets("入力").Cells(gyod, 1) Then
|
66
|
+
'日付けが一致した場合はDoループを抜ける
|
67
|
+
Exit Do
|
68
|
+
Else
|
69
|
+
'日付けが一致しない場合は出力位置を変更
|
70
|
+
hir = hir + 2
|
71
|
+
gyoi = 5
|
72
|
+
End If
|
73
|
+
'確認用シートの日付が""の列になるまでに一致する日付けが見つからなかったら処理終了
|
74
|
+
If Worksheets("確認用").Cells(2, hir) = "" Then Exit Sub
|
75
|
+
Loop
|
76
|
+
Worksheets("確認用").Cells(gyoi, hir - 1) = Worksheets("入力").Cells(gyod, 3)
|
77
|
+
Worksheets("確認用").Cells(gyoi, hir) = Worksheets("入力").Cells(gyod, 4)
|
78
|
+
gyoi = gyoi + 1
|
79
|
+
Next
|
80
|
+
End Sub
|
81
|
+
```
|
1
修正
answer
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
②日付が変わった時に列移動しかしていない
|
17
17
|
---
|
18
18
|
他の方からも指摘があるように、日付けが変わった時にデータを書かずに読み取り行を次に進めてしまっています。
|
19
|
-
ループ内で
|
19
|
+
ループ内でループ変数の値を変更するのはバグや無限ループのもとになるので、行を戻してあげるよりもデータを書いてしまった方がよいでしょう。
|
20
20
|
|
21
21
|
以上を踏まえたソースコードです。
|
22
22
|
```
|