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

回答編集履歴

7

コード修正

2018/03/15 08:08

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -58,11 +58,9 @@
58
58
  Set rng1 = ws1.Range(rng1.Offset(0, 3), rng1.End(xlToRight)) 'コピー元範囲
59
59
  Set rng2 = ws2.Range("A1").Resize(rng1.Rows.Count, rng1.Columns.Count) 'コピー先範囲
60
60
 
61
- '値のみコピー
61
+ '値のみコピーの場合、下記の代入操作が、
62
- rng1.Copy rng2, Paste:=xlPasteValues
63
-
64
- '下記のの方が高速かつクリップポードを使わずにコピーできるのでお勧め
62
+ '高速かつクリップポードを使わずにコピーできるのでお勧め
65
- 'rng2.Value = rng1.Value
63
+ rng2.Value = rng1.Value
66
64
 
67
65
  End If
68
66
 

6

コード修正

2018/03/15 08:08

投稿

hatena19
hatena19

スコア34367

answer CHANGED
File without changes

5

コード修正

2018/03/15 07:58

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -55,7 +55,7 @@
55
55
  If rng1 Is Nothing Then
56
56
  MsgBox "none"
57
57
  Else
58
- Set rng1 = ws1.Range(rng1.Offset(0, 2), rng1.End(xlToRight)) 'コピー元範囲
58
+ Set rng1 = ws1.Range(rng1.Offset(0, 3), rng1.End(xlToRight)) 'コピー元範囲
59
59
  Set rng2 = ws2.Range("A1").Resize(rng1.Rows.Count, rng1.Columns.Count) 'コピー先範囲
60
60
 
61
61
  '値のみコピー

4

間違い修正

2018/03/15 07:55

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -50,7 +50,7 @@
50
50
  Set wb2 = Workbooks.Open("C:\Users~~~") '転記先ファイル
51
51
  Set ws2 = wb2.Worksheets(1)
52
52
 
53
- Set rng1 = ws1.Range("A:A").Find("1111") '該当データ検索
53
+ Set rng1 = ws1.Range("A:A").Find("111111115") '該当データ検索
54
54
 
55
55
  If rng1 Is Nothing Then
56
56
  MsgBox "none"

3

説明追加

2018/03/15 07:10

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -71,4 +71,5 @@
71
71
 
72
72
  - Option Explicit は宣言しておく。変数のスペルミスやバグの発生の抑制になる。
73
73
  - 各オブジェクトを変数に代入して利用すると見通しのよいコードになる。
74
- - 値のみのコピーなら代入処理がシンプルかつ高速。
74
+ - 値のみのコピーなら代入処理がシンプルかつ高速。
75
+ - 不要な Select はしない。

2

サンプルコードの追加

2018/03/15 07:05

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -26,4 +26,49 @@
26
26
 
27
27
  [Office TANAKA \- Excel VBA講座:セルの操作[セルのコピー]](http://officetanaka.net/excel/vba/cell/cell09.htm)
28
28
 
29
- このようなことを繰り返すことで確実にスキルアップできます。
29
+ このようなことを繰り返すことで確実にスキルアップできます。
30
+
31
+ 私ならこうする
32
+ ---
33
+ できれば、自身で考えてもらえればスキルアップになるかと、あえてリンク先だけの紹介に止めましたが、せっかくなので、コード例を提示しておきます。
34
+
35
+ ```vba
36
+ Option Explicit '変数宣言強制
37
+
38
+ Sub Test()
39
+ Dim wb1 As Workbook
40
+ Dim wb2 As Workbook
41
+ Dim ws1 As Worksheet
42
+ Dim ws2 As Worksheet
43
+ Dim rng1 As Range
44
+ Dim rng2 As Range
45
+
46
+
47
+ Set wb1 = Workbooks.Open("C:\Users~~~") '転記元ファイル
48
+ Set ws1 = wb1.Worksheets(1)
49
+
50
+ Set wb2 = Workbooks.Open("C:\Users~~~") '転記先ファイル
51
+ Set ws2 = wb2.Worksheets(1)
52
+
53
+ Set rng1 = ws1.Range("A:A").Find("1111") '該当データ検索
54
+
55
+ If rng1 Is Nothing Then
56
+ MsgBox "none"
57
+ Else
58
+ Set rng1 = ws1.Range(rng1.Offset(0, 2), rng1.End(xlToRight)) 'コピー元範囲
59
+ Set rng2 = ws2.Range("A1").Resize(rng1.Rows.Count, rng1.Columns.Count) 'コピー先範囲
60
+
61
+ '値のみコピー
62
+ rng1.Copy rng2, Paste:=xlPasteValues
63
+
64
+ '下記のの方が高速かつクリップポードを使わずにコピーできるのでお勧め
65
+ 'rng2.Value = rng1.Value
66
+
67
+ End If
68
+
69
+ End Sub
70
+ ```
71
+
72
+ - Option Explicit は宣言しておく。変数のスペルミスやバグの発生の抑制になる。
73
+ - 各オブジェクトを変数に代入して利用すると見通しのよいコードになる。
74
+ - 値のみのコピーなら代入処理がシンプルかつ高速。

1

誤字の修正

2018/03/15 06:20

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -19,7 +19,7 @@
19
19
  このように「マクロの記録」を使えば、手作業でできることはたいていマクロにできます。
20
20
  できたマクロのコードの意味をヘルプ等で調べれば、そのうち「マクロの記録」に頼らなくてもコードが書けるようになります。
21
21
 
22
- ただし、「マクロの記録」は手作業をコードに変換しただけなので、効率的でコードになることが多いです。
22
+ ただし、「マクロの記録」は手作業をコードに変換しただけなので、効率的でない冗長なコードになることが多いです。
23
23
  例えば、今回の場合、手作業だと、範囲選択してコピー、目的のセル範囲に移動して貼り付け、という処理になりますので、「マクロの記録」でできあがるコードは数行のものになります。 ところが、VBAなら、Copyメソッド1行で同じことができます。 あるいは、代入という操作でも1行でできます。
24
24
 
25
25
  下記のリンク先を参考に、「マクロの記録」のコードを書き換えることもチャレンジしてみてください。