• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel 選択はできるが変更できないようにしたい)

Excelのセルにフルパス名を表示する方法とセルの編集制限について

このQ&Aのポイント
  • Excelのセルにダイアログボックスで指定したファイルのフルパス名を表示する方法について解説します。
  • セルの中にフルパス名全体が入りきらず、表示が切れてしまう場合の対処法についても説明します。
  • セルの編集を制限してフルパス名の直接編集を防ぐ方法についても紹介します。

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

  • ベストアンサー
回答No.4

(b)は「セルをロックしてシート保護」で出来ます。 なので、aもbもcも同時に実現可能です。

yam2012
質問者

お礼

(b)のセルをロックしてシートの保護をするときに 「ロックされていないセル範囲の選択」だけでなく 「ロックされたセル範囲の選択」もチェックして シートの保護をすることにより (b)のセルを選択できるが編集できないように することができました。 ありがとうございました。

その他の回答 (3)

回答No.3

>a)入力セル以外のセルは「選択も編集もできないセル」 >b)ダイアログの結果を表示する入力セルは「選択はできるが編集できないセル」 >c)上記以外の入力セルは「選択も編集もできるセル」 >にしたかったのですが、 >「ロックされたセル範囲の選択」が、 >チェック状態では、a)が選択できてしまいます。 >未チェック状態では、b)が選択できなくなってしまいます。 >この3つの状態のセルを実現することはできないでしょうか。 a)は可能ですが、VBAでイベントプロシージャを記述する必要があり、非常に複雑になります。 「選択も編集も出来ないセル」は「選択出来ないセル」で充分です。選択出来ない状態では編集は不可能です(編集するには、そのセルを「選択」出来なければならないので) 以下ページの手順に従ってイベントプロシージャを記述する準備をして下さい。 http://kabu-macro.com/word/a-z/selectiion_change.html 上記ページの「これでSelectionChangeを使用する準備が整いました。」の所まで作業したら、以下のコードを入力してみて下さい。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Static LastCell As Range Dim Flags As Boolean Flags = False Flags = Flags Or Not Application.Intersect(Target, Range("A20:C40")) Is Nothing Flags = Flags Or Not Application.Intersect(Target, Range("B20:D30")) Is Nothing Flags = Flags Or Not Application.Intersect(Target, Range("E1:F30")) Is Nothing Flags = Flags Or Target.Row < 10 Flags = Flags Or Target.Column < 5 Flags = Flags Or Target.Row > 200 Flags = Flags Or Target.Column > 20 If Flags = True Then If Not LastCell Is Nothing Then LastCell.Activate Else Set LastCell = ActiveCell End If End Sub この例では「A20~C40」「B20~D30」「E1~F30」「1~9行すべて」「A~D列すべて」「201行以下すべて」「U列以降すべて」の範囲を「選択不可」にしています。 この例を参考に「カーソルを行かせたくない場所すべて」をコードに書いて下さい。 例えば「A4」「B8」「C10~D12」の3箇所を「選択出来ない場所」にしたい場合は Private Sub Worksheet_SelectionChange(ByVal Target As Range) Static LastCell As Range Dim Flags As Boolean Flags = False Flags = Flags Or Not Application.Intersect(Target, Range("A4")) Is Nothing Flags = Flags Or Not Application.Intersect(Target, Range("B8")) Is Nothing Flags = Flags Or Not Application.Intersect(Target, Range("C20:D20")) Is Nothing If Flags = True Then If Not LastCell Is Nothing Then LastCell.Activate Else Set LastCell = ActiveCell End If End Sub のようにします。 また「2行目と4行目」と「101行目以降」を「選択出来ない場所」にしたい場合は Private Sub Worksheet_SelectionChange(ByVal Target As Range) Static LastCell As Range Dim Flags As Boolean Flags = False Flags = Flags Or Target.Row = 2 Flags = Flags Or Target.Row = 4 Flags = Flags Or Target.Row > 100 If Flags = True Then If Not LastCell Is Nothing Then LastCell.Activate Else Set LastCell = ActiveCell End If End Sub のようにします。 なお、このプログラムは「シートの保護」や「セルのロック」とは無関係に動作します。 ですので、一旦、このプログラムを組み込むと「選択禁止にしたセルを、2度と選択出来なくなる」ので注意して下さい。 「選択禁止にしたセルの値を修正する必要が出た」などで、このプログラムを無効にしたい場合は Private Sub Worksheet_SelectionChange(ByVal Target As Range) Static LastCell As Range Dim Flags As Boolean 'このプログラムを無効にする命令 Exit Sub Flags = False Flags = Flags Or Not Application.Intersect(Target, Range("A20:C40")) Is Nothing Flags = Flags Or Not Application.Intersect(Target, Range("B20:D30")) Is Nothing Flags = Flags Or Not Application.Intersect(Target, Range("E1:F30")) Is Nothing Flags = Flags Or Target.Row < 10 Flags = Flags Or Target.Column < 5 Flags = Flags Or Target.Row > 200 Flags = Flags Or Target.Column > 20 If Flags = True Then If Not LastCell Is Nothing Then LastCell.Activate Else Set LastCell = ActiveCell End If End Sub のようにコードを書き換えてからセルを編集して下さい。

yam2012
質問者

お礼

教えていただきました方法で、 指定したセルは選択と編集はできなくなり(c)、 指定したセル以外は選択と編集ができる(a)ようになりましたが、 この状態で、選択はできるが編集ができないセル(b)も 混在させることは無理ということですね。 ありがとうございました。

回答No.2

追記。 「シートの保護」を行なう際に「ロックされたセル範囲の選択」のチェックは「外さない」で下さい。外すと「選択不可」になって「数式バーで値を見る」のが出来なくなります。

yam2012
質問者

お礼

回答ありがとうございます。 「特定のセルを編集禁止」すると、 「ロックされたセル範囲の選択」を未チェックにして 「シートの保護」をした時は、ロックされたセルはすべて 編集禁止になり、セルの選択ができなくなってしまいます。 「ロックされたセル範囲の選択」をチェックにして 「シートの保護」をした時は、ロックされたセルはすべて 編集禁止になり、セルの選択ができてしまいます。 質問の内容の表現があまりよくなかったのですが、 したかったことは、 ダイアログボックスで選択したフルパスを表示するセルは、 編集できないが選択できるようにして、 ダイアログボックスで選択したフルパスを表示するセル以外の ユーザーが入力するセルは、 選択も編集もできるようにしたかったのですが 可能でしょうか。

回答No.1

ご参考。 http://www.atmarkit.co.jp/ait/articles/0709/28/news153.html 上記の方法で「特定のセルを編集禁止」にします。 なお「マクロ等でセルに値をセットする際」には、マクロで「シートの保護の解除」をした上で値をセットし、値のセットが終わったら、マクロで「シートの保護」をやり直すようにして下さい。 シートが保護された状態で、セルがロックされている時は、手動で値を書き換える事は出来ないのはもちろん、マクロ等を使った場合もセルに値をセット出来ません。

yam2012
質問者

お礼

回答ありがとうございます。 質問の内容の表現があまりよくなかったのですが、 a)入力セル以外のセルは「選択も編集もできないセル」 b)ダイアログの結果を表示する入力セルは「選択はできるが編集できないセル」 c)上記以外の入力セルは「選択も編集もできるセル」 にしたかったのですが、 「ロックされたセル範囲の選択」が、 チェック状態では、a)が選択できてしまいます。 未チェック状態では、b)が選択できなくなってしまいます。 この3つの状態のセルを実現することはできないでしょうか。

関連するQ&A