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

回答編集履歴

1

追記をうけて

2016/08/26 04:38

投稿

jawa
jawa

スコア3020

answer CHANGED
@@ -41,4 +41,63 @@
41
41
  Next
42
42
  Next
43
43
  ```
44
+
45
+ 追加で記載いただいたコードについて
46
+ ---
47
+ 今手元に動作確認できる環境がないので未確認での指摘です。すみません。
48
+
49
+ まず、`Windows("VBAテスト.xlsx").Activate`の部分について。
50
+ 最初に「ActiveWorkbookの全シート」を対象にループ処理していますが、そのループの最中に「別のブックをアクティブ化」してしまうことになります。
51
+ 動作させてみないとわかりませんが、そんなことをして最初のループが正しく継続されるかが心配です。
52
+
53
+ 次に、
54
+ `lastRow = sht.Cells(sht.Rows.Count, 1).End(xlUp).Row + 1`
55
+ の部分ですが、おそらく出力ブックの最終行から次の出力位置を取得したいのだと思いますが、shtは読取ブック内のシートです。
56
+
57
+ 最後に
58
+ `Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False, Transpose:=False`
59
+ の部分ですが、`Selection`は現在のアクティブシート上で選択されているセル(またはオブジェクト)を意味します。
60
+
44
- 参考まで
61
+ これ以前
62
+ `Windows("VBAテスト.xlsx").Activate`
63
+ でブックはアクティブ化していますが、出力先のシートや対象セルは指定していないので「たまたまそのブックで選択されているセルに出力する」ような動作になってしまうと思います。
64
+ せっかくlastRowを取得していますがこれも利用していません。
65
+
66
+ 貼り付け先を指定したコピー&ペーストにするか、もしくはSelectionを使うなら事前に貼り付けるセルをSelectする必要があります。
67
+
68
+ 以上をまとめると以下のようなコードになると思います。
69
+ ```
70
+ Sub 書きかけ()
71
+ Dim wbRead As Workbook
72
+ Dim wbOut As Workbook
73
+ Dim shtRead As Worksheet
74
+ Dim shtOut As Worksheet
75
+
76
+ Set wbRead = ActiveWorkbook
77
+ Set wbOut = Workbooks("4.xls")
78
+ Set shtOut = wbOut.Worksheets("Sheet1")
79
+
80
+ Dim rng As Range
81
+ Dim lastRow As Long
82
+
83
+ '現在のブック内にあるすべてのシートをループ処理
84
+ For Each shtRead In wbRead.Worksheets
85
+ '対象シート内のA列先頭からA列最終データ行までをループ処理
86
+ For Each rng In shtRead.Range(shtRead.Cells(1, 1), shtRead.Cells(shtRead.Rows.Count, 1).End(xlUp))
87
+ 'A列が1なら、その行をコピー
88
+ If shtRead.Cells(rng.Row, 1) = 1 Then
89
+ '読込シートから行コピー
90
+ shtRead.Rows(rng.Row).Copy
91
+
92
+ 'DBブックを選択し、一番下の行番号を取得
93
+ lastRow = shtOut.Cells(shtOut.Rows.Count, 1).End(xlUp).Row + 1
94
+ '出力シートに値で貼り付け
95
+ shtOut.Rows(lastRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
96
+ :=False, Transpose:=False
97
+ End If
98
+ Next rng
99
+ Next shtRead
100
+ End Sub
101
+ ```
102
+
103
+ 実行環境がないため、エラー等あるかもしれません。参考までに。