• ベストアンサー

マクロを利用して別ファイルにデータを書き込むには

見積書の商品を発注したときに、その情報を別ブックで管理したいと思っています。 見積書の発注用シートとは別のシートに管理データを蓄積しながら転記できるマクロは組めたのですが、使い勝手が悪いため全く別のブックに管理データを蓄積したいと思います。 見積書データは保存をするときは、その都度異なるファイル名で保存し、管理データはc:\管理¥集計.xlsで保存します。 途中まで作ってみたのですが、アクティブシートとブックが途中でこんがらがってしまって行き詰っています。 サンプルデータを添付いたしますので、ご教示願えませんでしょうか。 マクロとVBAについては初心者なので大変申し訳ありませんが、よろしくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

マクロを載せているブックに「発注シート」が存在する 「発注シート」のA1,B2,C3セルの内容を,c\管理\集計.xlsのSheet1に転記する sub macro1() workbooks.open("C:\管理\集計.xls") with workbooks("集計.xls").worksheets("Sheet1").range("A65536").end(xlup).offset(1) .value = thisworkbook.worksheets("発注シート").range("A1").value .offset(0, 1).value = thisworkbook.worksheets("発注シート").range("B2").value .offset(0, 2).value = thisworkbook.worksheets("発注シート").range("C3").value end with workbooks("集計.xls").close savechanges:=true end sub >アクティブシートとブックが途中でこんがらがってしまって行き詰っています。 アクティブ何タラやセレクト・セレクションを使ってマクロを書いていると,そうなりがちです。 サンプルを参考に どのブックの.何て言うシートの.どこ番地のセル に何をする という書きぶりに慣れるよう,練習してみてください。

tyoshi_001
質問者

お礼

頂いた回答を元に調整したところ、無事に転記ができるようになりました! マクロの書き方になれるように頑張ります。 ありがとうございました。

その他の回答 (1)

  • mimeu
  • ベストアンサー率49% (39/79)
回答No.2

No.1 さんが書かれたことがすべてなのですが、 実際の方法として私が好んで実践しているのを紹介させてください。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Dim 見積書xls As Workbook, 集計xls As Workbook Dim 販売記録 As Worksheet, 見積Data As Worksheet Dim 販売記録_行 As Long, 見積Data行 As Long Set 見積書xls = ThisWorkbook Set 集計xls = Workbooks.Open ("C:\集計\集計.xls") Set 見積Data = 見積書xls.Worksheets("見積Data") Set 販売記録 = 集計xls.Worksheets("販売記録") 販売記録_行 = ああだこうだ(省略) 見積Data.Range("B21:S30").Copy 販売記録.Cells(販売記録_行, 1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ すこし冗長ですが、こんな風に書けば間違えずコーディングできます。 ポイントは2点 (1) 日本語で意味の分かる変数名、関数名を使う (2) オブジェクト(Worksheetなど)は親の名前もハッキリ書く   VBA初心者はオブジェクトの親子関係がよくわからないものですが   このように書く習慣をつけると、自ずと親子関係が分かり、上達が早いです。 余談ですが、『iRow = 』以下の4行は結果として得られた iRow を 何にも使っていませんね。

tyoshi_001
質問者

お礼

iRow 以下の部分はサンプルデータをいくつか組み合わせていたときに残ってしまったみたいです。 オブジェクト名など、自分でわかりやすく記述することで間違えないようになるんですね。大変勉強になりました。 Worksheetなら ws、Workbookならwbにしなくてはいけないのかな?と間違って覚えていました。 ありがとうございました!