• ベストアンサー

シートの保護でデータ追加が出来ない Excel

表の項目で関数を入れているなど、データ入力以外さわらせたくない項目があるため、 シートの保護を設定するとデータの追加(新しいレコードの追加)が出来なくなりました。 (表をリストに変換しています。またセルの設定で「ロック」は外しています) またマクロも実行時にエラーになります。 「シートの保護」の「~許可する操作」の設定をいろい変えてみたのですがうまくいきません。 リストへレコード追加やマクロ実行時が出来て、ユーザーには関係のない項目を触らせなくする方法は無いでしょうか。 エクセル2003です。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

>今回教えていただいたマクロの設定についても ANo.2の方の説明が無ければどこに設定すればいいのやら分からないところです。 それは、「ANo.2の方の説明が無ければ」は、「ANo.2の方のように説明が無ければ」だとは思います。私のコードは、#2さんのとは違います。私は、マクロを中心に回答してきていますが、マクロの設定は分かりません、と書かれていなければ、そのような説明は書きませんし、それは、質問者さんに失礼になるからです。それに、設定場所を書いていたのにも関わらず、モジュールの名前すら分からないなら、まだ、VBAは分かりません、と書いていただいたほうが良いです。 >(表をリストに変換しています。またセルの設定で「ロック」は外しています) 私の#3で書いたものは、掲示板では一般的に知られたオーソドックスで、初歩的なマクロのひとつです。ただ、ここのカテゴリでは、半分ぐらいのマクロの質問者は、例えば、エラー回避は不要だ、コードは短ければよい、識別子も変数もメソッドもワークシート関数も、文字だから、皆同じだ、というような、どういう理屈なのか理解不能な反応を示されることが多いようですが。 >(リスト内に保護項目を設けること) 少し考えれば分かりますが、 リスト・オブジェクト内の「新規入力を許す」ことは、  リスト・オブジェクトは生かす」ことです。 それなのに、  「リスト・オブジェクトは保護されている」 ということでしたら、現在のExcel 2003の機能の範囲では、そのロジックは矛盾しています。 今回、そのブックの利用者にどこまでの利用を許すか、ということが明確に示されていません。 ほとんど、シート全体を保護しながら、おそらく不特定多数の人に入力させるのに、オブジェクトの入力自体をExcelの仕様に依存するということ考え方なら、それは間違っているのです。 こういう場合は、シートを全面保護して、入力する部分はテキストボックスなどを別に設けて、そこに入力させて、ボタンで新規に加入させればよいのだと思います。 しかし、私は、そもそも、なぜ、リスト・オブジェクトであるのか、という点にも着目されます。その点から考え方を変えなくてはなりません。リスト・オブジェクトとは何か、どういう機能か、それを自分で実現できるかどうかという検討をすべきだと思います。 数式のコピー自体で、リスト・オブジェクトであり続けようとするなら、それは、ナンセンスな選択です。フィルター機能だけなら、リスト・オブジェクトである必要はありません。リスト・オブジェクトは、Excelの絶対的な機能にはなりえないわけです。 基本的に仕様そのものを変えたいという質問は、ほとんど成功しません。 今回は、設定すら分からないということでしたので、残念ですが、これ以上、こちらが話を続けても難しいように思います。それに、基本的に、私は、イレギュラーなものは、お勧めしません。今のご質問者さんが、何が、レギュラーで、何がイレギュラーであるか、まだ分からないとは思いますが……。

p_man001
質問者

お礼

回答ありがとうございました。 リストには直接入力させず、他で入力した内容を反映させる方法を考えてみたいと思います。 いろいろありがとうございました。

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

このまま尻尾をまいてしまうのは、一応、マクロの常連回答者としては、また、本意でもありません。このマクロは、空いている部分以外は、全部、セルがロックしてしまうものです。つまり、一旦入力したら修正が利きません。ご質問内容をそのまま反映すると、そういうことになるはずでず。 そのため、修正する場合は、LockedPr1というマクロが必要になります。必ず、最後のセルが空白が空くようになり、また、そのセルは、ロックがされていません。次に入力しようとすると、その入力したセルはロックされてしまいます。かなり、変則的なマクロです。 左側の列には数式があるという条件が必要だと思います。ワンセルずつ、間違いないように入力します。 'ThisWorkbook モジュール(必ず、この設定が必要です) Private Sub Workbook_Open()  With Worksheets("Sheet1") 'シートを指定   .Protect, UserInterfaceOnly:=True  'マクロの実行を許可  End With End Sub ''シートモジュール Private Sub Worksheet_SelectionChange(ByVal Target As Range)  Dim r As Range  Dim r1 As Range  Dim col As Integer  On Error Resume Next  With Me.ListObjects(1)   Set r = Intersect(Target, .Range)   col = .Range.Columns.Count   Set r1 = .Range.Rows(.Range.Rows.Count)   Application.EnableEvents = False   Me.Unprotect   .Range.SpecialCells(xlCellTypeBlanks).Cells.Locked = False   .Range.SpecialCells(xlCellTypeConstants).Cells.Locked = True   .Range.SpecialCells(xlCellTypeFormulas).Cells.Locked = True   Me.Protect   Application.EnableEvents = True   On Error GoTo 0   If Not r Is Nothing And col = Application.CountA(r1) Then    Me.Unprotect    Application.EnableEvents = False    .ListRows.Add    Application.EnableEvents = True   End If   Set r = Nothing: Set r1 = Nothing   Me.Protect  End With End Sub 'おまけ Sub LockedPr1()  '保護と修正(トグル)  If Me.ProtectContents Then    Application.EnableEvents = False   Me.Unprotect   MsgBox Me.Name & " を保護を解除しました。", vbExclamation  Else   Application.EnableEvents = True   Me.Protect   MsgBox Me.Name & " を保護しました。", vbInformation  End If End Sub

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.5

そうですね。。。 >リスト内でも入力する列と計算式が入っている列があります。 >入力して貰う項目以外は変更できない様にする方法は無いでしょうか 現時点では原則として,そういう方法は無いと考えてください。 例えばリストの自動延長や行削除に伴い,数式列には自動で式が投入されたり削除されます。そういう「望ましい形で式が記入されたセルが変更される」のと,あなたが恣意的に「望まない式の変更」を区別する方法を,いまの曖昧なご相談の中ではマクロにすることができません。回答の投げかけに対して,手抜きして適切なレスポンスも無いことも,間違いなく解決を遠くしている要因の一つです。 先の回答でも >使っていく内にまた違う+αの事がやりたくなるかもしれません。その時は適宜自力で改修してみてください。 と,事前にお話ししておきました。 実際の所先の回答も半分は,ご相談の事をとりあえず実現するだけでもこれだけ大変(イミフメイな事をしないとならない)ですよ,という事を実証するために提示したモノです。 ご自身で今後更に勉強を進め,将来のお仕事に役立てるようスキルアップしていけば,あなたが実際に目にしている片付けなければイケナイ仕事にきっちりと即した形であなたがご自分でマクロを検討することで,多分道は開けると思います。 それまでは今時点で実現出来た範囲で諦めるか,または全く手が出ないと全部を諦めて,とりあえず目前のお仕事を片付けてください。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#3の回答者です。 #3のコードで何も言わなくても分かるレベルの内容だと思いましたが、何もコメントがないようですから、使い方を書いておきます。ただ、このような初歩的な内容で、使用法まで書くというのは、私の本意ではありません。 // リストの範囲に、クリックすれば、シートの保護は外れます。しかし、それ以外の部分を触ると、シートは保護されてしまいます。マクロに関しては、ProtectメソッドのInterFaceOnly モードにより、別途VBAから起動されるマクロが可動になっています。 // 一応、ご質問要件に満たしているかとは思いましたが、こちらの解釈しているものと、あまり違う反応を示すようでしたら、お答えできなくなることもあります。

p_man001
質問者

補足

回答ありがとうございます、返事が遅くなってしまいました。 当方、マクロ、VBAは全くの初心者です。 年末に知人よりツールの作成を依頼され、仕事で少しは使ったことのあるExcelで作成を始めました。 マクロ、VBAは関連の本を数冊借りてきて読んでいるところです。 今回教えていただいたマクロの設定についても ANo.2の方の説明が無ければどこに設定すればいいのやら分からないところです。 正直、リストの内容についてもよくは分かりません。 教えていただいたマクロの設定を行ったのですが、リスト内へのデータ追加や修正は出来るのですが、触らせたくない列にはプロテクトがかからないようです。 これは設定が悪いのでしょうか、それとも無理なのでしょうか。(リスト内に保護項目を設けること)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

必要に応じて、パスワードを入れてください。 'ThisWorkbook モジュール(起動時に設定) Private Sub Workbook_Open()  With Worksheets("Sheet1") 'シートを指定   .Protect, UserInterfaceOnly:=True  'マクロの実行を許可  End With End Sub 'シートモジュール Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim r As Object  On Error Resume Next  Set r = Intersect(Target, Me.ListObjects(1).Range)  On Error GoTo 0  If Not r Is Nothing Then    Me.Unprotect  Else    Me.Protect  End If End Sub

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

シート保護すると,無条件にリストのいろんな機能が停止されますね。 >リストへレコード追加やマクロ実行時が出来て、ユーザーには関係のない項目を触らせなくする 1.マクロを有効にしてエクセルとブックを開く 2.問題のシートのシート保護を停止する 3.シート名タブを右クリックしてコードの表示を選び,現れたシートに下記をコピー貼り付ける Private Sub Worksheet_Change(ByVal Target As Range)  Dim O As ListObject  Dim r As Range  For Each O In ListObjects   If r Is Nothing Then    Set r = O.Range   Else    Set r = Union(r, O.Range)   End If  Next  On Error Resume Next  If Application.Intersect(Target, r).Address <> Target.Address Then   Application.EnableEvents = False   Application.Undo   Application.EnableEvents = True  End If End Sub ご質問でやりたかったリスト範囲に追加できます。リスト範囲外は編集できません。 簡易なマクロなので,使っていく内にまた違う+αの事がやりたくなるかもしれません。その時は適宜自力で改修してみてください。 #シート上にリストが1つしかない限定条件なら,サンプルのマクロの前半部分は省略できます。勉強してみてください。

p_man001
質問者

補足

回答ありがとうございます。 内容はよく分かりませんがやってみました。(^^; リストへのデータの追加ができ、それ以外の項目に入力が出来なくなりました。 だた、リスト内でも入力する列と計算式が入っている列があります。 入力して貰う項目以外は変更できない様にする方法は無いでしょうか。

  • wret615
  • ベストアンサー率34% (133/386)
回答No.1

マクロの記録でシートの保護解除とかシートの保護とかやってみると、ヒントがつかめるんでね?「.Unprotect」とか「.Protect」とかな。

関連するQ&A

  • エクセル2010のシート保護マクロについて

    すべてのシートを保護してくれるマクロを教えてほしいのですが、機能として 「ロックされていないセル範囲の選択」と「セルの書式設定」の二つの機能を許可したものを教えてください。また、逆にすべてのシートの保護を解除するマクロもお願いします。 エクセル初心者のため、見当はずれなことを聞いていたら申し訳ありませんが、いくら探しても上記のようなものを探すことができず、、、。シートが80ほどあるもので、困り果てています。 よろしくお願いします。

  • シートの保護

    いつも助かっています。 エクセル2003です。「ツール」-「マクロ」でデーターの移動をさせています。 今度、必要な元表のセルだけロックをはずし、シートに保護をかけました。 そして、いままでようにマクロをかけましたが、うまくいきません。ラジオボタンも保護から はずすには? 保護されたシート内でマクロをする手順は? よろしくお願いします。

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

    エクセルの「シートの保護」について教えてください。 特定のシートのみ、保護したいと思っています。 そのシートの一定の範囲には、入力のみを許可したいです。 というのも、他の範囲(保護したい範囲)には、数式やvbaが設定されており、むやみやたらに「切り取り」や「行や列の削除」をされると困るからです。 そこで、 入力を許可する範囲を選択 →セルの書式設定 →保護のロックを外す →シートの保護 →「ロックされていないセル範囲を選択」を選択 しました。 この状態でマクロを実行すると、エラー1004(保護されたシートに対してこのコマンドは使用できません)とエラーが出ました。 エラー箇所は以下のとおりです。 Intersect(Worksheets("sheet1").Range("C5").CurrentRegion, Worksheets("sheet1").Rows("5:65536"), Worksheets("sheet1").Columns("C:T")).Select (質問1) ロックを外し、その後にシートの保護をする際、「全範囲を選択してから」シートの保護を行うものなのでしょうか。 それともシートの保護をすれば、自動的に、ロックを解除した範囲以外(全範囲)で保護したことになるのでしょうか。 「全範囲を選択してから」シートの保護をすると、ロックを外したセルを選択しても、アクティブセルが罫線で囲われずどこを選んでいるのか分からなくなってしまったので。 もし、あえて全範囲を選択する必要がないなら、それでいこうと思っています。 (質問2) 上記エラーを解消するには、どうしたら良いのでしょうか。 全範囲を選択できないように保護していることが原因かと思い、全範囲について「シートの保護→ロックされたセル範囲の選択」を選んでもエラー解除できませんでした。 また、Intersect.Selectの一行上に「ThisWorkbook.Unprotect」と追加しても解除できませんでした。 2つも質問して申し訳ありませんが、ご存知の方はご教授お願いします。 よろしくお願いします。

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

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

  • EXCEL保護シートで、Σを使いたい。

    EXCEL2002のシートに保護をかけた時に、Σがグレーアウトして表示されません。 表示させるには、どのようにすればよいでしょうか? Σを入力するセルは、ロックをかけておらず、タテ(列)の合計を計算させます。 保護されたシートのすべてのユーザーに許可する操作は 「ロックされたセル範囲の選択」「ロックされていないセル範囲の選択」「セルの書式設定」「列の書式設定」「行の書式設定」「行の挿入」「行の削除」「並べ替え」にチェックをいれています。

  • エクセルシートの保護

    エクセルのシートに保護をかけたいのですが、 シートの中に、チェックボックスがあります。 チェックボックスの「コントロールの書式設定」で 「ロック」のチェックをはずしても、 シートの保護をかけると、チェックボックスにも保護がかかってしまいます。 シートの保護をかける時、 「データー」のチェックをはずすと、 チェックボックスにもチェックが入れられるようになるのですが、 それでは、他のセルにも入力が可能になってしまいます。 つまり、シート全体に保護をかけたいし、 当然、チェックボックスの機能も使いたいのですが、 セルの書式設定にある保護と フォーム・コントロールの書式設定にある「ロック」「文字列のロック」を、 どのように組み合わせればよいのでしょうか? そもそも、シート全体に保護をかけたいし、 チェックボックスの機能も使いたいのは、 可能なのでしょうか?

  • Excel シートの保護機能について

    Excel2003を使用しています。 シートの保護機能について、教えてください。 ユーザによるセル内の入力・編集・削除の作業は許可させたいのですが、 行の追加・削除は許可させないようにしたいと思っています。 「ツール」の「保護」機能を利用すると、行の追加・削除の制御は出来るのですが、 セル内への入力・編集もできなくなってしまいました。 制御できないことはないと思うのですが、可能でしょうか? マクロで作成したExcelファイルがあり、定形の形から崩れてしまうとプログラムが おかしくなってしまう為、上記のような制御を行いたいと思っております。 ユーザには、入力・編集作業+マクロの実行のみ、行わせたいと思っています。 よろしくお願いいたします。

  • エクセルシートの保護、マクロについてお願いします!

    はじめまして。 マッサージ店の集計表をエクセルで作りました。 いろいろなスタッフが入力する為、計算式を入れたセルを消してしまったりして、 集計が狂ってしまうので困っています。 エクセル初心者なので説明がわかりにくいと思いますが、よろしくお願いいたします。 内容は、まずはシートごとに 集計、プルダウン用、1日、2日・・・31日 と分かれています。 日付シートにはプルダウンでスタッフや、コースなど選択できるようにしてあります。 集計、プルダウン用シートから各日付シートにリンクしています。 日付シートで入力するセルはセルの保護のロックを解除して、シートの保護をすれば大丈夫なのですが、 力の項目も結構数があるので、相当時間がかかりそうなのです。 マクロなど使い一気にまとめて、セルの保護のロック解除、シートの保護ができないものなのでしょうか? 説明が不十分でしたら、できる限り説明させていただきます。 是非ともよろしくお願い致します。

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

    今、エクセル2003でワークシートのデータを変更できないように、 シートの保護を設定しているところを今勉強しています。 ただ、あるセル範囲だけ、たとえばB4からD6の範囲は編集できるようにしたいのです。 それで、B4からD6の範囲は書式メニュー→セルの保護タブで、 ロックチェックボックスをオフにしました。 それから、ツール→保護→シートの保護で、シートを保護しました。 この時、B4からD6の範囲は、ロックをオフにしたので、 編集可能になるはずですよね? だけど、B4からD6の範囲意外のセルと同様、 セルの書式を変更できないんです。 これだったら、B4からD6の範囲のロックをオフにした意味が ないんじゃないでしょうか? ロックをオフにするとどう違うのでしょうか? よろしくお願いします。

  • Excelのシート保護について

    Excelで式を設定している行を保護するため「シート保護」をしてあります。但し、シート保護時に「行挿入」「行削除」は許可にしているのですが、次の操作がうまくいきません。  ・単純な行挿入はできますが、行削除ができない。  ・ある行をコピー後、挿入ができない。 行の中には入力してもいいセルが有るので、ロックをかけているセルと、かけていないセルがあります。 何か解決方法がありましたらご教授お願い致します。

専門家に質問してみよう