🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

5571閲覧

エクセルの「読み取りパスワード」を、エクセルを開かずに設定する方法はありますか?

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2019/10/08 07:32

編集2019/10/08 10:37

前提・実現したいこと

エクセルの「読み取りパスワード」を、エクセルを開かずに設定したいです。
プログラムの使用者は非エンジニアで、大量にあるエクセルへの鍵付けを自動化したいからです。

試したこと

(1) VBAで行う場合、下記のコードで可能でした

ActiveWorkbook.SaveAs Filename:="FilePath", Password:="password"

しかしいちいちマクロ画面を開く必要があり、非エンジニアにはわかりづらい事。
またすでに編集が完了してある大量のファイルに同様の設定を行い為、最善の解決とは思えません。

(2) PythonのOpenPyxlで設定する

OpenPyxlにはシートにパスワードをかける事は可能ですが、ブックにかける事はできないようです。

まとめ

どんな方法でも結構です(言語でもshellでも)
何か解決に近づく方法がございましたらお教え頂ければ幸いです。

解決策

できました。
まさに理想の形で!
otunさんありがとうございました!

vba

1Option Explicit 2 3Sub setPasswordExcelFile() 4 Dim delimiter As String 5 If Application.OperatingSystem Like "*Mac*" Then 6 delimiter = "/" 7 Else 8 delimiter = Chr(92) 9 End If 10 11 'バックグラウンド実行 12 Application.ScreenUpdating = False 13 14 'ファイル名作成 15 Dim strFileName As String 16 strFileName = "a4.xlsx" 17 18 'ファイルパス指定 19 Dim strFilePath As String 20 strFilePath = ThisWorkbook.Path & delimiter & strFileName 21 22 Dim wb As Workbook 23 Set wb = Workbooks.Open(strFilePath) 24 ActiveWindow.Visible = False 25 wb.Activate 26 27 'ファイル保存 28 Application.DisplayAlerts = False '警告メッセージ非表示 29 wb.SaveAs FileName:=strFilePath, _ 30 Password:="Password" 31 Application.DisplayAlerts = True '警告メッセージ非表示解除 32 33 '完了メッセージ 34 MsgBox "ファイルの保存が完了しました" & vbCrLf & _ 35 "保存先は" & strFilePath & "です。" 36 Application.ScreenUpdating = True 37End Sub 38 39 40 41'Sub Clic() 42' Module2.setPasswordExcelFile 43'End Sub 44

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nandymak

2019/10/08 07:42

Excelマクロ(VBA)で特定のフォルダー内のExcelファイルに対して、処理をするのではダメでしょうか?
退会済みユーザー

退会済みユーザー

2019/10/08 07:48

ご回答ありがとうございます。 VBAに疎く、フォルダ内全てのエクセルに実行できる事を知りませんでした。 早速調べながら試してみます。
m.ts10806

2019/10/08 08:05

ボタンなどを押して実行するようにはなってないということでしょうか
退会済みユーザー

退会済みユーザー

2019/10/08 08:12

m.ts10806さん コメントありがとうございます。 仰る通りの状態でしたが、ベストアンサー様のコメントで段々と理解が追いつき現在は「ボタンを押して実行する」方向で作成中です。 完成次第、質問にも追記致します。
m.ts10806

2019/10/08 08:19

はい。大抵はマクロ直接実行ではなくボタン押下などをトリガーとして動作させるように作ります。
guest

回答2

0

ベストアンサー

「同じフォルダーにある全部のExcelファイルを順番に開いて、パスワードを付けて保存する」というVBAスクリプトを書けばいいのでは?
それを書いたxlsmファイルを開いてボタンを押すという操作にすればいいと思います。
#追記
こんな感じで。
1.VBAを書いてあるxlsmファイルの絶対パスを調べる
2.ディレクトリを取り出す
3.そこをカレントディレクトリにする
4.Dir関数でxlsファイルを順に取り出す
5.そのファイルをWorkbooks.Openする
6.処理する
7.保存する
8.Dirで次のファイルへの繰り返しに戻る

投稿2019/10/08 07:39

編集2019/10/08 07:56
otn

総合スコア85893

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/10/08 07:48

ご回答ありがとうございます。 VBAに疎く、フォルダ内全てのエクセルに実行できる事を知りませんでした。 早速調べながら試してみます。
退会済みユーザー

退会済みユーザー

2019/10/08 08:03

ご回答の追記を頂きありがとうございます。 フローチャート、とてもわかりやすくて本当に感謝しかありません。 このように駆動するプログラムが、 1. 「main.xlsm」をダブルクリックするとエクセルが開く 2. 画面の中にボタンが存在して、それをクリックすると動作 という流れを期待して作り始めておりますが、同じ認識でしょうか・・・? ダブルクリックした時点で画面が開かず実行できるのでしたら、その方法を調べてやってみたいと思っています(情報が見つからなかった)
otn

2019/10/08 08:10

はい。同じ認識です。 xlsmファイルを開いた時点でスクリプトを実行するのは可能(Workbook_Open)ですが、開かずにというのは多分無理だと思います。処理の初めでvisible=falseにすれば一瞬開いて見えなくなりますが、エラーの時にどうなるのか???
退会済みユーザー

退会済みユーザー

2019/10/08 08:11

エラーの時にfalseにするとデバッグが不可能かつ修正も行えない?ようになりそうですね。 理解の少ない人間にもわかりやすく説明してくださりありがとうございました。 まずは1ファイルパスをつける事ができたので、完成次第質問にも追記します。 本当にありがとうございました。
退会済みユーザー

退会済みユーザー

2019/10/08 10:38

otnさん 解答を導けました????に追記 本当にありがとうございました! (こうした方がもっといいってのがあったら教えてくれると嬉しいです・・・)
otn

2019/10/08 10:56

対象が1ファイルのみということですよね。 良いと思います。 Application.Visible=Falseを使ってもいいと思いますけど。 細かい点だと、パス名の区切りはWindowsでも"/"でもいいです。 後で思いましたが、 私が作るなら、VBScriptで書いて、処理対象のExcelファイル複数をVBSファイルにドラッグ&ドロップするようにすると思います。
退会済みユーザー

退会済みユーザー

2019/10/08 11:15

後々for文で回して複数ファイルにするつもりですが、一旦単一ファイルのコードを作成しました。 ありがとうございます! Windowsでも`/`で大丈夫なのですね・・・ ほう、VBScriptでも! ちょっと見てみます!
guest

0

Option Explicit Sub setPasswordExcelFile() Dim delimiter As String If Application.OperatingSystem Like "*Mac*" Then delimiter = "/" Else delimiter = Chr(92) End If 'バックグラウンド実行 Application.ScreenUpdating = False 'ファイル名作成 Dim strFileName As String strFileName = "a4.xlsx" 'ファイルパス指定 Dim strFilePath As String strFilePath = ThisWorkbook.Path & delimiter & strFileName Dim wb As Workbook Set wb = Workbooks.Open(strFilePath) ActiveWindow.Visible = False wb.Activate 'ファイル保存 Application.DisplayAlerts = False '警告メッセージ非表示 wb.SaveAs FileName:=strFilePath, _ Password:="Password" Application.DisplayAlerts = True '警告メッセージ非表示解除 '完了メッセージ MsgBox "ファイルの保存が完了しました" & vbCrLf & _ "保存先は" & strFilePath & "です。" Application.ScreenUpdating = True End Sub 'Sub Clic() ' Module2.setPasswordExcelFile 'End Sub

投稿2019/10/17 02:10

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問