「よし、データを更新して保存……えっ、読み取り専用!? せっかく入力したのに保存できないじゃん……。誰だよ、属性変えたの!」
職場でこんな経験はありませんか?
あるいは、大量のファイルの中に「隠しファイル」が混ざっていて、集計から漏れてしまった……というケースも少なくありません。
実は、これらの「読み取り専用」や「隠しファイル」といった設定(ファイル属性)は、Excel VBAを使えば一瞬で「確認」も「変更」も可能になります。
今回は、プログラミング初心者の方でもコピペで使える、ファイル属性操作についてご紹介します。
ファイル属性とは?「属性のシール」でイメージしよう
「ファイル属性」と聞くと難しく感じられますが、要はファイルに貼られている「性格シール」のようなものです。
- 読み取り専用(ReadOnly):「見るだけ!書き込まないで!」というシール
- 隠しファイル(Hidden):「恥ずかしいから隠れるね!」というシール
VBAを活用すれば、このシールが貼られているかを確認したり、プログラムで瞬時に貼り替えたりすることができます。
ファイル属性を「取得」する方法(GetAttr関数)
まずは、指定したファイルにどんなシール(属性)が貼ってあるか調べる方法です。これにはGetAttr(ゲット・アトリビュート)関数を使います。
【コピペOK】属性を判定するコード
Sub CheckFileAttribute()
' 判定したいファイルのパスを指定します
Dim filePath As String
filePath = "C:\Users\Desktop\test.xlsx"
' ファイルの属性を取得して変数に格納
Dim attr As Integer
attr = GetAttr(filePath)
' 読み取り専用シールが貼ってあるかチェック
If (attr And vbReadOnly) Then
MsgBox "このファイルは「読み取り専用」です!"
Else
MsgBox "このファイルは普通に書き込めます。"
End If
' 隠しファイルシールが貼ってあるかチェック
If (attr And vbHidden) Then
MsgBox "これは「隠しファイル」です。"
End If
End Sub
【ポイント解説】
ここで使用しているAndは、通常の条件分岐の「かつ」という意味ではなく、「取得した属性の中に、特定のシールが含まれているか?」を調べる特殊な計算(ビット演算)を行っています。
3. ファイル属性を「設定・変更」する方法(SetAttr関数)
次に、こちらからシールをペタッと貼る(あるいは剥がす)方法です。これにはSetAttr(セット・アトリビュート)関数を使います。
【コピペOK】属性を変更するコード
Sub ChangeFileAttribute()
Dim filePath As String
filePath = "C:\Users\Desktop\test.xlsx"
' ファイルを「読み取り専用」かつ「隠しファイル」に設定する
' プラス(+)でつなぐだけで、複数のシールを同時に貼れます
SetAttr filePath, vbReadOnly + vbHidden
MsgBox "ファイルをガードして隠しました!"
' 逆にすべての属性を解除して「普通」に戻す
SetAttr filePath, vbNormal
MsgBox "普通のファイルに戻しました。"
End Sub
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。
リンク
リンク

コメント