• ベストアンサー

シートの保護と写真の挿入・設置を上手く調整したい

仕事でExcelを活用したいと思い、少し古いですが2000を使い始めました。 今作ろうとしているのは、30商品ほどの情報管理が出来るブックです。 1つの原価表シートと、商品分の複数シートがあります。 原価表シートの情報を、VLOOKUP関数を用いて各商品のシートにコード入力で 名称や原価の反映が出来るようにしました。 関数の設定箇所が非常に多いので、このブックは各シートに保護が必要です。 (操作に不慣れな人や、ミスで関数が消えてしまう事の防止のため) ☆★☆上記を踏まえて、以下に質問があります☆★☆ コードの入力だけならば、シートを保護する際に所定のセルのロックを外して 保護をかければ問題はありません。 しかし、各シートには「商品写真」欄を必ず1つ用意しなくてはいけません。 写真は、都度商品が追加されるたびに、デジカメ等で撮影して取り込みます。 操作に不慣れな人を考慮すると、都度の保護と解除はミスの原因になりやすく 不安なため、シート内で上手く保護のかかった状態から画像の挿入と調整が 出来ないか悩んでおります。 どういった形でかは一時的に解除が必要かと思うのですが、マクロやVBA まではまだ理解が出来ていなく、この辺り上手くできる方法などご教授を 頂けませんでしょうか? 説明に分かりにくい点がありましたら申し訳ありません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんばんは。KenKen_SP です。 【テスト用サンプルブックでのマクロ導入手順】 1. 新規ブックを作成し、適当なフォルダへ保存 2. Excel 画面で[Alt]+[F11]キーを押し Visual Basic Edior(以下VBE)を起動 3. VBE 画面左側のエクスプローラーのようなツリーで「ThisWorkbook」の   アイコンをダブルクリック 4. 3. で開いた画面に #2 の Option Explicit ~ 終わりまでをコピペ 5. VBE を閉じる 6. 再度ブックを保存 7. ブックを閉じる 8. ブックを再度開く 以上の手順で、セルの右クリックに「画像の挿入」メニューが追加されてます。 シートが保護されていても大丈夫(´・ω・`)

ele_ele
質問者

お礼

KenKen_SP様、導入の手順までご説明頂きありがとうございます。 シートが保護されている状態でも、画像の挿入と位置調整などが 可能であることを確認できました。 理想の通りに完成しまして、大変満足しております。 まだまだ関数で手一杯の状態ではございますが、今後も引き続き勉強を していきたいと思います。 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんばんは。KenKen_SP です。 シートを保護してしまうと画像の挿入ボタンがグレーアウトしますね... VBA を使って構わないならこんな感じで実現できますよ。 ・画像の挿入は、オリジナルのメニューがセルの右クリックに追加されて  ますので、そこから。50%縮小や選択範囲のサイズにあわせる機能がオマケ  で付いてます。複数枚同時挿入も可能です。 ・管理者用に一括でシートを保護・保護解除できるようになってます。  [ツール]-[マクロ]-[マクロ]から実行します。  初期パスワード: admin ・一応マクロが無効で開かれた場合の対策をしてあります。 ・VBA プロジェクトにパスワードを設定して下さい。(<--重要) ・テストで実用に耐えうるか必ず評価して下さい。いきなり実際のブックに  組み込まないこと。 結構複雑な仕組みなので、マクロの知識がある人が周囲にいなければ、メンテ で辛くなりますが、シンプルに作れそうもない内容でした...まあ、余計な機能 もあるわけですが(´・ω・`) 万全の保護は現実的に不可能なのですが、それなりに強固な保護になっていると 思いますよ。 ' 注意: 全て ThisWorkbook です。貼り付ける場所等はご自分でお調べ下さい。 Option Explicit ' 設定 ------------------------------------------------------------------------ ' シート保護のパスワードを設定(無しなら""とする) Private Const PASSKEY = "123" ' 管理者パスワード(シートの一括保護・解除に使用します) Private Const ADMIN_PASSKEY = "admin" '------------------------------------------------------------------------------ ' 以下のパスワードは変更不要 Private Const BOOK_PASSKEY = vbVerticalTab & "__BOOK_PASSKEY__" & vbVerticalTab Private WithEvents mApp As Application Private mcMenu      As CommandBarControl Private mCloseFlag    As Boolean Private Sub Workbook_Open()   On Error Resume Next   With ThisWorkbook     .Unprotect Password:=BOOK_PASSKEY     .IsAddin = False     .Saved = True   End With   If mApp Is Nothing Then Set mApp = Application   ' カスタムメニューをセルの右クリックに追加   Call AddCustomMenu End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean)   Dim iRes As Integer   On Error Resume Next   mcMenu.Delete   If Not ThisWorkbook.Saved Then     Cancel = True     iRes = MsgBox(ThisWorkbook.Name & "の変更を保存しますか?", _            vbYesNoCancel + vbDefaultButton1 + vbExclamation)     If iRes = vbYes Then       Call Workbook_BeforeSave(False, False)       ThisWorkbook.Close     ElseIf iRes = vbNo Then       mcMenu.Delete       ThisWorkbook.Saved = True       ThisWorkbook.Close     Else       Call AddCustomMenu     End If   End If End Sub Private Sub mApp_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)   ' このブック以外ではカスタムメニューを表示させない   On Error Resume Next   If Not mcMenu Is Nothing Then     If Wb Is ThisWorkbook Then       mcMenu.Visible = True     Else       mcMenu.Visible = False     End If   End If End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)   ' マクロ無効対策 '  On Error Resume Next   Cancel = True   With Application     .EnableEvents = False     .ScreenUpdating = False   End With   With ThisWorkbook     .IsAddin = True     .Protect Password:=BOOK_PASSKEY, Windows:=True     .Save     .Unprotect Password:=BOOK_PASSKEY     .IsAddin = False     .Saved = True   End With   With Application     .ScreenUpdating = True     .EnableEvents = True   End With End Sub Public Sub 管理者専用()   Dim sPass   As String   Dim iErrCount As Integer   Dim iMode   As Variant   On Error Resume Next   Do While iErrCount < 3     sPass = InputBox("Caps キーや Numlock に注意して下さい", "管理者パスワード")     If sPass = ADMIN_PASSKEY Then       iMode = InputBox("1: 全シート保護" & vbLf & "2: 全シート保護解除", _                "管理者メニュー")       If Val(iMode) = 2 Then         Call SheetUnProtect         MsgBox "シート保護解除しました", vbInformation       Else         Call SheetProtect         MsgBox "シート保護しました", vbInformation       End If       Exit Sub     Else       Call SheetProtect       iErrCount = iErrCount + 1     End If   Loop   MsgBox "認証に失敗しました", vbCritical End Sub ' // 画像を挿入します Private Sub InsertPic()   Dim vFnames As Variant   Dim vFname  As Variant   Dim sngZoom As Single   Dim Pic   As Picture   Dim sngW   As Single   Dim sngH   As Single   Dim iOffet  As Integer   On Error Resume Next   vFnames = Application.GetOpenFilename( _        FileFilter:="Image ファイル, *.jpg;*.bmp;*.gif", _        Title:="画像ファイルを指定して下さい", _        MultiSelect:=True)   If IsArray(vFnames) Then     Application.ScreenUpdating = False     ' ActiveSheet の保護を解除     Call SheetUnProtect(ActiveSheet)     With Selection       sngW = .Width       sngH = .Height     End With     sngZoom = CSng(Application.CommandBars.ActionControl.Parameter)     iOffet = 0     For Each vFname In vFnames       Set Pic = ActiveSheet.Pictures.Insert(vFname)       Pic.Placement = xlFreeFloating       Pic.ShapeRange.LockAspectRatio = msoTrue       Pic.Locked = False       With Pic.ShapeRange         Select Case sngZoom           Case 0: .Height = sngH           Case 1: .Width = sngW           Case 2:             .LockAspectRatio = msoFalse             .Width = sngW             .Height = sngH           Case 10 To 400 ' 10~400% を有効とする             .Height = .Height * sngZoom / 100#         End Select         .IncrementTop CSng(10 * iOffet)         .IncrementLeft CSng(10 * iOffet)         iOffet = iOffet + 1       End With       Set Pic = Nothing     Next   End If   ' ActiveSheet を保護   Call SheetProtect(ActiveSheet)   If mApp Is Nothing Then Set mApp = Application End Sub ' // セルの右クリックメニューにオリジナルメニューを追加 Private Sub AddCustomMenu()   Dim Cmb   As CommandBar   Dim sAction As String   Set Cmb = Application.CommandBars("Cell")   On Error Resume Next   Cmb.Controls("画像の挿入(&D)").Delete   Set mcMenu = Cmb.Controls.Add(Type:=msoControlPopup, Temporary:=True)   With mcMenu     .Caption = "画像の挿入(&D)"     .BeginGroup = True     sAction = "ThisWorkbook.InsertPic"     With .Controls.Add(Type:=msoControlButton)       .Caption = "選択範囲の縦を基準にする(&1)"       .OnAction = sAction       .Parameter = 0     End With     With .Controls.Add(Type:=msoControlButton)       .Caption = "選択範囲の幅を基準にする(&2)"       .OnAction = sAction       .Parameter = 1     End With     With .Controls.Add(Type:=msoControlButton)       .Caption = "選択範囲の縦横に合わせる(&3)"       .OnAction = sAction       .Parameter = 2     End With     With .Controls.Add(Type:=msoControlButton)       .Caption = "原寸(&4)"       .OnAction = sAction       .Parameter = 100     End With     With .Controls.Add(Type:=msoControlButton)       .Caption = "75%縮小(&5)"       .OnAction = sAction       .Parameter = 75     End With     With .Controls.Add(Type:=msoControlButton)       .Caption = "50%縮小(&6)"       .OnAction = sAction       .Parameter = 50     End With     With .Controls.Add(Type:=msoControlButton)       .Caption = "25%縮小(&7)"       .OnAction = sAction       .Parameter = 25     End With   End With   Set Cmb = Nothing   If mApp Is Nothing Then Set mApp = Application   On Error GoTo 0 End Sub ' // シートに対しパス付き保護をかけます Private Sub SheetProtect(Optional Wst As Worksheet)   ' 引数:[Wst] シートオブジェクト。省略するとブック内の全シート   Dim Sh As Worksheet   On Error Resume Next   If Not Wst Is Nothing Then     Wst.Protect Password:=PASSKEY, UserInterfaceOnly:=True   Else     For Each Sh In ThisWorkbook.Worksheets       ' 今回は画像を保護しない       Sh.Protect Password:=PASSKEY, UserInterfaceOnly:=True, DrawingObjects:=False     Next   End If End Sub ' // シートの保護を解除します Private Sub SheetUnProtect(Optional Wst As Worksheet)   ' 引数:[Wst] シートオブジェクト。省略するとブック内の全シート   Dim Sh As Worksheet   On Error Resume Next   If Not Wst Is Nothing Then     Wst.Unprotect Password:=PASSKEY   Else     For Each Sh In ThisWorkbook.Worksheets       Sh.Unprotect Password:=PASSKEY     Next   End If End Sub

ele_ele
質問者

お礼

ご回答ありがとうございます。 VBAのコードまで載せて頂いて大変助かります。 まだVBAは触れた事がなく、分からない点もございますので 導入の仕方から勉強を続けてこちらのコードを使わせて頂こうと 考えております。

全文を見る
すると、全ての回答が全文表示されます。
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

シートの保護で「オブジェクト」のチェックをはずせば 画像の挿入と調整は出来ますが...

ele_ele
質問者

お礼

アドバイスありがとうございます。 私のExcel2000では、シートの保護から「オブジェクト」の チェックを外した状態で写真の挿入が出来ませんでした。 (既に挿入された写真の調整は可能でした。) 私の設定が何かおかしいのでしょうか・・・ また、運用上都度ツールメニューから保護の解除や設定は 本文の通り避けられればと思っています。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel2013でシートの保護解除について

    よろしくご教授お願いいたします。 Excel2002のブックを互換モードでExcel2013に移行しました。 移行前には、特定範囲のセルの保護ロックを解除の上、シートに保護をかけていました。 移行後、しばらく使っているうちにロック解除しているセルに入力すると、「シートに保護がかかっているので解除してください」とのダイアログが現れます。[校閲]タグを開いても[シートの保護解除]ボタンはなくて、[シートの保護]ボタンが選択できない淡色で存在しています。 [校閲]タブを色々操作しているうちに、「共有」に変更と加えたらしく、ひとつのシートに数値入力すると、全てのシートの同じ座標に同一の数値が入力されてしまいます。 毎日入力する必要があるデータなので大変困っています。 解決策が分かればお教えいただけないでしょうか。

  • シートが保護されていないのに保護を解除して下さいと

    Excel 2003です。 シートが保護されていないのに、保護を解除して下さいと出て、コマンドが実行できません。 メニューより[書式]→[スタイル]で、不要な書式を削除したいのですが、削除出来ません。 それまでに、行っていた作業は、ブックが増えすぎて、まとめようと、シートのコピー(シート名タブで右クリック→移動またはコピーする)を行いました。 その後、各シートへのハイパーリンクをメニュー用として新しく作ろうと、ネットで見かけたコードを引用して、実行してから、不要な書式が登録されてしまいました。 不要な書式が登録されたのに気付いたのは、新しくシートを追加し、1シートだけなのでコマンドでハイパーリンクを設定したら、フォントサイズが小さく(正常な他のブックでは、11ポイントですが、8.5ポイント)なり、[書式]→[スタイル]→スタイル名欄の右横の下向き三角形のボタンをクリックしたらハイパーリンクがあり、これを削除しようとしたら、シートが保護されていますシートの保護を解除してから行って下さいとメッセージが出て削除出来ません。 このメッセージが出て、シートの保護を解除しようとメニューより[ツール]→[保護]をクリックすうると[シートの保護を解除する]が出てくるのでしょうが、その位置は[シートを保護する]になっています。 他の正常なブックは、[書式]→[スタイル]には、(パーセント、桁区切り、桁区切り [0.00]、通貨、通貨 [0.00]、標準)だけです。 ハイパーリンク以外に、も幾つものスタイルが登録されています。 (例、男・女・良い・悪い・年齢・20パーセント アクセント・見出し1等) このブックからシートを新しいブックにコピーしても書式→スタイルもコピーされてしまいます。 まとめた際に、元のブックは削除してしまったので、この壊れたブックから取り出さないといけないので困っています。

  • エクセル2007の、シートの保護について

    エクセル2007の、シートの保護について シートの保護の際、「このシートのすべてのユーザーに許可する操作」にて ・ロックされていないセルの選択 ・セルの書式設定 にチェックを入れたのですが、ブックを保存して閉じて、再度開くと ・セルの書式設定 のみチェックの入っていない状態で開かれます。 シートは保護された状態なため、いちいち保護を解除してチェックを入れ直し、 再度保護するのが面倒なのですが、ブックを閉じても 「このシートのすべてのユーザーに許可する操作」の設定が変わらない方法はあるのでしょうか? どうぞ、よろしくおねがいいたします。

  • シート保護解除ができません

    こんにちは。 よろしくお願いします。 WinXP、Office2002です。 Excelでブックの作業中、突然[ツール]-[保護]でシート保護の解除が選択できなくなりました(淡色)。 Excelはバージョン97から長い間使っていますがこのようなことは初めてです。 シート保護の解除が選択できないブックは作業中だったブックだけです。 どなたかその原因と対処法を教えてくださいませんか。

  • VBAでのブック・シートの保護・解除について

    エクセル2010のVBAでのブック、シートの保護&解除の方法について教えて頂きたく、 質問させて頂きます。 消されては困るシートや数式がある関係で、ブックオープン時にVBAでブックとシートにそれぞれパスワードをかけて保護しています。 VBAではシートの削除、作成、コピーなどを行っているため、VBA実行時のみ、保護を解除させるようにしたいと思います。 ただ、対象のシート自体にも入力したい項目があるため、その箇所については保護を解除しておく必要があります。 そして、VBA実行後、再度、その箇所以外にパスワードで保護をかけ直します。 イメージとしては下記のような流れになります。 対象ブック:ブックA 対象シート:シート1 パスワード:1234(それぞれ) 常時保護を解除しておきたいセル:range("A6:H106") 1.(オープン時には、)ブック保護&特定のセル以外のシート保護 2.VBA実行時には全ての保護解除 3.VBA終了時に、1の状態に戻る どうぞよろしくお願い致します。

  • シートをまとめて保護・解除したい

    エクセル97、2000を使っています。 エクセルもシートが多くなると、その保護と解除が面倒で困っています。 いちいちシートを選択して保護と解除をしなければなりません。 マクロなどを使わずに、全てのシートを一度に保護・解除する方法はないでしょうか。シートの中にも保護してるセルとそうでないセルがあるので ブックを保護するわけにもいきません。

  • 「シート保護の違い…。」

    エクセルでライセンスキーやシリアルナンバーがありますがシート保護パスワードとは違うのでしょか?? シート保護パスワードを入力して解除すればライセンスキーやシリアルナンバーがなくても操作する事は出来るのでしょうか??基本的な質問ですが教えて下さい<m(__)m>宜しくお願い致します。

  • シート保護のパスワードは・・・

    下の「シート保護」マクロは、パスワード「111」でシートを保護しなさい。    「シート保護解除」マクロは、パスワード「111」でシートの保護解除をしなさい。 という命令だと思うのですが・・・ Sub シート保護()   ActiveSheet.Protect possword = "111" End Sub Sub シート保護解除()   ActiveSheet.Unprotect possword = "111" End Sub パスワードを入力してシートの保護を解除しようとすると、 入力したパスワードは間違っています。 CapsLockキーがオフになっていることを確認し、 大文字と小文字が正しく使われていることを確認してください。 というメッセージが出るのですが・・・、 マクロで作成した保護は、マクロで解除しないとダメという意味なのですか? シートで保護解除できるようにしたいのですが、できますか?

  • 保護及び保護の解除を一括して処理する方法のご教示を。

    1個のブックに、30シート作成してあります。(増減の可能性があり最終が何シートになるかわかりません) シート名は、数字単体名と漢字名のものとが混在しています そのようなブックが多数あります 各シートに保護が掛けてあります 訂正などする時の為に、保護と保護解除をマクロで組み、各シートにマクロボタンで操作するようにしてあります しかし、ブック全体を修正す時に各シートの保護をいちいち解除しなければなりません。 そこで、一括して保護及び保護の解除をしたいので、その方法を御教示下さい。 1.ブック単位で、各シートの保護及び保護の解除を一括でする。 2.シート毎に保護及び保護の解除する場合は現在のマクロを使用したい 上記のような条件で、各ブック共通のマクロの作成を御教示御願い致します

  • Excelシートの保護について教えて下さい

    EXCELのシートの保護機能(パスワード付き)をセキュリティ目的で使用しています。 ・出来上がった資料を加工させない ・使用している関数を表示させない設定にし保護をかけて  操作が出来ないようにしている。 ・同一シート上にあるデータをグループ化し見えないようにしている。 etc・・・ とこるがこのデータをコピーした場合は保護がかかってますが 同一データ上でワークシートを作成しコピペすると保護が解除されてしまって全て見えるようになってしまいます。 何か良い方法はあるのでしょうか。 お手数かけます。 宜しくお願い致します。

専門家に質問してみよう