• 締切済み

excel vba についての質問です。book名を変更したときのマクロ

excel vba についての質問です。 請求書と営業売上のそれぞれ違うbookがあるのですが、請求書に入力した値を営業売上管理のbookの売上シートと連動させています。 当たり前ですが、bookの名前が変わると今までに作ったマクロが動作しなくなります。それに対応できるソースがあれば教えて頂きたいです。簡単なbookとシート間の説明です。 workbook("請求書").worksheet("請求書") workbook("営業売上管理").worksheet("売上") と二つのbookがあります。 bookの名前が二つともかわっても対応できるようなマクロがあれば教えていただきたいです。 宜しくお願いします。

みんなの回答

  • x415f484f
  • ベストアンサー率71% (57/80)
回答No.4

まだ締め切られておられないようなので、ご質問やお答えになられている 方々のお話を参考にさせていただきこんなコードを書いてみました。 1. ブックは二つしか使わないから全て開くことは可能 2. ユニークな文字列でシートを判定 マクロがどちらのファイルに入るのかは不明ですが、どちらに入れても 動作すると思います。 動作確認はブックを二つ用意して、シート名に「売上」や「請求」を 入れておいて一度保存しておいたものを二つとも開きます。 標準モジュールを作成してコードを記述します。 お使いの環境の記述がないようなので使えるかどうかはわかりませんが、 ご参考になれば…… ※ 注意: 見易さの為に全角文字でインデントしてあります。 -------------------------------------------------------------- Sub SearchSheetInBook() Rem 識別用の文字列 Const Bill_key = "請求" Const Salse_Key = "売上" Rem ブックとシートの名前用変数 Dim Sales_Book As String Dim Sales_Sheet As String Dim Bill_Book As String Dim Bill_Sheet As String Dim wb As Workbook Dim ws As Worksheet Rem ブックが揃ってない場合の処理 If Workbooks.Count <> 2 Then  MsgBox "もうひとつファイルを開いてください"  Exit Sub End If Rem ブックから目的のデータのあるシートを探し変数に格納 For Each wb In Workbooks  For Each ws In wb.Worksheets   If InStr(ws.Name, Bill_key) > 0 Then    Bill_Book = wb.Name    Bill_Sheet = ws.Name    Exit For   Else    If InStr(ws.Name, Salse_Key) > 0 Then     Sales_Book = wb.Name     Sales_Sheet = ws.Name    End If    Exit For   End If  Next ws Next wb Rem 取り敢えず検証のためのコード MsgBox "請求: " & Bill_Sheet & " in " & Bill_Book & vbCrLf & _   "売上: " & Sales_Sheet & " in " & Sales_Book Rem シート名は変数に置き換える Rem 既存の WorkBooks("請求書").WorkSheet("請求書") から Rem WorkBooks(Bill_Book).WorkSheets(Bill_Sheet) に Rem 既存の WorkBooks("営業売上管理").WorkSheet("売上") から Rem WorkBooks(Sales_Book).WorkSheets(Sales_Sheet) に End Sub --------------------------------------------------------------

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

できないことはないと思います。 一般的にも不可能とは思いませんが、無理してそうするメリットがあるかどうかの問題でしょう。 対象のBOOKの特定のセルにユニークな名前をつけておいて、その名前でBOOKを特定すればいいでしょう。 制限はそのセルを変更されないようにすること。PCの全部のフォルダを検索するのは時間がかかるので、この作業をするフォルダはいくつかに限定すること。コピーした場合は候補を挙げて処理するBOOKを選ばせるか、一方の特定セルを変更するか、検索対象外のフォルダに移動させるか。 SheetのあるBOOKも同様ですが、BOOKを保護してSheet構成を変えないようにするか、BOOK検索と同様に特定セルのユニークな名前で検索させればいいでしょう。、

moni825
質問者

お礼

book自体は二つしかないので、検索するのはとても簡単なのですが、 営業ごとにファイルを分ける必要があり、そこでどうしてもbookの名前を変更しなくてはなりません。 なかなか複雑なシート管理なので困ってます。 ご回答ありがとう御座いました。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.2

そのものずばりのマクロではないですが、 1)ブック検索 Sub Sample20() Dim buf As String, i As Long buf = Dir("C:\\text_pdf\*.xls") Do While buf <> "" i = i + 1 MsgBox (buf) buf = Dir() Loop End Sub 2)シート検索 sck = 0 For Each sheet_name In Worksheets If sheet_name.Name = ("売上") Then sck = 1 Exit For End If Next これを組み合わせれば、可能ですね。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

はっきり言って無理ですね。 1)2つのブックが同じフォルダもしくは、固定のフォルダにあると仮定した場合 そのフォルダ内のすべてのブックを検索して、請求書シートを見つけなければなりません。 ブック名を変更した場合は、それで対応できますが、請求書ブックをコピーして、コピー 先を正とするような場合、旧ブックが残ったままですので、対応できません。 また、請求書シートが全く異なるブックに存在する場合も対応できません。 2)請求書ブックを任意のフォルダに移動した場合 どこを、どう探すのですか??

moni825
質問者

補足

bookをコピーせずにbookの名前だけを変更し、そのbookを使っていく場合、フォルダの中の売上シートを検索して該当するbookを開く事は可能でしょうか? そうすれば解決しそうな気もするんですが・・・ 請求書シートは値を入力する際に、必ず開かなければいけないので なんとかマクロに記述できましたが・・ どうでしょうか??

関連するQ&A

  • エクセル2010VBA での質問です。

    VBAはやったことないので全く初心者です。 町内の諸費用をエクセルで管理しています。 年度が変わる度、当番も変わってデータを引き継いで管理するのですが、最初に連続印刷のVBAを作ってくれた人がもういないので、今まで、前年度のものをコピーし、中のデータを書き換えて使っていたようなのですが・・・ どのような設定がされているか把握するために質問させて頂きます。 エクセルを開き、マクロで作ってある印刷ボタン?を押すと、Sheet1にあるデータベース約100人分 (B列に100人分の名前・2行目にいくつかの項目・各項目の下に金額)が別のSheetにある個人請求書に連続印刷されるというものですが、添付していますVBAの内容を把握したい事が一つ目です。 年度が変わるごとにそのシートをコピーして中のデータを書き換えて使っているのですが、問題は有りますでしょうか?(二つ目です) 添付しております、ファイルのVBAを自分はわからないのですが、このBOOKを開いた時に ”このブックには、ほかのデータソースへのリンクが含まれています。 ・リンクを更新するとエクセルは最新のデータを取り込もうとします。 ・リンクを更新しないと、以前の情報が使用されます。 注意:データリンクは許可なく機密情報にアクセスして共有するのに使用される可能性があります。また、その他の問題を起こす可能性のある操作に使用される場合があります。このブックの作成元が信頼できない場合にはリンクを更新しないでください。   更新する・更新しない・ヘルプ ” というメッセージが出てきますが、このBOOKが入っているフォルダ以外のデータも参照されているのでしょうか?(三つ目) 情報が少なくて済みません。 宜しくお願い致します。

  • EXCEL  VBA シートコピー、名前変更他

    EXCEL  VBA (1)シートコピー、名前変更 (2)他の固定のbookへ転送をVBAで記述 book1のsheet1を開き、そのsheetをコピーしたものをABCというsheet名に替え、 それをbook2のsheetの後ろへ移動するというマクロをPersonalに作ろうとしていますが、 インデックスエラーとか【アプリケーション定義または、オブジェクト定義のエラー】とかインデックスエラーとか になります。 book1のsheet1とかは、マクロを使う場合は、固定的な名前でなくいろいろそのときどきでかわる名前ですが、 マクロを使って、そのsheetをコピーしたものをABCとしてbook2のsheetの後ろへ移動したいということです。 よろしくお願いします。

  • excel vba 選択されたセルの範囲を別のセル

    excel vba 選択されたセルの範囲を別のセルに書き込みたい。 お世話になっております。 乱筆乱文お許し下さい。 EXCEL VBAについてですが、或るブックを閉じる時(Private Sub Workbook_BeforeClose(Cancel As Boolean))にその時点でACTIVEなsheetの名前を指定シートの指定セルに書き込み、そのブックを開く時(Private Sub Workbook_Open())に指定シートの指定セルの値の名前sheetをACTIVEにすることは出来たのですが、もう一歩進んで、 ブックを閉じる時(Private Sub Workbook_BeforeClose(Cancel As Boolean))にその時点でselectされているcellの範囲(単一セル・複数セル共に、名前がついていたら名前、ついていなければrangeを表す文字列)を指定シートの指定セルに書き込み、そのブックを開く時(Private Sub Workbook_Open())に指定シートの指定セルの値の名前cell範囲をselectするようなことがやりたいのですが、私の検索の仕方が下手で、なかなか出てきません。どなたかご教示下さい。よろしくお願いします。

  • エクセルのマクロでシートのコピー

    いつもお世話になっております。 エクセル2000で次のことをマクロで行いたいのです。 いくつかWorkbookが開いている状態で、シートのコピーを行うのですが、シート名やブック名はその都度違います。 具体的には、Workbook"A" に "a"、"b"、"c" の3つのシート、Workbook"B" に "f"、"g"、"h"の3つのシートがあり、 Workbook"A" の Sheet("a") を Workbook"B" の Sheet("h") の前にコピーしたいのです。 Sheets(1).Copy before:=Workbooks("B.xls").Sheets(3) ところがWorkbookの名前がその都度変わるので困っています。 ブック間の移動は ActiveWindow.ActivateNext などで行っていますがシートのコピーがどうしても分からないので お願いします。  

  • 【VBA】マクロについて

    【VBA】マクロについて質問です。 マクロで複数のシートの特定のセル(A5(日付)、A7(社名)、B3(担当者)など)を別ブックのひとつのシートにまとめて、 日付 社名 担当者 シート1 A5 A7 B3 シート2 A5 A7 B3 シート3 A5 A7 B3 のように下へ下へ積み上げていくにはどうゆうマクロを組めばいいでしょうか。 同じ作業を複数のファイルで行わなければいけないため、マクロを組みたいのですが、よくわかりません>< ファイルによってシートの数が違うので、それにも対応すると有難いです。 どうぞよろしくお願いいたします。

  • エクセルのマクロを使ってシートごとに名前をつけて保存したい

    マクロ初心者です。宜しくお願いします。 1つのブックにシートが複数あります。 それぞれシートをコピーして新しいブックを作成し そのブックに名前をつけて保存したいです。 例えばブック名が「売上管理」でそのシートが「A店」「B店」「C店」と3シートあるとします。 シート名:A店を他のブックにコピーしてマイドキュメントに名前を付けて 保存する場合のマクロを教えてください。 ちなみにその際のブック名は「シート名+任意のセル(D2)」と できれば一番助かります。 ちなみにD2のセルにはToday関数が入ってます。

  • 【緊急】EXCEL VBAの『THIS WORKBOOK』について質問

    【緊急】EXCEL VBAの『THIS WORKBOOK』について質問があります. 現在,シート数100枚程度にマクロをかけようとしています. これらにマクロをかける際に『THIS WORKBOOK』でマクロを作成し,全体にかけているのですが 二枚程度は表紙のニュアンスでシートを作成したもので,マクロをかけたくありません. このような場合,どのようにマクロをかければよいのでしょうか. 私のイメージでは 『シート1と2以外であればマクロを実行する.』なのですが なかなかそれらしいサンプルプログラムが発見できずに悩んでいます. 『THIS WORKBOOK』ではできないのですかね・・・・.

  • エクセルVBAで質問です

    あるブックのシートに入力するようにしています。そこには関数や、 リストなどさまざまな設定がされています。そのブックにコードを書いてマクロ実行ボタンもそのシートに付けたいと思っています。 このシートをデスクトップにコピーして別ブックとして作成したいのですが、コードを教えていただけないでしょうか。できるかわかりませんが、関数が設定されてある箇所は関数としてではなく、値としてコピーされると都合がいいです。 また、作成されたブック(コピーしたシート)には、マクロのボタンなんかが残らない形ではできないものでしょうか?

  • Excelマクロ&VBAでの質問

    全くの初心者です。「技術評論社 かんたんExcelマクロ&VBA(2013/2010/2007/2003対応)」で独習しています。その中に「Section55 ブックの参照」という項目の初めに(1)ブックを参照する●ブックを切り替えるという項目がありまして、そのコードは以下の様に簡単なものです。 Sub ブックの切り替え() Workbooks("練習ブック1").Activate End Sub これを実行すると、複数のExcelファイルの中の"練習ブック1"がアクティブなるというものです。ここで躓き、技術評論社に質問した所、「練習ブック1 という名前でExcelファイルを新規作成し、それを開いた状態でマクロを実行してください。」との回答で、私なりに色々と試してみましたが、実行結果は何れも「実行時エラー '9': インデックスが有効範囲に有りません」とのエラーで困っています、どの様にすれば実行出来るのか(特に"開いた状態"とはどの様な状態なのか?、拡張子は関係するのか?)、何方か具体的に初心者に解りやすく手順をご教授頂ければ幸いです。

  • エクセル マクロでシート名変更

    Excelで、作成してあるフォーマットに新しく数値をコピーして完成した表を別のブックに移動して保存しようと考えています。その際、シートのA1セルの値を自動的にワークシート名に持ってきたいのですが、やり方が分からず困っています。 シート名のところ以外は、なんとなくマクロの記録を使ってできそうなのですが、A1セルの値を自動的にシート名にすることができずに引っかかっています。 いい方法があれば教えてください。 よろしくお願いいたします。