• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excelで書込禁止メッセージを指定したセル以外で出したい)

Excelで書込禁止メッセージを指定したセル以外で出したい

fumufumu_2006の回答

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

こんなのはどうでしょうか? Private Sub Workbook_Open() Sheet1.EnableSelection = xlUnlockedCells End Sub とかしておくと、保護されていないセルしか移動しなくなります。

HARRYDASU
質問者

お礼

回答ありがとうございました。 いろんなやり方があるのですね。 家のパソコンは、古くて、保護中の許可ができないので、 年明けにやってみます。 勉強になりました。 今回は、とりあえず、細かくカンマで区切って、 表示する場所を設定する方法がわかりました。 If Application.Intersect(Target, Range("A1:IL5,A6,B6,E6,H6:IL6,A7:IL100")) Is Nothing Then ありがとうございました。

関連するQ&A

  • 空白状態でEnterを押したら指定のセルに飛びたい

    例えばF5セルで何も入力せずEnterを押したらC9に入力セルを飛ばしたくて 自分の力で調べた限りでは下のコードで可能なのですが Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Range("F5,C9") If Not Intersect(Target(1), .Cells) Is Nothing Then Application.EnableEvents = False .Select Target(1).Activate Application.EnableEvents = True End If End With End Sub 上記コードはF5セルを選ぶと、次に飛ぼうとするC9セルが見えてしまいます。 これが見えずにできる他の方法があるか色々調べても見つかりませんでした; 何か可能な策はありますでしょうか・・?

  • エクセルで指定したセルへカーソルを移動させる

    エクセル2007で セル”I1”に文字を入力してエンターを押したら、“B11”へセルを移動させたく、 以下のように作ってみたのですが、 反応してくれません。 このVBAもインターネット上にあったものを参考にしただけなので、 何が悪いのかさっぱりわかりません。どこを修正したらよいのか教えてください。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Select Case Target.Address(0, 0) Case "i2" [b11].Select End Select End Sub

  • Excel VBAでメッセージとセル選択のループを回避したい

    Excel VBAでメッセージとセル選択のループを回避したい 初歩的な質問ですみません。 セルA1で入力規則のリストから"重要"が選択されたらメッセージボックス「重要です」を表示し、離れた複数セル(D4,F7など10カ所ほど)の枠線を太く、A1が"重要"以外になったら枠線を細くします。複数セルは名前の定義で「重要項目」とし、下のコードで一応できました。 でも、「重要項目」のセルに入力Enterするたびにメッセージが表示されてしまい、「重要項目」が選択されたままです。 メッセージはA1が"重要"になるごとに一度だけ表示し、セル選択は元の位置に戻したいのです。 バージョンはExcel2003です。よろしくお願いします。 -------------------------------------- Private Sub Worksheet_Change(Byval Target As Range) If Range("A1") = "重要" Then MsgBox "重要です" Range("重要項目"). Select Selection. BorderAround Weight = 4 Else If Range("A1") <> "重要" Then Range("重要項目"). Select Selection. BorderAround Weight = 2 End IF End Sub

  • エクセルで、次のセルに飛ぶには その2

    以前ここで「次のセルに飛ぶように」を聞いたものです。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=746815 austin32さんのロックをはずしてシートに保護を かけるやり方は上から順になってしまうために 自分の思い通りの順番に飛んでくれませんでした。 imogasiさんのVBAをAlt+F11でVisualVasicを開いて コピペしてやってみましたが文字を入力してエンターを押すと 「$A$1」というメッセージが出てきて、OKを返すとC3のセルに移動します。 Private Sub Worksheet_Change(ByVal Target As Range) a = Array("$A$1", "$C$3", "$C$6", "$A$6", "$A$1") MsgBox Target.Address For i = 0 To UBound(a) - 1 If Target.Address = a(i) Then Range(a(i + 1)).Select End If Next i End Sub どのようにすればいいのでしょうか? どうすれば自分の思い通りの順番に飛んでくれるようになりますか? またこれは簡単に言うとどういうことをしてくれるように 設定したのでしょうか? わかる方がいらっしゃれば教えてください。 補足しますので必ず1日置きにでも回答をしめきってなければ CHECKしてください。お願いいたします。

  • メッセージボックスを表示させるエクセルマクロ

    こんにちは。マクロ初心者です。 エクセル(Excel2003)でメッセージボックスを 表示させるマクロが思うようにいかず困っています。 B列に「○○会社」と入力されれば、 「取引先です。」 とメッセージボックスを表示させたいと思い、 次のとおりマクロを作成しました。 -------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 And Target Like "*会社" Then MsgBox "取引先です。" End If End Sub -------------------------------- しかし、コピーなどで複数のセルを貼り付ける(入力)行為をすると、 「実行エラー'13': 型が一致しません」と出てしまいます。 Worksheet_Change(ByVal Target As Range)を使っているので、 -------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Target.Column = 2 And Target Like "*会社" Then MsgBox "取引先です。" End If End Sub -------------------------------- と、「If Target.Count > 1 Then Exit Sub 」を入れれば、 メッセージは出なくなるのですが、 これだと、A列セルに、コピー&ペーストで複数セルを貼り付けた場合、 「○○会社」があっても、マクロが効いてきません。 複数セルの貼り付けにも対応させるには、 どのようにすればよろしいでしょうか? 基本的なところが理解できていないのだと自覚しておりますが、 どうかご教授願います。 長々とわかりづらい文章ですみません。よろしくお願いします。

  • 「Excelのセルへの入力内容の転記と元の内容への復帰」

    「Excelのセルへの入力内容の転記と元の内容への復帰」 何故それが必要かは別にして、次のようなことがしたい。 ・あるセル(例えばA1)にはある関数(式)が設定されている。 ・いま、セルA1にある値が入力されたとき、 ・その値を別のセル(例えばB1)へ転記(保存)し、 ・セルA1には元の関数に戻す。 これを、VBAで実現するにはどうすれば良いのでしょうか?。お教えください。 changeやselectionchangeイベントなどを使用すると出来そうですが、単純なコーディングではchangeの無限ネスト(無限再帰)となってしまいます。 例えば、次のようなコーディング:セルC1をA1セル選択時の関数保存場所として補助的に使用している。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "A1" Then Range("B1") = Range("A1") Range("A1").Formula = Range("C1").Formula End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "A1" Then Range("C1").Formula = Range("A1").Formula End If End Sub これでは何か発想の転換が必要に思えます。

  • エクセルで特定のセルへの直接入力だけを禁止したいんです。

    過去の質問を参考に『セルをダブルクリックすると"○"と入力される』というマクロを○⇒●⇒-⇒  ⇒○⇒・・・として使っているんですが、ダブルクリックの度にセルが直接入力の状態(縦の棒の点滅)になってしまい、一度他のセルをクリックしないと次へ進めずに困っています。 良い方法ってあるのでしょうか? ちなみに使用しているマクロは Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const rng As String = "A1:A3" '処理対象のセル範囲 If Not Application.Intersect(Target, Range(rng)) Is Nothing Then If Target.Value = "" Then Target.Value = "○" ElseIf Target.Value = "○" Then Target.Value = "●" ElseIf Target.Value = "●" Then Target.Value = "-" Else Target.ClearContents End If End If End Sub というものです。 よろしくお願いします。

  • 特定のセルのカーソル移動

    こんばんは。教えてください。 入力可能なセルが2個だけのエクセルの表があります。 C6には「年」、E6「日付」が入ります。 それ以外のセルに触ると「ここは入力できません」と 表示が出て、C6にカーソルが戻ります。 VBにて作成してあります。 実は、この表は年配のパソコンがほとんど分からない方が 使う表で、保護をかけた時のエラーの長い文章が出ると パソコンが壊れたと思うらしく、わざと、保護はかけずに Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Application.Intersect(Target, Range("A1:IV5,A6,B6,E6,H6:IV6,A7:IV65536")) Is Nothing Then Else MsgBox "「年」と「月」以外の欄には入力できません" Range("C6").Select End Sub と入れて、簡単なメッセージでエラーを伝えるのみで シートの保護はしておりません。 これに追加して、記載することで、 C6のセルに入力後、「enter」を押すとE6にカーソルが移動 E6のセルに入力後、「enter」を押すとC6にカーソルが移動 が出来るようにしたいのです。 つまり、C6に入力したらE6に、E6に入力したらC6にカーソルが 「入力できるセル」だけを行き来したいのです。 どなたか教えてください。 宜しくお願いいたします。

  • Find,Offsetを使ってセルを指定する方法

    エクセルVBAのことで伺います。 以下の記述は、「D3からQ3までのセルの中で「年」と入ったセルの左横のセルを探し、 その中の値(西暦の年が入っています)を、G4からI100までの範囲に入力される月日 の年として置き換える」といったものなのですが、エラーが出てしまいます。 「実行時エラー424、オブジェクトが必要です。」とのメッセージが表示され、デバックを クリックすると、「Set FoundCell = Range("D3:Q3").Find("年").Offset(0, -1).Select」 が黄色く強調表示されています。 プログラムの記述をどのように修正すれば良いか、どなたかお教えください。 よろしくお願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) Dim FoundCell As Range Set FoundCell = Range("D3:Q3").Find("年").Offset(0, -1).Select With Target If Intersect(Target, Range("G4:I100)) Is Nothing Or Target.Count <> 1 Then Exit Sub If IsDate(.Value) Then If Year(.Value) <> FoundCell Then Application.EnableEvents = False .Value = DateSerial(FoundCell, Month(.Value), Day(.Value)) Application.EnableEvents = True End If End If End With End Sub

  • エクセルVBAでTargetのセルに設定された「名前の定義」の取得方法は?

    例えば、A1、B2、C3セルに「名前の定義」で、それぞれ入力A、入力B、入力C という名前がつけてあります。 それらのセルに入力があった場合、Select Caseで分岐させ作動するマクロをつくりました。 簡略化すると以下のようなもので、一応正しく作動します。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("入力A,入力B,入力C")) Is Nothing Then Exit Sub Select Case Target.Address(0, 0) Case "A1" MsgBox "A処理します。" Case "B2" MsgBox "B処理します。" Case "C3" MsgBox "C処理します。" End Select End Sub ただ、せっかくセルに名前を定義してあるのに、個々の入力セルの判定をTarget.Addressでしているのが不満です。 ( ̄~ ̄;) 定義された名前を使えないかと以下のようにやってみましたが実行時エラーで「サポートしてません」となってしまいます。 (T.T) Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("入力A,入力B,入力C")) Is Nothing Then Exit Sub Select Case Target.Names.Name 'ここでエラー Case "入力A" MsgBox "A処理します。" Case "入力B" MsgBox "B処理します。" Case "入力C" MsgBox "C処理します。" End Select End Sub どうやったら、Targetに設定されている名前を取得できるのでしょうか? (^∇^`)? 実際の例はもっと対象が多いので、Select Caseを使わない以下の方法は避けたいのです。 If文の羅列(これでも正しく作動はします。) Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("入力A,入力B,入力C")) Is Nothing Then Exit Sub If Not Intersect(Target, Range("入力A")) Is Nothing Then MsgBox "A処理します。" ElseIf Not Intersect(Target, Range("入力B")) Is Nothing Then MsgBox "B処理します。" Else MsgBox "C処理します。" End If End Sub なにとぞよろしくお願いします。 (o。_。)oペコッ