プロが教えるわが家の防犯対策術!

大量の名簿への入力・検索を簡素化する為表題のようなVBAか関数を教えていただきたいです。
条件は下記の通りです。

・B28からB30027まで000001~300000までの連番があります。
・連番を検索するセルB26へ連番の数字を入力するとその連番のセルの右隣のセルへジャンプします。
(000005と入力するとC32へジャンプし、すぐ名前を入力できるようにしたいです。)
・C列の名前、D列の住所、E列の電話番号を入力し、E列の入力でEnterを押した時に必ずB26に戻るようにしたいです。

B26に検索番号入力してC26にハイパーリンクのクリックボタンのような物を試しましたが知識不足の為行き詰まってしまい困っております。
知っている方おりましたらご教授願います。

「エクセルで、検索語移動し入力後同じ場所に」の質問画像

A 回答 (5件)

No.1です。



>赤文字のNoがセルの書式設定のユーザー設定で”000000”にしていたからでは・・・

対処してみました。
尚、前回のコードではE列の26行目まで、またはB列データの最終行以降の行のE列データの変更があってもマクロが実行されてしまいますので、
その辺も修正してみました。

Private Sub Worksheet_Change(ByVal Target As Range) 'この行から//
Dim c As Range, lastRow As Long, myRng As Range
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Set myRng = Union(Range("B26"), Range(Cells(28, "E"), Cells(lastRow, "E")))
If Intersect(Target, myRng) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
If .Column = 2 And .Value <> "" Then
Set c = Range(Cells(28, "B"), Cells(lastRow, "B")).Find(what:=Format(.Value, "000000"), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
c.Offset(, 1).Select
Else
MsgBox "該当データなし"
.Select
End If
Else
Range("B26").Select
Range("B26").ClearContents
End If
End With
End Sub 'この行まで//

今度はどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。
さっそく修正していただいたコードを入力し実行してみました。
E列で入力しEnter後メッセージが出てきました。

実行時エラー’28’:
スタック領域が不足しています。

何度か試してみると 
’ClearContents’メソッドは失敗しました
というメッセージが出たので、コード内の
Range("B26").ClearContents
を削除してE列まで入力ところ、セルB26に検索Noは残りますがエラーメッセージは出ずにB26にジャンプしました。
’スタック領域’ のエラーは命令がループするような感じというところまでは調べてみて解りましたが、対処例のFor next等はVBA初心者の私にはまだ理解できてない為今後の課題となりました。
いろいろと教えていただきありがとうございました。

お礼日時:2016/02/03 00:26

ウインドウ枠の固定で良さそうですが


参考程度でC26セルに
=HYPERLINK("#C"&27+B26&":E"&27+B26)

1. C26セルをクリックすると対象の行のC,D,E列が選択されます
2. 選択されたまま、入力します
3. [Alt]+[←]でC26セルに戻ります
4. 続けて[←]でB26セルに戻ります
    • good
    • 0
この回答へのお礼

ありがとうございます。
入力作業が私だけならこの方法でも良かったのですが、PC初心者でも入力できるようにEnterだけでジャンプできる機能を探しておりました。

お礼日時:2016/02/03 00:51

個人的にはフォーム機能がお勧めなんですが、検索後のセル移動自体が面倒に思われているならやっぱりマクロになるんですかね…



https://121ware.com/qasearch/1007/app/servlet/re …
    • good
    • 0
この回答へのお礼

ありがとうございます。
フォーム機能の存在を初めて知り大変勉強になりました。
仰る通り多量のデータで連番入力ではなく飛び飛びのNo入力の為、あてはまるマクロはないものかと探しておりました。

お礼日時:2016/02/03 00:42

希望されていることとは少し違うので参考程度に。



戻る方法を希望されているのはスクロールが必要だからではないですか?
ウインドウ枠の固定をすればスクロールせずに常に表示することができます。
http://www.becoolusers.com/excel/freeze-panes.html

NOを指定してデータの入力を行っているようですので
オートフィルタを使用してはどうでしょうか?
http://www.becoolusers.com/excel/auto-filter.html
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
教えていただいたページ以外も見てみましたがいろいろと勉強になる内容がありました。
教えていただきありがとうございます。

お礼日時:2016/02/02 14:57

こんにちは!



VBAでの一例です。
C列が選択された後は、C・D・E列の順に入力する!という前提です、

シートモジュールになりますので、
画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)B26セルに番号を入力し
その行のC~E列まで順に必要事項を入力してみてください。

Private Sub Worksheet_Change(ByVal Target As Range) 'この行から//
Dim c As Range, lastRow As Long
If Intersect(Target, Range("B26,E:E")) Is Nothing Or Target.Count > 1 Then Exit Sub
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
With Target
If .Column = 2 And .Value <> "" Then
Set c = Range(Cells(28, "B"), Cells(lastRow, "B")).Find(what:=.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
c.Offset(, 1).Select
Else
MsgBox "該当データなし"
.Select
End If
Else
Range("B26").Select
Range("B26").ClearContents
End If
End With
End Sub 'この行まで//

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとう

回答ありがとうございます。
さっそく検索セルB26に数字を入力したのですが全て該当なしになってしまいます。
おそらく、赤文字のNoがセルの書式設定のユーザー設定で”000000”にしていたからでは?と思い、標準にしたら1桁のNoになりますが検索可能でした。
できれば赤文字連番は6桁で、B26での検索は正数(No.000077なら77で検索)でできるよにしたいのですが、可能でしょうか?

お礼日時:2016/02/02 11:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!