• 締切済み

Excel VBA 特定の文字を含むシートを移動

VBA初心者です。 2つのブック(ブック1、ブック2)があり、ブック2でシート名に”●●支店”という文字を含むシートをすべてブック1にコピーしたいです。 支店名はいろいろあるのでinputboxで検索したいです。 VBAを最近実践し始めたところなので、いろいろ調べたものの全く応用がききません。 どなたか教えて頂ける方、よろしくお願いいたします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

もう処理期限がすんだのだろうが、やってみたので参考に。 シート名は、同じものはエラーになって許されないことを念頭に下記をいた。 ーー このコードの記述は、「シートの移動元のブック」の標準モジュールに Sub test01() MsgBox ThisWorkbook.Sheets.Count Workbooks.Open "XXX.xlsx" ’移動先のブック Set wb2 = Workbooks("XXX.xlsx") '移動先のブックを変数に格納 sn = InputBox("移すシート名") MsgBox sn For Each s In ThisWorkbook.Worksheets 'VBAコードを入れているブックのシートの各々について MsgBox s.Name & "-" & sn If s.Name = sn Then '入力シート名と同じか MsgBox "見つかった" '--見つかった時の処理 '--移動先ブックで同名のシートはないかチェック For Each sh2 In Worksheets If sh2.Name = sn Then MsgBox "同じ名前のシートがあります" Exit Sub '処理中止 End If Next MsgBox "同じ名前のシートはありません" s.Move after:=wb2.Sheets(wb2.Sheets.Count) '主目的のシートの移動実行 wb2.Close Exit Sub End If Next MsgBox "見つかりません" End Sub 実行がうまく行ったらMsgboxの行は削除のこと。一歩ずつ確認用です。 xxxブックに移動するシート名と同じシートは移動先ブックに置かないこと。 テストのつど元の状態(移動したシートは削除しておくこと。) テストで移動したシートは元のブックに戻してテストすること。 移動先でどこにシートを位置づけるのか指定はないが、勉強のこと。 >VBAを最近実践し始めたところなので こんな課題に手を付けるのは早すぎると思う。 コピペしてできても、これだけだと、身に付かない。 質問する前にマクロの記録を調べるとかWEBの関連記事を調べるとか、 質問を自分の困難点にまで絞れるようになること。 なぜ自力でできないのにVBAでやるのか。手動の操作がちゃんと存在するのに。

  • SI299792
  • ベストアンサー率48% (714/1476)
回答No.1

ワイルドカードが使えます。 “●●支店”を検索したい場合、“*支店”と入力してください。 マクロは、Book1 に入れて、そこで実行してください。 ' Option Explicit ' Sub Macro1() '  ブック2でシート名に文字を含むシートをブック1にコピーする   Dim Search As String   Dim Book2Sheet As Worksheet   Dim Count As Integer '  キーワード入力   Search = InputBox("検索文字")   If Search = "" Then     End   End If '  シートの削除   Application.DisplayAlerts = False   Do While Sheets.Count > 1     Sheets(2).Delete   Loop   Application.DisplayAlerts = True '  コピー   For Each Book2Sheet In Workbooks("Book2.xlsx").Worksheets '    キーワードが見つかれば実行     If Book2Sheet.Name Like Search Then       Count = Count + 1 '      シート2以降追加       If Count > 1 Then         Sheets.Add After:=Sheets(Sheets.Count)       End If       Book2Sheet.Cells.Copy Sheets(Count).[A1]       Sheets(Count).Name = Book2Sheet.Name     End If   Next Book2Sheet End Sub

rizuluna221
質問者

お礼

SI299792 さん、ご回答ありがとうございました。 どうしても今日の朝必要だったので自分なりに簡易的に書いてみました↓ Sub シート検索から移動() Dim sh As Worksheet Dim text As String Workbooks.Open Filename:= _ "C:~Book2.xlsx" text = InputBox(Prompt:="シート検索文字列") For Each sh In Worksheets If sh.Name Like "*"& text & "*" Then Application.DisplayAlerts = False sh.Copy Before:=Workbooks("Book1.xlsm").Sheets(3) Application.DisplayAlerts = True End If Next sh End Sub なんとかこれで進みました。 初心者なもので、回答していただいたコードは全部は理解できませんでした。。 もっと勉強しようと思います。お時間割いていただいてありがとうございました。

関連するQ&A

  • EXCEL VBAについて

    EXCEL VBAに詳しい方よろしくお願いいたします ユーザーからフォルダー指定してもらい そのフォルダー内に入っているすべてのブック、すべてのシートの検索、 (シート内にオートシェイプの中に文字を入れたものもアリ。検索対象。) そして、その検索にヒットしたシート名とブック名を別のテキストファイルに吐き出す。 それとは別に検索に引っかかった文字を青に置き換える(EXCELシート内)事は可能でしょうか? 文字の色は変わるのですがオートシェイプ内の色が変えられません。 何時間がんばりましたが、経験不足のためどうもうまくいきません。 どなたか親切な方、お教えいただけたら幸いです。

  • エクセルVBAについて

    <sheet1>フォーマット(コピーするシート) <sheet2>    A列    B列 ○○支店  15 △△支店  10 ××支店  28 ■■支店  25 ◎◎支店  18 sheet1のフォーマットをsheet2のB列の数コピーして、sheet2のA列の支店別に新しいブックへ保存するという作業のマクロを組みたいのですがどのようにしたらよいでしょうか?お教えください。VBAに関しまして初心者で、勉強しているのですがいまいちわかりません。どうぞよろしくお願いします。 今、一つだけコピーして保存するということはできていますが、上記のように全部を自動的にしたいのですが・・・ Sub グラフをコピーして別ブックへ保存() Dim mySheet As Worksheet Set mySheet = ActiveWorkbook.Worksheets("グラフ") mySheet.Copy ActiveWorkbook.SaveAs Filename:="大阪第一" '別名を付けてブックを保存する ActiveWorkbook.Close '別名ブックを閉じる End Sub よろしくお願いします。

  • エクセルVBAをつかってフォルダ内のファイルの特定シートのデータを1つのシートにまとめる

    はじめまして。 過去ログ検索しましたが、載っていないようなので投稿させていただきます。 ブックAがあるフォルダ内にある「○年*.xls」のさらに「○月(○月以外のシートもあり)」のシート内の特定のセル(範囲は固定されてます)の文字列を、全てブックAの1つのシートにまとめたいのですが、VBAにてこれは可能ですか? フォルダ内のファイルが複数だったり、またそのファイル内の該当シートが1つだったり複数だったりで、かなり行き詰ってます。 どなたかご存知の方いらっしゃいましたらご教授願います。 エクセル2000を使用しております。

  • VBAによるブック間のシートの移動またはコピペ

    検索で探すもピッタリ来るものが探せなかったものですみません。 Aブックにシート1とシート2があります。 bブックにシート3があります。 シート2とシート3の名前は同じ"abc"とします。 Aブックのシート1にコマンドボタンを設置し、このボタンをクリックするとシート3をシート2に移動またはコピー&ペーストするようにVBAで実現できますでしょうか? よろしくご教授ください。

  • エクセルVBAでファイル・シート名を指定して、現在のブックのシートにコピーしたい

    エクセルVBA独学中の超初心者です。 VBAを利用して以下のことがしたいのですが、わかりません。 助けて下さい。よろしくお願いいたします。 1. ファイルを選択する。 2. 1で選択したファイルから、シート名を選択する 3. 2で選択したシートを現在のブックのSheet1にコピーする

  • VBAを使って検索したセルを別のシートにコピーする

    こんにちは。 業務でエクセルを使用して差し込み文書を印刷しています。 量が多いのでVBAを使って簡単に作業したいです。 まず、以下のようなシートがあります。 <Sheet1>差込文書 <Sheet2> (A)  (B)    (C)     (D) (E)  (F) 番号|会社名|支店名|役職名|氏名|会社、支店名、役職名、氏名 次のような作業をさせたいです。 1.<sheet2>のA列と同じ番号が<sheet1>の(L1)にあるかどうか検索する。 2.もし、一致するセルがあれば、<sheet2>の該当番号の行のF列を<sheet1>の(B5)にすべて(書式ごと)コピーする。 以上です。 VLOOKUP関数でしましたが、すべてをコピーする事ができなかったので、VBAでコピーしたいです。 F列は、個人名だけの方、支店がない会社などがあるため、バランス良く配置しているセルです。 よろしくお願いします。

  • VBAでのワークシートコピー制御について

    エクセル97でのVBAについてですが AというブックのデータをBというブックにコピーする時にシート名をブックAのA1の文字を使用しているのですが この時にコピーした場合にシート名がいままで使用したことのない文字の場合にはうまくいくのですが、スデに取得しているシート名の場合に実行時エラーが出てしまいます  出来ればスデに取得しているシート名の場合にはそのシートに上書きして、いままで取得していない場合には 新規にシートを新たにつくってそこにデータをコピーできるようなコードがわからなくて困っています だれかたすけて下さい

  • EXCEL VBA ワークシートのコピーについて

    seaclearsky8です。 一つのブックに何枚ものワークシートを追加して保存するVBAについて ご教授、よろしくお願いします。 コピー元  MASTER Book MASTER Workseets コピー先 Copy Book copy Worksheets コピー元にはワークシートがMASTERワークシートの一枚しかありません。 その一枚のワークシートに値をVBAで入れていき処理し コピー先のコピーBOOKにワークシートをコピーしていきたいです。 しかし、MASTERBOOKの処理が何通りかあり、 コピー元の一枚のワークシートに 処理別にデータを写し コピー先BOOKに          ワークシート名 ワークシート1 処理1ワークシート  ワークシート2 処理2ワークシート ワークシート3 処理3コピー元ワークシート3 という具合にワークシートを複数コピーしたいのですが 処理ごとにデータを代入し、コピー処理はできるのですが。 コピー先BOOK ワークシート3 処理3ワークシート だけしかコピーされてないBOOKが作成されます。 上書きされているのだと思われます。 対処法が調べましたが見つけられていません。 すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

  • EXCEL VBA ワークシートのコピーについて

    seaclearsky8です。 一つのブックに何枚ものワークシートを追加して保存するVBAについて ご教授、よろしくお願いします。 コピー元  MASTER Book MASTER Workseets コピー先 Copy Book copy Worksheets コピー元にはワークシートがMASTERワークシートの一枚しかありません。 その一枚のワークシートに値をVBAで入れていき処理し コピー先のコピーBOOKにワークシートをコピーしていきたいです。 しかし、MASTERBOOKの処理が何通りかあり、 コピー元の一枚のワークシートに 処理別にデータを写し コピー先BOOKに          ワークシート名 ワークシート1 処理1ワークシート  ワークシート2 処理2ワークシート ワークシート3 処理3ワークシート という具合にワークシートを複数コピーしたいのですが 処理ごとにデータを代入し、コピー処理はできるのですが。 コピー先BOOK ワークシート3 処理3ワークシート だけしかコピーされてないBOOKが作成されます。 上書きされているのだと思われます。 対処法が調べましたが見つけられていません。 すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

  • excel vba シートがなければコピーしたい

    excel vba で教えてください sheet名0を雛形に、使用者が1 2 3のsheet名でコピーして利用できるようにしたい。1はあるのでコピーを作らない。2はないのでsheet名0をコピーして作るといったように現在sheet2があるや否やで作成するや否やを判断してsheet copyをしたい。 すべてのsheet を名前をしらべつつ判断したいのです 教えてください

専門家に質問してみよう