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

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

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

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

Q&A

解決済

1回答

2596閲覧

VBAでセルを参照してウィンドウをアクティブにする

vbabeginner

総合スコア13

VBA

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

0グッド

1クリップ

投稿2018/12/12 02:29

編集2018/12/12 04:29

VBAの質問です。

マクロを関東支部管理表.xlsmファイルに組み込み、そこの中の「設定」シートに、各支部の売り上げ報告を追記していくマクロを考えています。
完成後、関東のみでなく、東海、関西、中国と全国で利用できるようにするため、パラメーターを変更できるよう、マクロがわからない社員でも操作できるようしたいと思い、設定シートに読み込みしたいファイル名を手動で入れるようにしたい。と考えました。
(本部で統括管理する必要がないので、各支部で応用できるようにこのような様式にしようと考えています)

そこで、関東支部管理表.xlsmファイルに、「売上」「在庫管理」などの各種の管理項目を盛り込んだうえで、「設定」シートを別途設け、そこにパラメーターを入れ、マクロ実行時にそのセルの内容を引き込みたいと考えました。

設定シートの中はこのような内容です。

A1セル:本店.xlsb
A2セル:駅前店.xlsb
A3セル:中央店.xlsb

C1セル:関東支部管理表.xlsm

と入れました。各支部で誰でも変更できるように、店舗名や管理表自体の名前を、ここで指定することを想定しています。

関東支部管理表.xlsmを開いてマクロを実行すると、「設定」シートのA1セルに記載のデータ(本店.xlsb)を開いて、決まった範囲をコピーします。その後、C1セルのウィンドウ(関東支部管理表.xlsm)をアクティブにし、データを貼り付け、またA1のブック(本店.xlsb)をアクティブにして、クリップボードの内容を空にしたうえでA1(本店.xlsb)のブックを閉じたいと考えています。
繰り返しで、A2、A3の支店数を繰り返して読み込んでいくことを想定しています。

A1のセルのファイルを開くところまではできましたが、C1に入力されたファイルのウィンドウをアクティブに戻す方法がわかりませんでした。

Dim po As String
po = Range("A1").Value
Windows.("po".value)Activate

ファイルはこのような内容で開けましたが、ウィンドウをアクティブにするにはどうすればよろしいでしょうか。

もともとは、

Windows("駅前店.xlsb").Activate

というようなスタイルでアクティブにしていましたが、("駅前店.xlsb")の内容を、Excelの設定シートに入力した値から取得したいのです。

ファイルを開くのは

Dim pa As String pa = Range("A1").Value Workbooks.Open Filename:=pa

で、A1セルに記載のフルパス、もしくは

ChDrive ThisWorkbook.Path
ChDir ThisWorkbook.Path

を指定することでファイル名のみで、同一ディレクトリからの参照が出来ました。

アクティブにするウィンドウをセルから参照するにはどうすればいいか、ご教授願います。

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

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

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

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

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

hatena19

2018/12/12 03:09

質問内の Test.xlsbファイルと Test.xlsmファイルは別物ですか。それとも記述ミスですか。
hatena19

2018/12/12 03:10

とりあえず、ワークブックをアクティブにするコードは、Workbooks("Book1.xlsm").Activate です。
vbabeginner

2018/12/12 03:15

回答ありがとうございます。 ごめんなさい、誤記でした。両方ともTest.xlsmが正しいものです。 A2セルに記載の名前のファイルを先に開いており、そのウィンドウをアクティブにしたいのです。 名前をセルにあるものにしたいのは、ここを可変式にしたいからです。 わかりにくくて申し訳ないです。
hatena19

2018/12/12 03:55

まだ、あいまいですね。 Test.xlsmブックのAAAシートに、 A1セル:呼び出したいファイル名.xlsb A2セル:Test.xlsm と入力されているのですか。 つまり、A2セルには自分自身の名前が入力されているということですか。 マクロはどのブックにあるのですか。 Test.xlsm ですか、それとも別ブックですか。 上記の点が明確にわかるように質問を編集してもらえますか。 また、コードも、変数宣言部分、ブックを開く部分も含めて提示してください。
vbabeginner

2018/12/12 04:31

色々と変更してみました。こちらであいまい箇所は修正されましたでしょうか? よろしくお願いいたします。
guest

回答1

0

ベストアンサー

整理すると下記のようになると推測しましたがあってますか。

関東支部管理表.xlsm にマクロがあり、
それを実行することで、
各支部のファイル(本店.xlsb、駅前店.xlsb、・・・)を開いてデータをクリップボードにコピーして、
関東支部管理表.xlsmをアクティブにして貼り付ける。

この、関東支部管理表.xlsmをアクティブにする方法が分からない。

このファイル自体は別のところでも使うのでファイル名が異なる場合がある。
各支部のファイル名、自分自身のファイル名を設定シートに記入して、それを参照する。

ということですね。

まず、データを転記するのに、転記先をアクティブにする必要はありません。
また、クリップボードを経由する必要はありません。
Copyメソッドの引数に、転記先のブックを指定するだけです。
あと、自分自身のブック(実行中のマクロのあるブック)は ThisWorkbook で参照できます。

上記のことを利用すれば、
例えば、本店.xlsb の A1:B5範囲を自分自身の A1:B5範囲に転記したいなら、
下記の1行ですみます。

vba

1Workbooks("本店.xlsb").WorkSheets("データシート").Range("A1:B5").Copy _ ThisWorkbook.WorkSheets("転記シート").Range("A1:B5")

値だけでいいなら、下記のようにも記述できます。(こちらの方が高速です。)

vba

1ThisWorkbook.WorkSheets("転記シート").Range("A1:B5").Value = _ 2Worksheets("本店.xlsb").WorkSheets("データシート").Range("A1:B5").Value

Office TANAKA - Excel VBA講座:セルの操作[セルのコピー]

アクティブにブックやシートに対して操作するということを前提にすると、
ブックやシートのアクティブを切り替えるコードが必要になり、処理が重くなるし、コードが読みにくくなりバグの原因になります。

対象とするブックやシート、レンジを変数にいれておいて、それに対して処理をするというコードにするとシンプルかつ高速かつバグが発生しにくいコードになります。

コード例を出しておきます。

Dim rng支店 As Range '支店名のセル Set rng支店 = ThisWorkbook.WorkSheet("設定シート").Range("A1") Dim rng転記先 As Range '転記先範囲 Set rng転記先 = ThisWorkbook.WorkSheet("転記シート").Range("A1:B5") Dim wb支店 As Workbook '支店ブック Do Until rng支店.Value = "" Set wb支店 = Workbooks.Open(ThisWorkbook.Path & "\" & rng支店.Value) rng転記先.Value = wb支店.WorkSheets("データシート").Range("A1:B5").Value wb支店.Close savechanges:=False Set rng転記先 = rng転記先.Offset(rng転記先.Rows.Count) '転記先範囲を移動 Set rng支店 = rng支店.Offset(1) '次行のセルに移動 Loop

どうでしょうか。
何に対して何をしているかシンプルで分かりやすいとおもいませんか。
不必要なActivateやSelectがないので処理を高速です。

仕様が分からないので転記元範囲、転記先範囲は適当です、またエディター直書きですので間違いがあるかもしれません。書き方の参考にしてください。

投稿2018/12/12 06:06

編集2018/12/12 06:39
hatena19

総合スコア33620

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

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

vbabeginner

2018/12/12 06:42

ありがとうございます! とても分かりやすく回答頂きありがとうございました! コードには、私の知らないものが多数含まれておりましたが、非常に参考になります。 参考にして完成させてみたいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問