[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『EnterやTabで指定したセルだけに移動する方法』(ki)
入力するセルが既に決まっているので、他のセルにはEnterやTabを押しても
とばされる様にしたいのですが、何かいい方法はありますでしょうか?
2002ですと「ロックされたセルの選択不可」をシート保護で設定できます。 2000でもVBAとの組み合わせで出来ます。 ですから、バージョンを記入しましょう〜。 (KAMIYA)
まず、移動させたいセルのロックをはずしておきます。 (セルの書式設定、ロックのチェックをはずす) 続いて シートの見出しを右クリック、「コードの表示」を選択、 左側のThisWorkBookをダブルクリックして下記のコードを 右側のコードウィンドウへコピペします。 Private Sub Workbook_Open() With Worksheets("Sheet1") .EnableSelection = xlUnlockedCells .Protect Contents:=True End With End Sub いったんブックを保存して再度ブックを開くと有効になります。 これだと ↓ /↓ /↓ ↓/ ↓/ というカーソル送りになるので、 →→→ / / →→→ という送りの場合は 下記のコードのほうが良いかもしれません。 Private Sub Workbook_Open() With Worksheets("Sheet1") .EnableSelection = xlUnlockedCells .Protect Contents:=True, UserInterfaceOnly:=True End With Application.MoveAfterReturnDirection = xlToRight End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.MoveAfterReturnDirection = xlDown End Sub (KAMIYA)
ただ、欲を言えばなんですが…
↓ /↓ /↓
↓/ ↓/
上記の様なカーソル送りになる方で良いのですが、
その移動するセルの順番を指定する事は不可能でしょうか?
何度も無茶な質問ですみません。。
「良くある相談」なので、過去レスにも同様のものがあるかもしれませんが、 練習でつくってみました。 下記のような状況で試しています。 入力用のシートひとつ(Sheet1)、 入力順設定シーとひとつ(Sheet2) Sheet2には入力用シートと同じアドレスのセルへ入力順を記入しておきます。 Sheet1でA1、A2、C1・・・と入力していく場合は Sheet2のA1に1、A2に2、C1に3・・・と入力しておきます。 先ほどのWorkBook_Openを消して下記と差換えます。 Dim C As Range, MyRng As Range Rem 入力シート名 Const MySh As String = "Sheet1" Rem 移動順設定シート名 Const NumSh As String = "Sheet2" Rem 移動順設定範囲 Const Rng As String = "A1:G20" Private Sub Workbook_Open() Set MyRng = Worksheets(NumSh).Range(Rng)
With Worksheets(MySh) .Unprotect .EnableSelection = xlUnlockedCells .Cells.Locked = True For Each C In MyRng If C.Value <> "" Then .Range(C.Address).Locked = False End If Next C .Protect Contents:=True .Activate End With End Sub さらに、入力用のシートのコードとして下記を追加します。 入力用として使用するシートオブジェクトのコードウィンドウへ貼り付けてください。
Dim MyAdr As String Dim MyCount As Long Dim C As Range, MyRng As Range Rem 移動順設定シート名 Const NumSh As String = "Sheet2" Rem 移動順設定範囲 Const Rng As String = "A1:G20"
Private Sub Worksheet_Change(ByVal Target As Range) Set MyRng = Worksheets(NumSh).Range(Rng) MyAdr = Target.Address With Worksheets(NumSh) MyCount = .Range(MyAdr).Value + 1 MyAdr = .Range("A1").Address For Each C In MyRng If C.Value = MyCount Then MyAdr = C.Address Exit For End If Next C End With Me.Range(MyAdr).Select End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Application.EnableEvents = False Set MyRng = Me.Range(Rng) For Each C In MyRng If C.Locked = False Then C.ClearContents End If Next C Application.EnableEvents = True End Sub いったん保存して開きなおすと有効になります。 こんなところでいかがでしょう。 Constのところを直せばそちらの状況にもすぐにあわせられると思います。 ダブルクリックで入力値クリア。 とりあえず、何があるか解らないので、使用の時は元のファイルを バックアップしといてください。 (便利そうなんで、自分でも応用しよっと) (KAMIYA)
簡単に入力指定するものでは、このようにする方法もありますね。
A B C 1 1 5 2 2 3 3 4 6
上の表で番号順に入力する場合ですが、
挿入、名前、定義で、名前をINPUT、参照範囲にCtrlを押しながら、 C1、A2、A3、B1、C6、A1と2番目、3番目〜1番目を指定しておきます。
名前ボックスで、INPUTを指定しますと、入力範囲が選択され、各項目入力後 EnterやTabで、次の項目に移動できます。 矢印キーやマウスクリックでこの状況を解除できます。 (LOOKUP)
なんだかデバッグしてましたら、結局、前掲のものは 不都合が出そう(未入力でEnterだとうまくいかない、 A1セルが入力セルになっていないとエラーが出る)なので、 浪速コトバのチェックマンが出現する前に修正版。 下記に差し替えしてください。 ThisWorkBookモジュール Dim C As Range, MyRng As Range Rem 入力シート名 Const MySh As String = "Sheet1" Rem 移動順設定シート名 Const NumSh As String = "Sheet2" Rem 移動順設定範囲 Const Rng As String = "A1:G20" Private Sub Workbook_Open() Set MyRng = Worksheets(NumSh).Range(Rng)
With Worksheets(MySh) .Unprotect .EnableSelection = xlUnlockedCells .Cells.Locked = True For Each C In MyRng If C.Value <> "" Then .Range(C.Address).Locked = False If (C.Value = 0) * (C.Value <> "") Then .Activate .Range(C.Address).Select End If End If Next C .Protect Contents:=True .Activate End With MyCount = 1 End Sub 入力用シートのシートオブジェクトで Dim MyAdr As String Public MyCount As Long Dim C As Range, MyRng As Range Rem 移動順設定シート名 Const NumSh As String = "Sheet2" Rem 移動順設定範囲 Const Rng As String = "A1:G20" Private Sub Worksheet_SelectionChange(ByVal Target As Range) Application.EnableEvents = False Set MyRng = Worksheets(NumSh).Range(Rng) With Worksheets(NumSh)
MyCount = MyCount + 1 For Each C In MyRng If C.Value = 1 Then MyAdr = C.Address If C.Value = MyCount Then MyAdr = C.Address Exit For End If Next C End With Me.Range(MyAdr).Select If Worksheets(NumSh).Range(MyAdr).Value = 1 Then MyCount = 1 End If Application.EnableEvents = True End Sub また、入力順を設定するシートで入力順を 0から始まる連続値(0,1,2,3・・・)で設定してください。 登録後、いったん保存終了して開きなおすと有効です。 (KAMIYA)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.