回答編集履歴

1

コードの間違い修正

2018/12/12 06:39

投稿

hatena19
hatena19

スコア33722

test CHANGED
@@ -46,19 +46,21 @@
46
46
 
47
47
  ```vba
48
48
 
49
- Worksheets("本店.xlsb").Range("A1:B5").Copy ThisWorkbook.Range("A1:B5")
49
+ Workbooks("本店.xlsb").WorkSheets("データシート").Range("A1:B5").Copy _ ThisWorkbook.WorkSheets("転記シート").Range("A1:B5")
50
50
 
51
51
  ```
52
52
 
53
53
 
54
54
 
55
- 値だけでいいなら、下記のようも記述できます。(こちらの方が高速です。)
55
+ 値だけでいいなら、下記のようも記述できます。(こちらの方が高速です。)
56
56
 
57
57
 
58
58
 
59
59
  ```vba
60
60
 
61
+ ThisWorkbook.WorkSheets("転記シート").Range("A1:B5").Value = _
62
+
61
- ThisWorkbook.Range("A1:B5").Value = Worksheets("本店.xlsb").Range("A1:B5").Value
63
+ Worksheets("本店.xlsb").WorkSheets("データシート").Range("A1:B5").Value
62
64
 
63
65
  ```
64
66
 
@@ -77,3 +79,49 @@
77
79
 
78
80
 
79
81
  対象とするブックやシート、レンジを変数にいれておいて、それに対して処理をするというコードにするとシンプルかつ高速かつバグが発生しにくいコードになります。
82
+
83
+
84
+
85
+ コード例を出しておきます。
86
+
87
+ ```
88
+
89
+ Dim rng支店 As Range '支店名のセル
90
+
91
+ Set rng支店 = ThisWorkbook.WorkSheet("設定シート").Range("A1")
92
+
93
+ Dim rng転記先 As Range '転記先範囲
94
+
95
+ Set rng転記先 = ThisWorkbook.WorkSheet("転記シート").Range("A1:B5")
96
+
97
+
98
+
99
+ Dim wb支店 As Workbook '支店ブック
100
+
101
+ Do Until rng支店.Value = ""
102
+
103
+ Set wb支店 = Workbooks.Open(ThisWorkbook.Path & "\" & rng支店.Value)
104
+
105
+ rng転記先.Value = wb支店.WorkSheets("データシート").Range("A1:B5").Value
106
+
107
+ wb支店.Close savechanges:=False
108
+
109
+ Set rng転記先 = rng転記先.Offset(rng転記先.Rows.Count) '転記先範囲を移動
110
+
111
+ Set rng支店 = rng支店.Offset(1) '次行のセルに移動
112
+
113
+ Loop
114
+
115
+ ```
116
+
117
+ どうでしょうか。
118
+
119
+ 何に対して何をしているかシンプルで分かりやすいとおもいませんか。
120
+
121
+ 不必要なActivateやSelectがないので処理を高速です。
122
+
123
+
124
+
125
+
126
+
127
+ 仕様が分からないので転記元範囲、転記先範囲は適当です、またエディター直書きですので間違いがあるかもしれません。書き方の参考にしてください。