回答編集履歴
1
コードの間違い修正
answer
CHANGED
|
@@ -22,13 +22,14 @@
|
|
|
22
22
|
下記の1行ですみます。
|
|
23
23
|
|
|
24
24
|
```vba
|
|
25
|
-
|
|
25
|
+
Workbooks("本店.xlsb").WorkSheets("データシート").Range("A1:B5").Copy _ ThisWorkbook.WorkSheets("転記シート").Range("A1:B5")
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
値だけでいいなら、下記のようも記述できます。(こちらの方が高速です。)
|
|
28
|
+
値だけでいいなら、下記のようにも記述できます。(こちらの方が高速です。)
|
|
29
29
|
|
|
30
30
|
```vba
|
|
31
|
+
ThisWorkbook.WorkSheets("転記シート").Range("A1:B5").Value = _
|
|
31
|
-
|
|
32
|
+
Worksheets("本店.xlsb").WorkSheets("データシート").Range("A1:B5").Value
|
|
32
33
|
```
|
|
33
34
|
|
|
34
35
|
[Office TANAKA - Excel VBA講座:セルの操作[セルのコピー]](http://officetanaka.net/excel/vba/cell/cell09.htm)
|
|
@@ -37,4 +38,27 @@
|
|
|
37
38
|
アクティブにブックやシートに対して操作するということを前提にすると、
|
|
38
39
|
ブックやシートのアクティブを切り替えるコードが必要になり、処理が重くなるし、コードが読みにくくなりバグの原因になります。
|
|
39
40
|
|
|
40
|
-
対象とするブックやシート、レンジを変数にいれておいて、それに対して処理をするというコードにするとシンプルかつ高速かつバグが発生しにくいコードになります。
|
|
41
|
+
対象とするブックやシート、レンジを変数にいれておいて、それに対して処理をするというコードにするとシンプルかつ高速かつバグが発生しにくいコードになります。
|
|
42
|
+
|
|
43
|
+
コード例を出しておきます。
|
|
44
|
+
```
|
|
45
|
+
Dim rng支店 As Range '支店名のセル
|
|
46
|
+
Set rng支店 = ThisWorkbook.WorkSheet("設定シート").Range("A1")
|
|
47
|
+
Dim rng転記先 As Range '転記先範囲
|
|
48
|
+
Set rng転記先 = ThisWorkbook.WorkSheet("転記シート").Range("A1:B5")
|
|
49
|
+
|
|
50
|
+
Dim wb支店 As Workbook '支店ブック
|
|
51
|
+
Do Until rng支店.Value = ""
|
|
52
|
+
Set wb支店 = Workbooks.Open(ThisWorkbook.Path & "\" & rng支店.Value)
|
|
53
|
+
rng転記先.Value = wb支店.WorkSheets("データシート").Range("A1:B5").Value
|
|
54
|
+
wb支店.Close savechanges:=False
|
|
55
|
+
Set rng転記先 = rng転記先.Offset(rng転記先.Rows.Count) '転記先範囲を移動
|
|
56
|
+
Set rng支店 = rng支店.Offset(1) '次行のセルに移動
|
|
57
|
+
Loop
|
|
58
|
+
```
|
|
59
|
+
どうでしょうか。
|
|
60
|
+
何に対して何をしているかシンプルで分かりやすいとおもいませんか。
|
|
61
|
+
不必要なActivateやSelectがないので処理を高速です。
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
仕様が分からないので転記元範囲、転記先範囲は適当です、またエディター直書きですので間違いがあるかもしれません。書き方の参考にしてください。
|