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

回答編集履歴

1

コードの間違い修正

2018/12/12 06:39

投稿

hatena19
hatena19

スコア34390

answer CHANGED
@@ -22,13 +22,14 @@
22
22
  下記の1行ですみます。
23
23
 
24
24
  ```vba
25
- Worksheets("本店.xlsb").Range("A1:B5").Copy ThisWorkbook.Range("A1:B5")
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
- ThisWorkbook.Range("A1:B5").Value = Worksheets("本店.xlsb").Range("A1:B5").Value
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
+ 仕様が分からないので転記元範囲、転記先範囲は適当です、またエディター直書きですので間違いがあるかもしれません。書き方の参考にしてください。