[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロ ブックの指定方法がおかしい?』(おさる)
マクロ初心者です。
ネットで調べながら作成していますが、ブック名の指定方法がおかしいのか最初の段階からつまずいています。
すみませんが、ご教授頂けますと幸いです。
今開いているのがマクロを動かすファイル(名称はtest.xlsm)です。
sheet1のA1セルには開きたいファイルのパスを書いています。
そのパスに書かれたファイルを開いて色々作業をしたいのですが、うまくいきません。
変数pathに格納したファイルが開く所までは出来たのですが、
Workbooks(path).Sheets("sheet1").Range("B:B,C:C,D:D,F:F").Copy
の部分でインデックスが有効範囲にありません…とエラーが出てしまいます。
アクティブになっていない?とか色々考えたのですが、分かりません。
更に、コピーをしたら、test.xlsmのsheet2に値を貼り付けたいのですが、
その場合もブックを再指定し直すのかも併せて、教えて頂けると助かります。
宜しくお願いいたします。
Sub test()
Dim path As String
path = Worksheets("sheet1").Cells(1, 1)
Workbooks.Open path
Workbooks(path).Sheets("sheet1").Range("B:B,C:C,D:D,F:F").Copy
Workbooks("text.xlsm").Sheets("sheet2").Cells(1, 1).PasteSpecial Paste:=xlPasteValues
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
(γ) 2021/09/19(日) 11:03
Dim wb As Workbook Set wb = Workbooks.Open(Path) wb.Sheets("sheet1").Range("B:B,C:C,D:D,F:F").Copy といった書き方をすることが多いですね。 (γ) 2021/09/19(日) 11:06
分かりやすいご説明、大変ありがとうございます。
フォルダ情報も入っていたので、教えて頂いたコードで出来ました。
すみません、もう一点だけ教えて下さい。
このコードを入れる場所を教えて頂きたいのと、仮に貼り付け先がさらに別のファイルだった際の指定方法は、
下記のような書き方でいいのか教えて下さい。一応動きましたが、一般的な書き方なのかが知りたいです。
Sub test()
Dim path As String Dim wb1 As String Dim wb2 As String
path1 = Worksheets("sheet1").Cells(1, 1)
path2 = Worksheets("sheet1").Cells(2, 1)
Workbooks.Open path1
Set wb1 = Workbooks.Open(path1)
Workbooks.Open path2
Set wb2 = Workbooks.Open(path2)
wb1.Sheets("sheet1").Range("B:B,C:C,D:D,F:F").Copy
wb2.Sheets("sheet2").Cells(1, 1).PasteSpecial Paste:=xlPasteValues
End Sub
(おさる) 2021/09/19(日) 11:27
(γ) 2021/09/19(日) 11:55
Sub test()
Dim path As String Dim wb1 As Workbook Dim wb2 As Workbook path1 = Worksheets("sheet1").Cells(1, 1) path2 = Worksheets("sheet1").Cells(2, 1) Workbooks.Open path1 Set wb1 = Workbooks.Open(path1) Workbooks.Open path2 Set wb2 = Workbooks.Open(path2) wb1.Sheets("sheet1").Range("B:B,C:C,D:D,F:F").Copy wb2.Sheets("sheet2").Cells(1, 1).PasteSpecial Paste:=xlPasteValues End Sub (おさる) 2021/09/19(日) 12:02
二つのブックを開くのでも、 Workbooks.Open path1 Set wb1 = Workbooks.Open(path1) Workbooks.Open path2 Set wb2 = Workbooks.Open(path2) は重複しているという指摘をしています。
Set wb1 = Workbooks.Open(path1) Set wb2 = Workbooks.Open(path2) だけでいいんですよ。
Workbooks.Open path1 Set wb1 = Workbooks.Open(path1) という二つは完全に重複しています。
Set wb1 = Workbooks.Open(path1) と書くことによって、開いたブックを ブックの名前を指定しなくても 変数で指定できます、というのがキモであり、 私の指摘の眼目です。 (γ) 2021/09/19(日) 13:11
(γ) 2021/09/19(日) 13:15
------------------------------------------------- 横からですが何点か。
■1
↓だとそれぞれ、同じファイルを2回開いちゃいます
Workbooks.Open path1 Set wb1 = Workbooks.Open(path1)
Workbooks.Open path2 Set wb2 = Workbooks.Open(path2)
■2
>貼り付け先がさらに別のファイルだった
つまり、全部で以下の3ブックが登場するということであっているのですか?
・マクロを記述するブック ・コピー元のシート(セル)があるブック ・貼付先のシート(セル)があるブック
■3
自分で組んだコードの検証はもちろんのこと、ネットで見つけたコードや質問掲示板で提示されたコードを研究するには【ステップ実行】という方法を使うと、コードを1行ずつ実行でき大変便利です。
聞いたことがない言葉であれば↓を読んでみてください。
【ステップ実行】 https://www.239-programing.com/excel-vba/basic/basic023.html http://plus1excel.web.fc2.com/learning/l301/t405.html
また、以下も知っておいて損は無いと思います。
【イミディエイトウィンドウ】 https://www.239-programing.com/excel-vba/basic/basic024.html https://excel-ubara.com/excelvba1/EXCELVBA486.html
【ローカルウィンドウ】 https://excel-ubara.com/excelvba4/EXCEL266.html http://excelvba.pc-users.net/fol8/8_2.html
【ブレークポイント】 https://www.239-programing.com/excel-vba/basic/basic022.html https://www.tipsfound.com/vba/01010
また、実行上の問題は生じませんが【インデント(字下げ)】を使うとコードの構造が把握しやすくなり、ご自身のデバッグ作業に貢献するとおもいますので、こだわりがなければインデントを付けるようにされるとよいでしょう。
https://kabu-macro.com/detail.php?dir=word&dir2=sa-so&uri=zisage
http://club-vba.tokyo/vba-indent/
■4
提示されたコードだとおかしなところがあります。
Dim path As String path1 = Worksheets("sheet1").Cells(1, 1) path2 = Worksheets("sheet1").Cells(2, 1)
↑の部分をよく見てみましょう。
【path】と【path1】ないし【path2】はそれぞれ別物です。
こういったつまらないミスは、変数の宣言を強制しておくと防ぐことができます。
【変数の宣言】 http://officetanaka.net/excel/vba/beginner/06.htm
■5
ということを踏まえると、↓のように整理することも可能だとおもいます、
Option Explicit Sub さんぷる() Dim wb1 As Workbook Dim wb2 As Workbook
Stop 'ブレークポイントの代わり
With ThisWorkbook.Worksheets("sheet1") Set wb1 = Workbooks.Open(.Range("A1").Value) Set wb2 = Workbooks.Open(.Range("A2").Value) End With
wb1.Sheets("sheet1").Range("B:D,F:F").Copy wb2.Sheets("sheet2").Range("A1").PasteSpecial Paste:=xlPasteValues End Sub
(もこな2 ) 2021/09/19(日) 13:22
とても今後の参考になるご投稿、感謝いたします。
まだまだ勉強したてで独学でどこから手をつけたら良いのやら状態ですが、
イミディエイトウィンドウ、ローカルウィンドウは知らなかったので今後勉強してみます。
また、コードの整理もありがとうございます。
色々やって、動かない…と今朝から試行錯誤中で訳が分からなくなっていました。
一度、落ち着いて基礎を勉強してみたいと思います。
γ様、もこな2様のご丁寧な対応、ほんとありがとうございます。
(おさる) 2021/09/19(日) 13:29
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.