質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1030閲覧

【ExcelVBA】パスを指定して開いたブックの表の行数がカウントできない

dondonlondon

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/04/12 15:18

前提・実現したいこと

ExcelVBAで、以下の要領でマクロを作成しています。

ブックを2つ用意する(以下、それぞれブックA、ブックBとします)
→ブックAのセルC4とセルC5にブックBのフォルダパスを入力
→ブックBを開く(ファイル名はVB側に入力しています)
→ブックBの表(8行×6列、見出し行含む)の行数をカウント
→「ブックBはデータが7つあります」とダイアログボックスを表示
→ブックBを閉じる

発生している問題

ブックBの行数のカウントが上手くいきません。
本来であれば7行になるはずなのですが、
何度試しても、ブックBの行数が1になってしまいます。

該当のソースコード

VBA

1Option Explicit 2 3Sub mergecount() 4 Dim filepath As String 5 Dim filename As String 6 Dim rownum As Long 7 filepath = Range("C4").Value & "\" & Range("C5").Value & "\" 8 filename = "BookB.xlsx" 9 Workbooks.Open filepath & filename 10 rownum = Range("A1").CurrentRegion.Rows.Count - 1 11 MsgBox filename & "は" & rownum & "つのデータがあります" 12 ActiveWorkbook.Close 13End Sub

試したこと

ブックBで直接このマクロを実行したところ、
行数は正しくカウントされました。

VBA

1Sub a() 2 Dim i As Long 3 i = Range("a1").CurrentRegion.Rows.Count - 1 4 MsgBox i & "行" 5End Sub 6

ブックB自体の呼び出しには成功しているので、
フォルダパスは間違っていないと思います…

さいごに

VBAはおろかプログラミング自体が初心者なので、何が原因なのか全く見当がついていません。
しかもブックBが開けないのではなく行数のカウントで詰んでいるので非常にもやもやした気分です。
どなたか原因や解決方法等をご教授いただけると幸いです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jinoji

2021/04/12 23:06

ブックBには表のあるシート以外にもシートがあったりしますか?
Usirow

2021/04/12 23:26

rownum = Workbooks("B").Worksheets(1).Range("A1").CurrentRegion.Rows.Count - 1 のようにした場合はどうなるでしょうか?
dondonlondon

2021/04/13 15:13

お二方、コメントありがとうございました。 ブックBのシートは1つだけですので、VB上でワークブックを指定したら上手くいきました!
guest

回答1

0

ベストアンサー

実は、Rangeというオブジェクトは、さらに上位のオブジェクトに所属しています
階層的に考えると

Workbookオブジェクト Worksheetオブジェクト Rangeオブジェクト

という感じになります
そのため、別のシートや別のブックを操作する際には「どのブック、どのシート」のように指定する必要があります
今回の例でいうと、(Usirowさんの言うように)Workbooks(filename).Sheets(1).Range("A1").....というように指定する必要があるかと思われます(シートが複数存在する場合はシートについてもしっかり指定する必要があります)
ブック名、シート名による指定やインデックスによる指定など、いくつかの指定方法がありますので、気になったら調べていただければと思います

投稿2021/04/13 01:14

編集2021/04/13 01:15
Third_Kei

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dondonlondon

2021/04/13 15:16

出来ました! 別ファイルのブックを開く際は、Rangeオブジェクトの上層のオブジェクトを指定する必要があるのですね。勉強になりました。 丁寧な回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問