[[20251221193322]] 『マクロが含まれるファイルからマクロの削除』(けーた) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『マクロが含まれるファイルからマクロの削除』(けーた)

マクロの含まれるファイルからマクロを一括削除するマクロは作れるものでしょうか。

< 使用 Excel:unknown、使用 OS:unknown >


ファイル → 名前を付けて保存

ファイルの種類を
「Excel ブック(.xlsx)」
に変更

保存
(永合) 2025/12/21(日) 20:46:02


シートモジュールに記述したものでなければ、全シートを新規ブックにコピーし、別名で保存するアプローチもありますね。

削除するというより、マクロなしバージョンを別に作成するという考え方をするとよいと思います。

(もこな2 ) 2025/12/21(日) 21:06:43


 EXCELファイルがあるフォルダ内のxlsm ファイルを自ファイルを除いてすべて xlsx に変更保存するマクロを作成せよ

 以下は
  このマクロを含む Excel ファイルが置かれているフォルダ
  拡張子が .xlsm のファイル
  ただし「このマクロ自身のファイル」は除外
  すべて .xlsx として保存し直す(マクロなし)
 を行う VBA マクロです。

 Option Explicit
 Sub xlsmをxlsxに一括変換()

    Dim folderPath As String
    Dim fileName As String
    Dim wb As Workbook
    Dim myFileName As String
    Dim newFilePath As String

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    ' このマクロ自身のファイル名
    myFileName = ThisWorkbook.Name

    ' このマクロが置かれているフォルダ
    folderPath = ThisWorkbook.Path & "\"

    ' フォルダ内の xlsm を順に処理
    fileName = Dir(folderPath & "*.xlsm")

    Do While fileName <> ""

        ' 自分自身は除外
        If fileName <> myFileName Then

            Set wb = Workbooks.Open(folderPath & fileName)

            ' 保存先(拡張子を xlsx に変更)
            newFilePath = folderPath & _
                          Replace(fileName, ".xlsm", ".xlsx")

            ' xlsx として保存(マクロ削除)
            wb.SaveAs _
                Filename:=newFilePath, _
                FileFormat:=xlOpenXMLWorkbook

            wb.Close SaveChanges:=False
        End If

        fileName = Dir
    Loop

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

    MsgBox "変換が完了しました。", vbInformation
 End Sub

(英愛) 2025/12/21(日) 21:55:45


これってVBAProjectをいじりたいってことなのでしょうか?
ここで探せば見つかると思いますよ
消されてなければ・・・
ただ設定とかも関係するし、ウイルス駆除、防御系ソフトにも影響あるだろうと思う
最近のエクセルはどうだかわからない。
(気分) 2025/12/22(月) 12:51:03

 少し意地悪な回答にはなりますが、本来は不可能なことを言っています

 単純に考えれば、xlsm→xlsxとして保存すればいいように見えますが
 そのようなマクロを記述した時点で、そのブックはxlsmとしてしか保存できません

 .SaveAsでxlsxと保存しようとも、ThisWorkbookには既に「そのマクロ」が記述されているため
 「マクロを実行しろ」と言いつつ「マクロを破棄して保存しろ」と言っていることになるので
 言葉通りの処理を行うことは、「不可能」です

 ThisWorkbookをSaveCopyAsでコピー
 →開いてxlsxとして保存

 とすれば、ThisWorkbookのマクロなしコピーが保存されます

 ThisWorkbook自体の削除や移動は推奨されませんので割愛しますが
 通常は「元ブックは保持したまま、コピーを作成して処理する」と言う考え方が推奨されます

(Asa) 2025/12/22(月) 21:30:10


 ※補足
 もちろん、他ブックからの拡張子操作やモジュール操作は可能です
 ただし、既存のマクロを削除してしまうことは全く推奨されないため

 •現状使用しているxlsm群の原本を保存している
 •貴方個人で扱っているxlsmでマクロを削除しても問題ない(復元が可能である)

 などの前提を満たしていない場合は、既に使用しているxlsmに
 「自身をコピーしてxlsxとして保存する」処理を追記する方針をお勧めします

  xlsm→xlsxとして保存した時点で、変更は不可逆であり
「そこに記述されていたマクロ」は完全に消失し復元が不可能になります

 そういった意味で言うと、英愛様の回答は些か無責任であるように見えます
 (まあAIのコピペなんでしょうがね)

(Asa) 2025/12/22(月) 21:42:30


 今のエクセルで動くのかわからないけど
 セキュリティの面でもどうだか?
https://excelfactory.net/excelvbatips/vbe/vbe_index.html
(気分) 2025/12/23(火) 02:36:07

 Asaさんのコメントについて実際にためして確認してみました。

 > xlsm→xlsxとして保存した時点で、変更は不可逆であり
 >「そこに記述されていたマクロ」は完全に消失し復元が不可能になります
 そうはなりませんでした。

 wb.Close SaveChanges:=False
 としているので .xlsmのブックは元のものがそのまま残ります。
 消失することはないと思います。
 もちろん、.xlsxブックは保存されています。

 なお、「.xlsmから.xlsxへの変換を行うための当該マクロブックは変換の対象とはしない」
 という点は適切な前提と思いました。そういう変換をしてしまうと機能が果たせないのですから。
 説明が不十分ということかもしれませんが、解釈の余地の範囲内のように思います。

 英愛さんはもちろんご自分で動作確認されたうえで回答コメントを寄せられていると思いますが、
 いかがでしょうか。

(xyz) 2025/12/23(火) 12:39:36


 マクロで直接、コードを削除するといった方法について興味があるかたは、
 既に紹介された記事のほか、下記のサイトをじっくり学習することを推奨します。

 「VBAでVBEを操作する」
http://officetanaka.net/excel/vba/vbe/

 Excel学習についての大御所の一人と思われるtanakaさんの記事です。
 セキュリティ関連の留意点にも触れられています。

 なお、こうした手法はマクロウイルス作成につながるものとして
 掲示板によっては、そうした投稿そのものが禁止されていた時期もありました。
 しかし大御所の記事が出てからは、「こちらを参照して、あとは自己責任で調べて見て下さい」
 という回答で対応するように私はしています。

 # AI利用が進んだ今、このあたりの状況が変わったのかどうかは興味はありますが調べてはいません。

(xyz) 2025/12/23(火) 12:54:54


 xyz様
 ご指摘のように、SaveChanges:=Falseでxlsm/xlsxの両方が保存されることを確認いたしました

 「拡張子変更の不可逆性」「モジュール破棄のリスク」について論じたかったところを
 ロジックが少々飛躍してしまい申し訳ございません

 また、私の主旨をご理解いただき補足していただきありがとうございます
( Asa) 2025/12/25(木) 13:19:36

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.