- ベストアンサー
Excelで必要のないシートを削除する方法
- 毎日送られてくる発注ファイルを元に、部品ファイルから必要のないシートを削除する方法について教えてください。
- 部品ファイルには100種類以上のシートがあり、発注ファイルの品名を見て必要なシートだけ残したいです。
- 部品ファイルの所の数量には=VLOOKUP関数が使われており、すぐに統合できますが、シートを手動で削除するのは時間がかかります。効率的な方法があれば教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.2です! たびたびごめんなさい。 前回のコードの For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row Str = Str & wS.Cells(i, "A") & "," buf = Left(Str, Len(Str) - 1) myArray = Split(buf, ",") Next i の5行を For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row Str = Str & wS.Cells(i, "A") & "," Next i buf = Left(Str, Len(Str) - 1) myArray = Split(buf, ",") のように5行目を3行目に入れ替えてください。 前回のコードでも動くと思いますが、 厳密にいえば後者のコードが正解です。 何度も失礼しました。m(_ _)m
その他の回答 (2)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! Sheetそのものが削除されますが、それでも良いのですよね? VBAになってしまいますが、一例です。 前提条件として (1)●発注ファイル は 【発注】(前後の【 】は不要です) というSheet名にして 100Sheet以上ある「部品ファイル」に追加しておいてください。 (最初でも最後でもどこでも構いません) (2)発注 SheetのA列に残したいSheet名の部品が羅列してあり、2行目以降にデータがあるとします。 「部品ファイル」を開き → Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に ↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sheet削除() 'この行から Dim i As Long, k As Long, str As String, buf As String Dim wS As Worksheet, myFlg As Boolean, myArray Set wS = Worksheets("発注") '←必ず「発注」というSheetを追加! For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row str = str & wS.Cells(i, "A") & "," buf = Left(str, Len(str) - 1) myArray = Split(buf, ",") Next i Application.DisplayAlerts = False For i = Worksheets.Count To 1 Step -1 myFlg = False For k = 0 To UBound(myArray) If Worksheets(i).Name = myArray(k) Then myFlg = True Exit For End If Next k If Worksheets(i).Name <> "発注" Then If myFlg = False Then Worksheets(i).Delete End If End If Next i Application.DisplayAlerts = True End Sub 'この行まで ※ 一旦マクロを実行すると元に戻せませんので、 別ファイルでマクロを試してみてください。 (例)ファイルが保存してあるフォルダ内(ドキュメント等)内で同じExcelファイルをコピー&ペーストし それを利用するなど・・・m(_ _)m
- yosifuji20
- ベストアンサー率43% (2675/6115)
マクロを使えば可能です。 考え方としては、削除したい名前が入っているセルを読んで、その名前に等しいsheetを削除するということを自動的に実行するということです。 ただし、常に同じsheet名を削除するのはマクロでも簡単ですが、その都度異なるsheet名を読み取って削除するというのはかなり慣れた人でないと難しいと思います。 どなたかEXCELのマクロ言語VBAに詳しい人に相談される方がよいと思います。 一番簡単なのは、ランクル・カローラ・セルシオ・ヴィッツ・プリウス ・プラド・ノア・ハイエースの現実のsheetを削除するマクロを記録して、それにそれぞれランクル・カローラ・セルシオ・ヴィッツ・プリウス ・プラド・ノア・ハイエースというマクロ名を付けることです。 必要なsheet名に相当するマクロを実行すればそのsheetだけ削除することができます。 これはマクロの記録で作ることができます。
お礼
ありがとございます。 マクロの勉強を頑張っていきたいと思います。 とても参考にさせていただきました。 ありがとうございました。
お礼
本当にありがとうございます。 助かります。マクロを実行したことがないのですが、すごく勉強になりました。 プログラムコードをここまで書いて頂き感謝いたします。 プロシージャーの外では無効です。とエラーが出てしまうのですが、もう少しの所だと思います。 このコードを参考に解決していきたいです。 ありがとうございました。