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

回答編集履歴

1

追記

2017/05/09 13:21

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -12,4 +12,34 @@
12
12
 
13
13
  [Office TANAKA - Excel VBA講座:セルの操作[セルのコピー]](http://officetanaka.net/excel/vba/cell/cell09.htm)
14
14
 
15
- やろうとしていることがもっとシンプルに効率的にできるかもしれません。
15
+ やろうとしていることがもっとシンプルに効率的にできるかもしれません。
16
+
17
+ 追記
18
+ ---
19
+ 上記はプログラミングでの一般論で回答しましたが、ExcelでのCut & Pasteの場合、この説明と実際の動作は少し異なりました。詳細は、jawaさんの回答を参照してください。
20
+
21
+ で、今回の質問のコードの目的は、選択範囲をSheets(2)へ移動させるというのが目的ですよね。
22
+
23
+ だとすると、ループで1行ずつコピーしなくても、Range ごとコピーすればすみます。
24
+ 1行ずつ処理することでの問題点も発生せず、かつ、高速です。
25
+
26
+ ```
27
+ MoveFirstRow = MoveTargetSheet.Cells(Rows.Count, 1).End(xlUp).Row
28
+ i = MoveFirstRow + 1
29
+
30
+ TargetSheet.Unprotect
31
+
32
+ For Each s In DeleteRow.Rows
33
+ Debug.Print "移動対象行:" & s.Row
34
+ Next s
35
+
36
+ DeleteRow.Cut MoveTargetSheet.Rows(i) 'この1行だけ
37
+
38
+ TargetSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
39
+ DeleteDataMove = True
40
+ Exit Function
41
+ ```
42
+
43
+ 質問のコードは、マクロ記録したものをそのまま使っているだと思いますが、
44
+ 「リンク先を熟読して」というのは、マクロ記録だけに頼らず、
45
+ そこからさらに追求して欲しいという含みをもたせたものでした。