『マクロが含まれるファイルからマクロの削除』(けーた)
マクロの含まれるファイルからマクロを一括削除するマクロは作れるものでしょうか。
< 使用 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
少し意地悪な回答にはなりますが、本来は不可能なことを言っています
単純に考えれば、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.