Excelでタスク管理をするマクロを作ろうと思っているのですが上手くいきません。Taskシートで、完了日にデータが入っているものを、済シートの最終行の一つ下へ転記し、Taskシートのデータを消そうと思うのですが、上手くできません。なぜか転記先が最終行の1つ下にならず、なぜか、B3,C2,D2,G-I2に一行のみ転記されてしまいます。マクロにどう手を加えたらよいかを教えてください。
Sub 完了タスク転記()
For rw = 44 To 200
If Worksheets("Task").Range("I" & rw) <> "" Then
Worksheets("済").Range("B" & (Range("B1").End(xlDown).Row + 1)).Value = Worksheets("Task").Range("E" & rw).Value
Worksheets("済").Range("C" & (Range("B1").End(xlDown).Row)).Value = Worksheets("Task").Range("F" & rw).Value
Worksheets("済").Range("D" & (Range("B1").End(xlDown).Row)).Value = Worksheets("Task").Range("G" & rw).Value
Worksheets("済").Range("G" & (Range("B1").End(xlDown).Row)).Value = Worksheets("Task").Range("D" & rw).Value
Worksheets("済").Range("H" & (Range("B1").End(xlDown).Row)).Value = Worksheets("Task").Range("H" & rw).Value
Worksheets("済").Range("I" & (Range("B1").End(xlDown).Row)).Value = Worksheets("Task").Range("I" & rw).Value
Worksheets("Task").Range("D" & rw & ":I" & rw).ClearContents
End If
Next
End Sub
Worksheets("済").Range("B" & (Range("B1").End(xlDown).Row + 1)).Value = Worksheets("Task").Range("E" & rw).Value
"B" & (Range("B1").End(xlDown).Row + 1)
シートが指定されていないので、
これだと、今いる実行時のアクティブシートを見てしまい、
B列の最終行を誤判断してしまうのでは?
試してほしい処置は、
同じく頭に シート指定を入れて、
Worksheets("済").Range("B" & (Worksheets("済").Range("B1").End(xlDown).Row + 1)).Value = Worksheets("Task").Range("E" & rw).Value
を各行に追加して、最終行を判断するシートを指定してみては?
>なぜか、B3,C2,D2,G-I2に一行のみ転記されてしまいます
最終行の判断が現在のアクティブシートになっているので、
セット位置が動かない 見ている場所(sheets)が違う?と、予想してみました。
あと、余談・蛇足ですが、
毎回セット位置を.End(xlDown).Rowで求めていますが、
y = Worksheets("済").Range("B1").End(xlDown).Row + 1 '最終行+いち が セット位置
Worksheets("済").Range("B" & y).Value = Worksheets("Task").Range("E" & rw).Value
Worksheets("済").Range("C" & y).Value = Worksheets("Task").Range("F" & rw).Value
・
・
・
Worksheets("済").Range("I" & y).Value = Worksheets("Task").Range("I" & rw).Value
とセット位置の計算が一回のほうがわかりやすかったり
おっと、余談でした、
シートの指定
Worksheets("済").Range("B" & (Worksheets("済").Range("B1").End(xlDown).Row + 1)).Value = Worksheets("Task").Range("E" & rw).Value
を試してみてください。
問題解決の参考となれば幸いです。
Worksheets("済").Range("B" & (Range("B1").End(xlDown).Row + 1)).Value = Worksheets("Task").Range("E" & rw).Value
"B" & (Range("B1").End(xlDown).Row + 1)
シートが指定されていないので、
これだと、今いる実行時のアクティブシートを見てしまい、
B列の最終行を誤判断してしまうのでは?
試してほしい処置は、
同じく頭に シート指定を入れて、
Worksheets("済").Range("B" & (Worksheets("済").Range("B1").End(xlDown).Row + 1)).Value = Worksheets("Task").Range("E" & rw).Value
を各行に追加して、最終行を判断するシートを指定してみては?
>なぜか、B3,C2,D2,G-I2に一行のみ転記されてしまいます
最終行の判断が現在のアクティブシートになっているので、
セット位置が動かない 見ている場所(sheets)が違う?と、予想してみました。
あと、余談・蛇足ですが、
毎回セット位置を.End(xlDown).Rowで求めていますが、
y = Worksheets("済").Range("B1").End(xlDown).Row + 1 '最終行+いち が セット位置
Worksheets("済").Range("B" & y).Value = Worksheets("Task").Range("E" & rw).Value
Worksheets("済").Range("C" & y).Value = Worksheets("Task").Range("F" & rw).Value
・
・
・
Worksheets("済").Range("I" & y).Value = Worksheets("Task").Range("I" & rw).Value
とセット位置の計算が一回のほうがわかりやすかったり
おっと、余談でした、
シートの指定
Worksheets("済").Range("B" & (Worksheets("済").Range("B1").End(xlDown).Row + 1)).Value = Worksheets("Task").Range("E" & rw).Value
を試してみてください。
問題解決の参考となれば幸いです。
ご回答ありがとうございます。初歩的なミスでお恥ずかしい限りです。
また、セット位置の変数指定も参考にさせて頂きました!
とても助かりました。本当にありがとうございます。
ご回答ありがとうございます。初歩的なミスでお恥ずかしい限りです。
2017/02/15 05:46:19また、セット位置の変数指定も参考にさせて頂きました!
とても助かりました。本当にありがとうございます。