回答編集履歴

7

コード修正

2018/03/15 08:08

投稿

hatena19
hatena19

スコア33740

test CHANGED
@@ -118,15 +118,11 @@
118
118
 
119
119
 
120
120
 
121
- '値のみコピー
121
+ '値のみコピーの場合、下記の代入操作が、
122
122
 
123
- rng1.Copy rng2, Paste:=xlPasteValues
123
+ '高速かつクリップポードを使わずにコピーできるのでお勧め
124
124
 
125
-
126
-
127
- '下記のの方が高速かつクリップポードを使わずにコピーできるのでお勧め
128
-
129
- 'rng2.Value = rng1.Value
125
+ rng2.Value = rng1.Value
130
126
 
131
127
 
132
128
 

6

コード修正

2018/03/15 08:08

投稿

hatena19
hatena19

スコア33740

test CHANGED
File without changes

5

コード修正

2018/03/15 07:58

投稿

hatena19
hatena19

スコア33740

test CHANGED
@@ -112,7 +112,7 @@
112
112
 
113
113
  Else
114
114
 
115
- Set rng1 = ws1.Range(rng1.Offset(0, 2), rng1.End(xlToRight)) 'コピー元範囲
115
+ Set rng1 = ws1.Range(rng1.Offset(0, 3), rng1.End(xlToRight)) 'コピー元範囲
116
116
 
117
117
  Set rng2 = ws2.Range("A1").Resize(rng1.Rows.Count, rng1.Columns.Count) 'コピー先範囲
118
118
 

4

間違い修正

2018/03/15 07:55

投稿

hatena19
hatena19

スコア33740

test CHANGED
@@ -102,7 +102,7 @@
102
102
 
103
103
 
104
104
 
105
- Set rng1 = ws1.Range("A:A").Find("1111") '該当データ検索
105
+ Set rng1 = ws1.Range("A:A").Find("111111115") '該当データ検索
106
106
 
107
107
 
108
108
 

3

説明追加

2018/03/15 07:10

投稿

hatena19
hatena19

スコア33740

test CHANGED
@@ -145,3 +145,5 @@
145
145
  - 各オブジェクトを変数に代入して利用すると見通しのよいコードになる。
146
146
 
147
147
  - 値のみのコピーなら代入処理がシンプルかつ高速。
148
+
149
+ - 不要な Select はしない。

2

サンプルコードの追加

2018/03/15 07:05

投稿

hatena19
hatena19

スコア33740

test CHANGED
@@ -55,3 +55,93 @@
55
55
 
56
56
 
57
57
  このようなことを繰り返すことで確実にスキルアップできます。
58
+
59
+
60
+
61
+ 私ならこうする
62
+
63
+ ---
64
+
65
+ できれば、自身で考えてもらえればスキルアップになるかと、あえてリンク先だけの紹介に止めましたが、せっかくなので、コード例を提示しておきます。
66
+
67
+
68
+
69
+ ```vba
70
+
71
+ Option Explicit '変数宣言強制
72
+
73
+
74
+
75
+ Sub Test()
76
+
77
+ Dim wb1 As Workbook
78
+
79
+ Dim wb2 As Workbook
80
+
81
+ Dim ws1 As Worksheet
82
+
83
+ Dim ws2 As Worksheet
84
+
85
+ Dim rng1 As Range
86
+
87
+ Dim rng2 As Range
88
+
89
+
90
+
91
+
92
+
93
+ Set wb1 = Workbooks.Open("C:\Users~~~") '転記元ファイル
94
+
95
+ Set ws1 = wb1.Worksheets(1)
96
+
97
+
98
+
99
+ Set wb2 = Workbooks.Open("C:\Users~~~") '転記先ファイル
100
+
101
+ Set ws2 = wb2.Worksheets(1)
102
+
103
+
104
+
105
+ Set rng1 = ws1.Range("A:A").Find("1111") '該当データ検索
106
+
107
+
108
+
109
+ If rng1 Is Nothing Then
110
+
111
+ MsgBox "none"
112
+
113
+ Else
114
+
115
+ Set rng1 = ws1.Range(rng1.Offset(0, 2), rng1.End(xlToRight)) 'コピー元範囲
116
+
117
+ Set rng2 = ws2.Range("A1").Resize(rng1.Rows.Count, rng1.Columns.Count) 'コピー先範囲
118
+
119
+
120
+
121
+ '値のみコピー
122
+
123
+ rng1.Copy rng2, Paste:=xlPasteValues
124
+
125
+
126
+
127
+ '下記のの方が高速かつクリップポードを使わずにコピーできるのでお勧め
128
+
129
+ 'rng2.Value = rng1.Value
130
+
131
+
132
+
133
+ End If
134
+
135
+
136
+
137
+ End Sub
138
+
139
+ ```
140
+
141
+
142
+
143
+ - Option Explicit は宣言しておく。変数のスペルミスやバグの発生の抑制になる。
144
+
145
+ - 各オブジェクトを変数に代入して利用すると見通しのよいコードになる。
146
+
147
+ - 値のみのコピーなら代入処理がシンプルかつ高速。

1

誤字の修正

2018/03/15 06:20

投稿

hatena19
hatena19

スコア33740

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
 
42
42
 
43
- ただし、「マクロの記録」は手作業をコードに変換しただけなので、効率的でコードになることが多いです。
43
+ ただし、「マクロの記録」は手作業をコードに変換しただけなので、効率的でない冗長なコードになることが多いです。
44
44
 
45
45
  例えば、今回の場合、手作業だと、範囲選択してコピー、目的のセル範囲に移動して貼り付け、という処理になりますので、「マクロの記録」でできあがるコードは数行のものになります。 ところが、VBAなら、Copyメソッド1行で同じことができます。 あるいは、代入という操作でも1行でできます。
46
46