ここから本文です

VBAで、デスクトップにあるAのフォルダにある、B.xlsmのthisworkbook を 現在開い...

アバター

ID非公開さん

2017/4/1620:47:39

VBAで、デスクトップにあるAのフォルダにある、B.xlsmのthisworkbook を
現在開いてるエクセルのファイルにVBAで書き込みたいと考えいますが、全くできません。

これは、簡単に出来ない事なのでしょうか?

ご回答お願いします。

閲覧数:
35
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

lin********さん

2017/4/1621:10:27

たとえば、今開いているファイルが「A.xlsm」だとします。

当然、マクロを実行しているのは、この「A.xlsm」です。

「B.xlsm」は、今、開いていませんから、「ThisWorkbook」ではありません。

「ThisWorkbook」は、今現在、マクロを実行しているファイル(「A.xlsm」)のことです。

私なら

Set b = Workbooks.Open("~\B.xlsm") '「~」は質問者のデスクトップの場所
For s = 1 to b.Worksheets.Count
Set sb = b.Worksheets(s)
ThisWorkbook.Worksheets(1).Range(r, c).Value = sb.Range(r, c).Value
Next s

まず、まだ開いていない「B.xlsm」を開き、「b」とします。

これで、いちいち「Workbooks("B.xlsm")」などと書かなくても、「b.」と書けば、「Workbooks("B.xlsm")」のことです。

「B.xlsm」のすべてのシートを処理するとすると

For s = 1 to b.Worksheets.Count

1番左端のシートから、「b.」が付いているので「Workbooks("B.xlsm")」ブックが持っているワークシートの数(「Worksheets.Count」)まで1シートずつ処理。

Set sb = b.Worksheets(s)

「s」番目のシートを「sb」にセット。

これで、いちいち、「b.Worksheets(s).Range(r, c).Value」などと書かなくても、「sb.Range(r, c).Value」と核だけで、前の分を書いたことになります。

「ThisWorkbook」が、今現在、マクロを実行しているファイル(上記の例でいう「A.xlsm」)の、一番左端のシートのセル「rc」に、「B.xlsm」の「s」番目のシートのセル「rc」の値を書き込む。

となるわけです。

お勉強、がんばってください。

ベストアンサー以外の回答

1〜1件/1件中

yok********さん

2017/4/1620:56:28

thisworkbook の何をですか?

現在開いてるブックにもthisworkbookはありますよね。
ブック全体を示すものですから。

たとえば車で考えましょう、タイヤやミラー、ガラスなどは
とりかえて付けられますけど、全体を変えたらもう車
変わっちゃってますよね。

thisworkbookを開いているブックに書き込むとしたら
開いているのは閉じて、その名前でB.xlsmというブックを
コピーすると同等ということだと思います。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる