【完全保存版】Excelマクロを完全削除してxlsxで配布する方法。ボタン1発で無害化

エクセル

ExcelでVBAマクロを使って業務効率化していると、「配布用にマクロを消したい」という場面が必ず出てきませんか?

  • 取引先に渡すとき
  • 社内セキュリティチェック対策
  • ブログや無料配布用ファイル
  • 「マクロ入りは禁止」と言われたとき

このページでは、ボタン1発で

■マクロ削除
■ボタン削除
■xlsm → xlsx 変換

をすべて自動で行う方法を、コピペOKのVBAコード付きで解説します。


なぜマクロを消す必要があるのか?

Excelマクロは便利ですが、配布時には以下のようなリスクがあります。

  • セキュリティ警告が表示される
  • マクロウイルスを疑われる
  • 社外・取引先で開けない

そのため、配布時は「マクロなし(xlsx)」が鉄板です。


よくある失敗パターン

❌ マクロを消し忘れて配布
❌ ボタンだけ残っていてクリックするとエラー
❌ 元のxlsmを上書きしてしまう

このページの方法なら、これらをすべて回避できます。


実現できること

このVBAを使うと、次の処理を自動で行います。

  1. 元のxlsmをコピー
  2. マクロを完全削除
  3. ボタン(フォーム/ActiveX/図形)を削除
  4. xlsx形式で保存
  5. 元のxlsmはそのまま残る

これで、 納品・配布・公開用として最強構成です。


事前準備

この設定をしないとエラーになります。

ファイル
→ オプション
→ セキュリティセンター
→ セキュリティセンターの設定
→ マクロの設定
→ 「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェックを入れる

完全削除のVBAコード

Sub ボタン2_Click()

    Dim wbSrc As Workbook
    Dim wbTmp As Workbook
    Dim comp As Object
    Dim ws As Worksheet
    Dim shp As Shape
    Dim savePath As String
    Dim baseName As String
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    Set wbSrc = ThisWorkbook
    
    ' 保存先
    savePath = wbSrc.Path & "\"
    baseName = Replace(wbSrc.Name, ".xlsm", "")
    
    ' 一時コピー作成
    wbSrc.SaveCopyAs savePath & baseName & "_temp.xlsm"
    
    ' コピーを開く
    Set wbTmp = Workbooks.Open(savePath & baseName & "_temp.xlsm")
    
    ' ===== マクロ削除 =====
    For Each comp In wbTmp.VBProject.VBComponents
        Select Case comp.Type
            Case 1, 2, 3 ' 標準 / クラス / フォーム
                wbTmp.VBProject.VBComponents.Remove comp
        End Select
    Next comp
    
    ' ===== ボタン・図形削除 =====
    For Each ws In wbTmp.Worksheets
        For Each shp In ws.Shapes
            shp.Delete
        Next shp
    Next ws
    
    ' ===== xlsx保存 =====
    wbTmp.SaveAs _
        Filename:=savePath & baseName & ".xlsx", _
        FileFormat:=xlOpenXMLWorkbook
    
    ' 一時ファイル削除
    wbTmp.Close SaveChanges:=False
    Kill savePath & baseName & "_temp.xlsm"
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    MsgBox "完了!" & vbCrLf & _
           "マクロ・ボタン完全削除済みxlsxを作成しました。", vbInformation


End Sub

ボタンへの設定方法

  1. 開発タブ → 挿入 → フォームコントロール(ボタン)
  2. 上記マクロを割り当て
  3. ボタン名例:
    • 「配布用xlsx作成」
    • 「マクロ削除」

元のファイル。
ボタンとコードが入ってます。

新たなボタンを作成します。

先程のコードを入力します。

ボタンができたら、ボタンをクリックします。

新しくできたファイルを開くと、マクロが消えています。

これで解決しましたね!


よくある質問(FAQ)

Q. 元のxlsmは消えますか?

 →A.消えません。コピーを使って処理します。

Q. 図形や説明枠も消えますか?

 →A.はい。すべて削除されます。

Q. マクロは復元できますか?

 →A.できません。必ずバックアップを取ってください。


まとめ

  • マクロ配布トラブルは事前対策が9割です
  • ボタン1発で完全無害化できます
  • 納品・社外配布に最適です

Excelを使うすべての人におすすめのVBAです。

このページが役に立ったら、ぜひブックマークしてください。

コメント

タイトルとURLをコピーしました