excel vba についての質問です。
請求書と営業売上のそれぞれ違うbookがあるのですが、請求書に入力した値を営業売上管理のbookの売上シートと連動させています。
当たり前ですが、bookの名前が変わると今までに作ったマクロが動作しなくなります。それに対応できるソースがあれば教えて頂きたいです。簡単なbookとシート間の説明です。
workbook("請求書").worksheet("請求書")
workbook("営業売上管理").worksheet("売上")
と二つのbookがあります。
bookの名前が二つともかわっても対応できるようなマクロがあれば教えていただきたいです。
宜しくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
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
--------------------------------------------------------------
No.3
- 回答日時:
できないことはないと思います。
一般的にも不可能とは思いませんが、無理してそうするメリットがあるかどうかの問題でしょう。
対象のBOOKの特定のセルにユニークな名前をつけておいて、その名前でBOOKを特定すればいいでしょう。
制限はそのセルを変更されないようにすること。PCの全部のフォルダを検索するのは時間がかかるので、この作業をするフォルダはいくつかに限定すること。コピーした場合は候補を挙げて処理するBOOKを選ばせるか、一方の特定セルを変更するか、検索対象外のフォルダに移動させるか。
SheetのあるBOOKも同様ですが、BOOKを保護してSheet構成を変えないようにするか、BOOK検索と同様に特定セルのユニークな名前で検索させればいいでしょう。、
book自体は二つしかないので、検索するのはとても簡単なのですが、
営業ごとにファイルを分ける必要があり、そこでどうしてもbookの名前を変更しなくてはなりません。
なかなか複雑なシート管理なので困ってます。
ご回答ありがとう御座いました。
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
これを組み合わせれば、可能ですね。
No.1
- 回答日時:
はっきり言って無理ですね。
1)2つのブックが同じフォルダもしくは、固定のフォルダにあると仮定した場合
そのフォルダ内のすべてのブックを検索して、請求書シートを見つけなければなりません。
ブック名を変更した場合は、それで対応できますが、請求書ブックをコピーして、コピー
先を正とするような場合、旧ブックが残ったままですので、対応できません。
また、請求書シートが全く異なるブックに存在する場合も対応できません。
2)請求書ブックを任意のフォルダに移動した場合
どこを、どう探すのですか??
この回答への補足
bookをコピーせずにbookの名前だけを変更し、そのbookを使っていく場合、フォルダの中の売上シートを検索して該当するbookを開く事は可能でしょうか?
そうすれば解決しそうな気もするんですが・・・
請求書シートは値を入力する際に、必ず開かなければいけないので
なんとかマクロに記述できましたが・・
どうでしょうか??
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル VBAでBook モジュールのプロシージァ(コード)に除外シートを設定したい 1 2023/01/11 15:53
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) エクセルで保存時に全部のシートの最終行をコピーして数値で貼り付けたい 3 2023/08/14 15:49
- Visual Basic(VBA) 印刷をVBAでしたい とあるフォルダに1〜5までの名前がついたbookが保存されてます このbook 2 2022/03/28 09:30
- 消費税 インボイス制度 2 2022/11/19 14:44
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) Excel VBA マクロ 先頭行の固定とオートフィルター設定を全てのシートに適用したいです 1 2022/11/12 15:32
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) エクセルのイベントVBAを複数のシートで動かしたい 1 2022/12/07 16:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
【ExcelVBA】zip圧縮されたCSV...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ワイルドカード「*」を使うとう...
-
【困っています2】VBA 追加処...
-
VBA シート名が一致した場合の...
-
EXCEL VBA 単語置き換え につい...
-
ExcelのVBAです。フォルダ内の...
-
エクセル VBA 他シートの行を選...
-
エクセルVBAで書式と値の貼付け...
-
VBA 別ブックからコピペしたい...
-
VBS Bookを閉じるコード
-
マクロで最終行を取得したい
-
【前回の続き続きです、ご教示...
-
クリップボードに貼付している...
-
Excel-VBAでのファイルの開き方
-
VBAで別ブックのシートを指定し...
-
【マクロ】違うフォルダにある...
-
VBSでExcelのオープン確認
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
別ブックをダイアログボックス...
-
ワイルドカード「*」を使うとう...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
VBS Bookを閉じるコード
-
【ExcelVBA】インデックスが有...
-
VBA コードを実行すると画面が...
-
【ExcelVBA】zip圧縮されたCSV...
-
vbaでvbaProjectのパスワード解...
-
VBAで別ブックのシートを指定し...
-
ExcelのVBAです。フォルダ内の...
-
vbaで他のブックに転記したい。...
-
フォルダ内の全てのファイルに...
-
VBAで複数のブックを開かずに処...
-
VBSでExcelのオープン確認
-
VBA 実行時エラー 2147024893
-
【Excel VBA】書き込み先ブック...
-
VBA シート名が一致した場合の...
おすすめ情報