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

回答編集履歴

2

ついき

2019/03/28 09:37

投稿

jawa
jawa

スコア3020

answer CHANGED
@@ -1,4 +1,36 @@
1
1
  コード内の変数`a`と`b`はそれぞれ変数`fP`と`fN`の誤記ではないかと思います。
2
2
  この誤記が原因で、そもそもブックを開けていないからWorkbooksにも見つからないのではないでしょうか?
3
3
 
4
- まずはこの誤記を修正したコードで動作確認してみてください。
4
+ まずはこの誤記を修正したコードで動作確認してみてください。
5
+
6
+ (追加のアドバイス)
7
+ ---
8
+ 指摘① 宣言文について
9
+ ---
10
+ `Dim fP , fN as String`
11
+ のような宣言文の書き方は、変数`fP`と変数`fN`をそれぞれString型で宣言しているように見えますが、実際には`fN`だけString型で宣言され、fPは型指定なし(=Variant型)で宣言されていることになります。
12
+
13
+ 今回のコードでは特に影響はないと思いますが、ご注意ください。
14
+
15
+ 指摘② 開いたブックの取得について
16
+ ---
17
+ 提示いただいたコードでは`Workbooks.Open`でブックを開き、同じファイル名でブックを探して処理をしようとしています。
18
+
19
+ しかし、`Workbooks.Open`はブックを開いた際にそのブックを戻り値として返してくれています。
20
+ ですので、
21
+ ```
22
+ ' Workbooks.Open a & "\" & b '1
23
+ 'Ln = Workbooks(fN).Sheet1.Cells(Rows.Count, 2).End(xlUp).Row '2 ★エラーが発生するコード★
24
+
25
+ Dim wb As Workbook
26
+ Set wb = Workbooks.Open fP & "\" & fN '1
27
+ Ln = wb.Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row '2 ★エラーが発生するコード★
28
+ ```
29
+ のように処理すれば、わざわざファイル名でブックを探す必要がなく、確実に開いたブックを対象に処理することができます。
30
+
31
+ なお`Sheet1`というシートの指定方法は、`Sheet1`を単独で使用すれば「そのマクロが書かれているブックのSheet1」を参照することができますが、ワークブックのプロパティではないため`Workbooks(fN).Sheet1`という使い方はできません。
32
+
33
+ 指定のブックの第1シートを取得したいのであれば`Workbooks(fN).Worksheets(1)`といった書き方をしましょう。
34
+
35
+
36
+ 以上、参考になれば幸いです。

1

しゅ

2019/03/28 09:37

投稿

jawa
jawa

スコア3020

answer CHANGED
@@ -1,4 +1,4 @@
1
- コード内の変数aと変数bはそれぞれ`fP`と`fN`の誤記ではないかと思います。
1
+ コード内の変数`a``b`はそれぞれ変数`fP`と`fN`の誤記ではないかと思います。
2
- この誤記が原因でそもそもブックを開けていないからWorkbooksにも見つからないのではないでしょうか?
2
+ この誤記が原因でそもそもブックを開けていないからWorkbooksにも見つからないのではないでしょうか?
3
3
 
4
4
  まずはこの誤記を修正したコードで動作確認してみてください。