こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

入力後enterを押すと、非保護の別セルへ移動したい。(エクセル)

エクセル2000での質問です。

入力用シートと印刷用シートを作りました。
入力シートは、数個の入力欄のセルのロックのチェックボックスを外してシート保護しました。

tabキーで次の入力セルに選択セルが移動するようになりました。

入力欄(セル)に文字や数値を入力後、enterを押すと、次の入力欄に移動するにはどうすればよいのでしょうか?

今は、enterを押すと、保護されている使用しない下のセルに移動します。

週個の入力欄(セルは)隣接しておらず、シート上にまばらに配置してあります。

教えてください。よろしくお願いします。

投稿日時 - 2004-10-28 16:57:10

QNo.1060134

fsy

暇なときに回答ください

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

シートの保護で開くダイアログの「このシートのすべてのユーザーに許可する操作」の「ロックされたセル範囲の選択」のチェックを外しても可能です。
(EXCEL2002です)

投稿日時 - 2004-10-28 17:53:31

お礼

ありがとうございます。エクセル2000を使用しています。
「ツール」→「保護」→「シートの保護」→?
せっかく教えていただいたのにスミマセン。。

投稿日時 - 2004-10-29 09:19:11

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.8

No.7補足
私も投稿してから気づいたので対処方法を考えていましたが、よい方法が見つかりませんでした。重ね重ね申し訳ありません。
なお、No.4の方の方法なら動きそうですがセル内容を更新したときだけに有効になります。単純にenter押下時は機能しませんでした。

No.3の方法に関して
セルアドレスを複数行に記述したい場合は

.Range("A1,A2,A3," _
& "A4," _
& "A5").Locked = False '←""内に移動したいセルを記入

となります。見やすく工夫する場合は
const MyRnage="A1,A2,A3," _
& "A4," _
& "A5"

.Range(MyRange).Locked = False

移動したいセル群に範囲名(例えば移動セル)をつけ、No.3を以下のように変える方法もあります。

Sub 入力限定()
  With ActiveSheet
     .Unprotect
     .Cells.Locked = True
     .Range("移動セル").Locked = False '←""内に移動したいセルを記入
     .Protect
     .EnableSelection = xlUnlockedCells
  End With
End Sub

投稿日時 - 2004-11-02 14:30:21

お礼

返事が遅くなり失礼しました。
後半の方式は良いですね。同じ結果を出す方法も色々あるんですね。

No.2の方法も便利ですね。アップグレードしようかなぁ。(なんか金で解決するようで情けないカモ)

ありがとうございました。

投稿日時 - 2004-11-04 12:50:03

ANo.7

EXCEL2000では使えない回答をしてしまい申し訳ありません。
また、EXCEL2002での検証しかしておりませんがVBAでの方法を考えてみました。
・本方式では、セル/シートのロックは不要です。(してもらってもOK)
・移動先の順序を指定可能です。
・移動可能セル以外をマウスでクリックすると最初のセルに戻ります。

案 入力シートのシートモジュールとして以下を定義します。
VBEのプロジェクトエクスプローラ(通常は左側ウィンドウ)で目的の
シート名をダブルクリックして開く右側のウィンドウに書き込む。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

' 移動先のセルアドレス(順序)
Const MyRange = "A1,A2,A3," _
& "B1,C1,D1," _
& "D2,C2,B2," _
& "B3,C3,D3"

MyRangARY = Split(MyRange, ",")
mycelladr = Target.Offset(-1, 0). _
Address(ColumnAbsolute:=False, RowAbsolute:=False)
n = 0
For i = 0 To UBound(MyRangARY)
If mycelladr = MyRangARY(i) Then
n = i + 1
Exit For
End If
Next
If n > UBound(MyRangARY) Then n = 0

Application.EnableEvents = False
Application.Goto Range(MyRangARY(n))
Application.EnableEvents = True

End Sub

念のため、マクロを止めたい時のために標準モジュールも準備します。
Sub マクロ無効化()
Application.EnableEvents = False
End Sub

Sub マクロ有効化()
Application.EnableEvents = True
End Sub

投稿日時 - 2004-10-30 19:02:54

お礼

ありがとうございます。
ひとまず教えていただいたマクロを動作確認しました。
エンターで次のセルに移動しますが、矢印キーで一つ前のセルに戻ろうとすると、エラーになってしまいました。
これからじっくり勉強しながら解いていきます。本当にお世話様でした。

投稿日時 - 2004-11-02 13:48:25

ANo.6

>何行かに分けて記述するのでしょうか?分けてみたのでうが分け方が違うらしく同じくエラーでした。
あれ?エラーでしたか?
一度、コピペでそのまま試してもらえませんか?

>・記述するセルの順番がそのまま移動する順番になるのでしょうか?
いえ、左上から右下の方向に移動します。

>・このマクロを使用する場合でも、入力セルのロック解除は必要ですよね?
不要です。それをマクロがやってくれます。

投稿日時 - 2004-10-30 18:38:25

お礼

お礼が遅くなりスミマセン。
動作しますが、自分の作業用シートに応用するとエラーします。
現在、マクロを勉強中ですので、基本的な構文を理解していない私のせいでしょう。もう少し勉強を進めた上で参考にさせていただきます。ありがとうございました。

投稿日時 - 2004-11-02 13:36:20

ANo.5

No.2補足回答

質問文にある「入力シートは、数個の入力欄のセルのロックのチェックボックスを外してシート保護しました。」のシートを保護する時の話です。

「ツール」→「保護」→「シートの保護」で“シートの保護”というダイアログが開くと思います。このダイアログには
1)「シートとロックされたセルの内容を保護する(C)」というチェックボックス
2)「シートの保護を解除するためのパスワード(R)」というテキストボックス
3)「このシートのすべてのユーザーに許可する操作(O)」というチェックボックス群
があると思います。
3)のチェックボックス群の一番上に「ロックされたセル範囲の選択」というチェックボックスがあるはずなんです。デフォルトではチェックが入っていますので、このチェックを外してください。そうするとロックされていないセルにしか移動しなくなります。
ただしEnter押下時に下方向に移動する設定の場合に次の移動先は現在のセルから下方向に探し、なければ次の列を探すことになります。不都合でしたら、ツール→オプションの編集タグのところにある入力後にセルを移動する方向で調整して下さい。

投稿日時 - 2004-10-29 11:39:02

お礼

ありがとうございます。
職場にエクセル2002があるので確認しました。
「シートの保護ダイアログ」がエクセル2000と結構違います。。

入力セルの移動する順番を変則的にしたい場合でなければ、この方法は簡単で有効ですね。
(2002で設定して、2000で開いて同じ状態になるかなぁ?)

投稿日時 - 2004-10-29 15:27:46

ANo.4

VBAなら
ワークシートのChangeイベントに下記を貼りつける。
Private Sub Worksheet_Change(ByVal Target As Range)
p = Array("$A$1", "$C$1", "$B$3")
q = Array("$C$1", "$B$3", "$A$1")
For i = 0 To UBound(p)
If Target.Address = p(i) Then
Range(q(i)).Select
Exit Sub
End If
Next i
End Sub
これで、A1->C1->B3->A1にENTERで動きます。
A1,C1,B3以外を保護してテストしてOKでした。
Pの()内に「From」、Qの()内に「To」を同じ位置にペアーで増やしていけば、相当数のセルの入力順序を制御
出来ます。

投稿日時 - 2004-10-28 19:18:33

お礼

勉強になりましたありがとうございます。
ご教示いただいた例に質問したい点もたくさんありますが、自分でも調べていこうと思います。

投稿日時 - 2004-11-04 12:52:15

ANo.3

VBAは分かりますか?
以下のVBAを実行すれば,設定したセル以外は移動しません。
#1さんの方法でも可能ですが,矢印キーを押したり,マウスで別のセルをクリックすると元に戻ってしまいますが,このVBAを実行すれば,別のセルをマウスでクリックしても移動すらできませんリターンキー,TAGキーだけでなく矢印キーでも使用可能です。

なお,一度実行しておけばOKです。

Sub 入力限定()
  With ActiveSheet
     .Unprotect
     .Cells.Locked = True
     .Range("A1,A2,A3").Locked = False '←""内に移動したいセルを記入
     .Protect
     .EnableSelection = xlUnlockedCells
  End With
End Sub


元へ戻すには
Sub 入力限定解除()
  With ActiveSheet
     .Unprotect
     .Cells.Locked = True
     .EnableSelection = xlNoRestrictions
  End With
End Sub

投稿日時 - 2004-10-28 18:04:23

補足

ありがとうございます。

・実際は、入力シートに入力するセルは52個もあります。
構文が分かりません。全部記入したらエラーになってしまいました。
 何行かに分けて記述するのでしょうか?分けてみたのでうが分け方が違うらしく同じくエラーでした。

・記述するセルの順番がそのまま移動する順番になるのでしょうか?

・このマクロを使用する場合でも、入力セルのロック解除は必要ですよね?

スミマセン。お時間がありましたら教えて下さい。

投稿日時 - 2004-10-29 09:20:50

ANo.1

セル範囲を選択しておくと、Enterで選択範囲内だけを移動する事はご存知ですか?
これを利用して、
・非保護セルをすべて選択
・挿入→名前→定義
・名前:入力セル(←任意)
・追加→閉じる
として、入力開始時に、数式バーの左の、セル位置が表示されているところで、「入力セル」を選んでおくと、ご希望の動作になります。
これが面倒であれば、VBAでマクロを書くしかないかも・・・

頑張ってくださいヽ(^。^)ノ

投稿日時 - 2004-10-28 17:43:42

お礼

ありがとうございます。
エクセルに詳しい方のマクロを使わないテクニックですね。参考になります。 只今、勉強中です。がんばります。

投稿日時 - 2004-10-29 09:16:01

あなたにオススメの質問