業務でExcelファイルを扱う際、他のユーザーが開いているファイルをうっかり上書きしてしまうリスクを避けたいことはよくあります。そんなときに便利なのが「読み取り専用」でファイルを開く方法です。Excel VBAでは、この操作も自動化することが可能です。
この記事では、Excel VBAでファイルを読み取り専用で開く方法について、基本構文から応用テクニックまでをわかりやすく解説します。実務でも活用できるよう、サンプルコード付きで詳しくご紹介します。
目次
✅ 読み取り専用で開くとは?
読み取り専用とは、ファイルを開いて中身を確認・編集はできるものの、元のファイルには上書き保存できない状態のことを指します。これにより、複数人で同時にファイルを扱う際のトラブル防止になります。
たとえば、共有サーバー上のファイルを複数人で操作する場合、「読み取り専用」で開くことで、編集内容を自分専用のファイルとして保存したり、元のファイルを保護したりといった使い方ができます。
【VBA】フォルダ指定してファイルを開く方法|初心者にもわかる実践ガイド
✅ VBAで読み取り専用でファイルを開く基本構文
VBAでExcelファイルを読み取り専用で開くには、「Workbooks.Open」メソッドを使います。その中の引数に「ReadOnly:=True」を指定することで、読み取り専用として開くことができます。
以下が基本構文です。
Workbooks.Open Filename:="ファイルのパス", ReadOnly:=True
具体例
Sub OpenReadOnlyFile()
Dim wb As Workbook
Dim filePath As String
filePath = "C:\Users\UserName\Documents\業務ファイル.xlsx"
Set wb = Workbooks.Open(Filename:=filePath, ReadOnly:=True)
MsgBox "ファイルを読み取り専用で開きました。", vbInformation
End Sub
このコードでは、指定したファイルを読み取り専用で開き、完了後にメッセージボックスを表示しています。
✅ フルパスを変数で管理するメリット
ファイルのパスを変数で定義しておくと、複数の処理で使い回しができ、管理もしやすくなります。たとえば、ユーザーにファイルを選択してもらう場合は「Application.GetOpenFilename」関数を活用することも可能です。
Sub OpenSelectedFileReadOnly()
Dim filePath As String
Dim wb As Workbook
filePath = Application.GetOpenFilename("Excelファイル (*.xlsx), *.xlsx", , "読み取り専用で開くファイルを選択してください")
If filePath <> "False" Then
Set wb = Workbooks.Open(Filename:=filePath, ReadOnly:=True)
MsgBox "選択したファイルを読み取り専用で開きました。", vbInformation
Else
MsgBox "キャンセルされました。", vbExclamation
End If
End Sub
このように、ユーザーに任意のファイルを選ばせつつ、それを読み取り専用で開くという操作も自動化できます。
✅ 読み取り専用で開いたファイルを「名前を付けて保存」
読み取り専用で開いたファイルに変更を加えた場合は、「名前を付けて保存」して別のファイルとして保存する必要があります。以下はその一例です。
Sub SaveAsNewFile()
Dim wb As Workbook
Dim filePath As String
Dim newPath As String
filePath = "C:\Users\UserName\Documents\業務ファイル.xlsx"
Set wb = Workbooks.Open(Filename:=filePath, ReadOnly:=True)
newPath = "C:\Users\UserName\Documents\業務ファイル_修正版.xlsx"
wb.SaveAs Filename:=newPath
MsgBox "修正内容を新しいファイルとして保存しました。", vbInformation
End Sub
このコードでは、読み取り専用で開いたファイルを別名で保存しており、元のファイルには影響を与えません。
【VBA】ダイアログで名前を付けて保存・同じフォルダに保存する方法
✅ 読み取り専用で開いているかを確認する方法
VBAでは、開いているブックが読み取り専用かどうかを「Workbook.ReadOnly」プロパティで確認できます。
Sub CheckReadOnlyStatus()
If ThisWorkbook.ReadOnly Then
MsgBox "このブックは読み取り専用で開かれています。", vbInformation
Else
MsgBox "このブックは読み取り専用ではありません。", vbInformation
End If
End Sub
この処理を組み込んでおくと、条件によって処理を分けたい場合にも役立ちます。
【VBA】セルに特定の文字が入っていた場合にIF文で複数条件を処理する方法
■ 読み取り専用でも使える活用シーン
読み取り専用で開くことには以下のような活用方法があります:
- 上書き保存による誤操作を防ぐ(特に共有ファイル)
- 分析用として元データを加工せず参照したい
- 作業ミスによるデータ改変を避けたい
- データベース的に参照専用で活用したい
業務フローに合わせて「編集は別ファイルで行う」という運用にすることで、ファイルの破損や上書きトラブルを未然に防ぐことができます。
■ 注意点:読み取り専用でもマクロは実行できる
読み取り専用で開いていても、VBAマクロは実行可能です。そのため、読み取り専用だからといって処理が抑制されるわけではありません。逆にいえば、マクロによる誤操作で別名保存されるリスクなどもあるため、適切な制御が必要です。
■ まとめ
Excel VBAを活用すれば、読み取り専用でのファイルオープン操作を簡単に自動化できます。ファイル共有が当たり前になった現代の業務において、読み取り専用で開くという操作は、データの保護・業務効率・トラブル防止の観点から非常に重要です。
VBAを活用して以下のような対応が可能です:
- ファイルを読み取り専用で開く
- 選択ファイルの読み取り専用オープン
- 読み取り専用かどうかの判定
- 名前を付けて保存による編集の反映
実際の業務フローにあわせて、必要に応じた処理を組み込むことで、より堅牢でスマートなExcel業務を実現できます。ぜひ本記事を参考に、読み取り専用機能を上手に活用してみてください。