【excelマクロ】別シートの最終行にデータを転記する方法を教えてください。

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2017/02/15 05:44:22
id:adgt

質問者から

adgt2017/02/14 02:33:26

http://f.hatena.ne.jp/adgt/20170213094304

イメージを添付し忘れていました。上記のような転記を考えています。

ベストアンサー

id:ken3memo No.1

回答回数317ベストアンサー獲得回数115

Worksheets("済").Range("B" & (Range("B1").End(xlDown).Row + 1)).Value = Worksheets("Task").Range("E" & rw).Value

f:id:ken3memo:20170214032329j:image

"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
を試してみてください。

問題解決の参考となれば幸いです。

id:adgt

ご回答ありがとうございます。初歩的なミスでお恥ずかしい限りです。
また、セット位置の変数指定も参考にさせて頂きました!
とても助かりました。本当にありがとうございます。

2017/02/15 05:46:19

その他の回答0件)

id:ken3memo No.1

回答回数317ベストアンサー獲得回数115ここでベストアンサー

Worksheets("済").Range("B" & (Range("B1").End(xlDown).Row + 1)).Value = Worksheets("Task").Range("E" & rw).Value

f:id:ken3memo:20170214032329j:image

"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
を試してみてください。

問題解決の参考となれば幸いです。

id:adgt

ご回答ありがとうございます。初歩的なミスでお恥ずかしい限りです。
また、セット位置の変数指定も参考にさせて頂きました!
とても助かりました。本当にありがとうございます。

2017/02/15 05:46:19

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません