回答編集履歴

2

追加修正

2016/06/14 10:37

投稿

jawa
jawa

スコア3013

test CHANGED
@@ -88,4 +88,74 @@
88
88
 
89
89
 
90
90
 
91
+
92
+
93
+
94
+
95
+ 追加修正
96
+
97
+ ---
98
+
99
+ 上記のコードでは入力シートの日付の並びと出力シートの日付の並びが一緒でない場合(日付けが飛んだりしている場合)に、関係ない日付の列にデータを出力してしまうケースが存在しました。
100
+
101
+
102
+
103
+ そのようなデータが想定される場合は、出力シートで正しい日付の列を見つけるまでループしてあげる必要があります。
104
+
105
+ ```
106
+
91
- いかがでしょうか?
107
+ Sub 台帳転記()
108
+
109
+ Dim gyod
110
+
111
+ Dim gyoi
112
+
113
+ Dim hir
114
+
115
+ Dim hig
116
+
117
+ Dim retu
118
+
119
+ hir = 3
120
+
121
+ gyoi = 5
122
+
123
+ retu = 2
124
+
125
+ For gyod = 2 To Worksheets("入力").Cells(Rows.Count, 1).End(xlUp).Row
126
+
127
+ Do
128
+
129
+ If Worksheets("確認用").Cells(2, hir) = Worksheets("入力").Cells(gyod, 1) Then
130
+
131
+ '日付けが一致した場合はDoループを抜ける
132
+
133
+ Exit Do
134
+
135
+ Else
136
+
137
+ '日付けが一致しない場合は出力位置を変更
138
+
139
+ hir = hir + 2
140
+
141
+ gyoi = 5
142
+
143
+ End If
144
+
145
+ '確認用シートの日付が""の列になるまでに一致する日付けが見つからなかったら処理終了
146
+
147
+ If Worksheets("確認用").Cells(2, hir) = "" Then Exit Sub
148
+
149
+ Loop
150
+
151
+ Worksheets("確認用").Cells(gyoi, hir - 1) = Worksheets("入力").Cells(gyod, 3)
152
+
153
+ Worksheets("確認用").Cells(gyoi, hir) = Worksheets("入力").Cells(gyod, 4)
154
+
155
+ gyoi = gyoi + 1
156
+
157
+ Next
158
+
159
+ End Sub
160
+
161
+ ```

1

修正

2016/06/14 10:37

投稿

jawa
jawa

スコア3013

test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
  他の方からも指摘があるように、日付けが変わった時にデータを書かずに読み取り行を次に進めてしまっています。
36
36
 
37
- ループ内で読み取り位置を変更するのはバグのもとになるので、行を戻してあげるよりも書いてしまった方がよいでしょう。
37
+ ループ内でループ変数の値を変更するのはバグや無限ループのもとになるので、行を戻してあげるよりもデータを書いてしまった方がよいでしょう。
38
38
 
39
39
 
40
40