teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追加修正

2016/06/14 10:37

投稿

jawa
jawa

スコア3020

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

修正

2016/06/14 10:37

投稿

jawa
jawa

スコア3020

answer CHANGED
@@ -16,7 +16,7 @@
16
16
  ②日付が変わった時に列移動しかしていない
17
17
  ---
18
18
  他の方からも指摘があるように、日付けが変わった時にデータを書かずに読み取り行を次に進めてしまっています。
19
- ループ内で読み取り位置を変更するのはバグのもとになるので、行を戻してあげるよりも書いてしまった方がよいでしょう。
19
+ ループ内でループ変数の値を変更するのはバグや無限ループのもとになるので、行を戻してあげるよりもデータを書いてしまった方がよいでしょう。
20
20
 
21
21
  以上を踏まえたソースコードです。
22
22
  ```