Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
シートの特定列を更新禁止、かつ、フィルタ機能を使えるようにしたい
投稿日時: 22/06/16 13:10:14
投稿者: よしあき

<やりたいこと>
シートの特定の列を更新禁止する運用、かつ、フィルタ機能を使えるようにしたい
<現状>
・上記を実現するために、
 更新禁止する列を選択⇒セルのロック⇒シートの保護設定⇒許可する操作で「オートフィルタを使用する」  
 にチェックを入れてシートの保護設定をする
・上記を設定しても、フィルターの「詳細」はクリック出来ますが、フィルター(じょうろのようなアイコン)そのものはクリックできません。<やりたいこと>を実現する良い方法はないでしょうか。

回答
投稿日時: 22/06/17 06:39:48
投稿者: simple

既にヘルプ内容の紹介があり、それ以上のことはないのですが、念のため。
 
そこに記載のとおり、「許可するユーザーの操作」の説明として、

引用:
オートフィルターの使用
オートフィルターが適用されているときに、範囲のフィルターを変更するために
ドロップダウン矢印を使うこと。
注: ユーザーは、この設定に関係なく、保護されたワークシートでオートフィルターを
適用または削除できません。
とされています。
 
ちなみに、デフォルトではすべてのセルにロックが掛かっています。
そのあたり誤解が無いようにしてください。

投稿日時: 22/06/17 07:29:17
投稿者: よしあき

taitaniさん、simpleさん 
早速のご回答ありがとうございます。
 
>予めオートフィルターを設定してから、保護機能を設定してください。
これをやってみているのですが、列見出しの▽を押しても「(すべて表示)」しか出てこず、キーワードを選択して絞り込むことができないのです。
 
>ちなみに、デフォルトではすべてのセルにロックが掛かっています。
以下の動きをするので、ロックの設定(解除)はうまくいっているように思われます。
 ・更新禁止したい列に入力すると「更新できません」のメッセージが出る
 ・それ以外の列には普通に入力できる
 
ご教示して頂いた点を含め、もう少しもがいてみます。

回答
投稿日時: 22/06/17 08:05:41
投稿者: simple

再現しませんね。
 
保護関係なしとして、うまく動作したんですか?
フィルタの対象が一行だけ(見出しだけ)になっていませんか?
見出しの次の行が空行になっていたりするとこうなりますね。
そういう場合は、対象セルを選択した状態でオートフィルタを掛けるとよいと思います。
 
# VBAと縁遠い話になりましたねえ。

回答
投稿日時: 22/06/17 09:32:05
投稿者: kin_atsuko

シートにイベントで規制をかけておくのはどうでしょう。
 

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Column = 2 Then
        Application.Undo
    End If
    Application.EnableEvents = True
End Sub

	名前	点数
1	a	80
2	b	78
3	c	98
4	d	65
5	e	81
6	f	86
7	g	90
8	h	68
9	i	50
10	j	97

これならフィルターも使えるのでは。

投稿日時: 22/06/20 08:21:36
投稿者: よしあき

simpleさん、taitaniさん、kin_atsukoさん
 
オートフィルターの設定とシートの保護設定(AllowFiltering=Trueを指定)を
すべてVBAで行うことで、うまくいきました。
お騒がせしました。いろいろとアドバイスありがとうございました。
 
 <うまくいったVBAコーディング例>
   If .AutoFilterMode = False Then
    .Range("A2").AutoFilter 'オートフィルターの設定
       .Protect Password:="XXXXXX", AllowFiltering:=True 'シートの保護
    End If