人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【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

●質問者: adgt
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から

http://f.hatena.ne.jp/adgt/20170213094304
イメージを添付し忘れていました。上記のような転記を考えています。


1 ● ken3memo
ベストアンサー

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

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


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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ