[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.