「あ、書き込めない…」を即解決!Excel VBAでファイル属性(読み取り専用・隠し)を自動操作する方法

【業務効率化】VBA
スポンサーリンク


「よし、データを更新して保存……えっ、読み取り専用!? せっかく入力したのに保存できないじゃん……。誰だよ、属性変えたの!」

職場でこんな経験はありませんか?

あるいは、大量のファイルの中に「隠しファイル」が混ざっていて、集計から漏れてしまった……というケースも少なくありません。

実は、これらの「読み取り専用」や「隠しファイル」といった設定(ファイル属性)は、Excel VBAを使えば一瞬で「確認」も「変更」も可能になります。

今回は、プログラミング初心者の方でもコピペで使える、ファイル属性操作についてご紹介します。

【業務効率化】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の記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でしたが、年間100万円以上節約していました。
株式投資で年間360万円以上投資し、iDeCoも併用しています。
総資産はアッパーマス層に到達しました。
資格は日商簿記3級を持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、生産性を高めるITスキルについて発信しています。

生活を豊かにするため、高配当株投資で年間配当金60万円をめざしています。
現在の年間配当金は30万円ほどです。

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました