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

いつも助けて頂き有り難うございます。
エクセルの表で車両管理をしたいのですが、既に1300台ほど入力済みになっています、ここに追加で入力するのですが、追加分が重複しないように判別しながら入力する方法があればご教示をお願いしたくて質問させて頂きました、宜しくお願いいたします。

◇車両の判別はトレーラーも有りますので、前車番と後車番の数字のみを、B列とC列に併記し区別
しています、(その他の数字、文字は無視しています)

◇現状、前番号順に昇順で整理してあります。

この表に新たに車番を追加入力する際、既に似た番号が表中に存在する場合、その番号の欄を表示するか、若しくはその番号の行に飛んで確認出来れば良いのですが

例えば、前番号が 23-56 を入力した場合、その数字の羅列がある行を表示出来れば、無駄な入力をせずに済み、大変助かりますので・・・。
※前番号が同一の数列でも後車番が異なる場合は、別車両として登録します。

※出来ることなら、23-56 と入力した時点で 23-54 の次行に入力出来るのが希望ですが、現状のスキルでは到底無理ですので将来の目標とします。

A 回答 (3件)

こんにちわ



まず、シートの状況ですが
一行目は、項目見出しになっていること
二行目からデータがあり、前車番はB列、後車番はC列にあること
ウィンドウ枠の固定で、一行目は常に表示されているのが望ましい。

テストは、コピーされたブックで行ってください。

データのあるシートのタブを右クリックして、下のものを貼り付けます。

'ここから
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim t_row As Long, i As Long
t_row = Target.Row
i = Cells(Rows.Count, "B").End(xlUp).Row
If Target.Address = Cells(i, "B").Address Then
Application.EnableEvents = False
Call 前車番入力後の処理(t_row)
Application.EnableEvents = True
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Long
i = Cells(Rows.Count, "B").End(xlUp).Row
If Target.column = 7 Then
Application.EnableEvents = False
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
Cells(i + 1, "B").Select
Application.EnableEvents = True
End If
End Sub
'ここまで

貼り付けが終わったら、挿入→標準モジュールをクリックします。

そこに次のものを貼り付けます。

'ここから
Option Explicit

Sub 前車番入力後の処理(ByVal t_row As Long)
Dim myReg
Dim i As Long, j As Long, k As Long

Application.ScreenUpdating = False

With ActiveSheet
If .AutoFilterMode Then .AutoFilterMode = False
.Range("A1").AutoFilter _
Field:=2, _
Criteria1:=Cells(t_row, "B").Value
i = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count
If i > 31 Then
j = 0
k = 0
For Each myReg In .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible)
j = j + 1
If j > i - 31 Then
k = myReg.Row
Exit For
End If
Next myReg
ActiveWindow.ScrollRow = k
Else
ActiveWindow.ScrollRow = 1
End If
End With

Application.ScreenUpdating = True
End Sub

Sub オートフィルタの解除()
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
End Sub
'ここまで

シートに戻り、B列に前車番を入力します。
自動でマクロが走ると思います。

G列をクリックすると次の行に移動します。
    • good
    • 0
この回答へのお礼

丁寧なご指導有り難うございました。
時間を作っては試行していますが私のレベルではすんなり動いてはくれません、(マクロの記録、手法で少し経験した程度のレベル・・・)
やむなく図書館からExelマクロに関する図書をお借りして読みながら進めている段階です。
この際是非モノにしたいとがんばっています><

もう少し目処を付けてからお礼を申し上げたいと考えていましたが日にちが経ちすぎてしまい締め切りの催促を頂戴してしまいましたので一旦ここで締め切らせて頂きます。
ギブアップした場合再質問をさせて頂くようになるかと思いますが、その際お目にとまりましたら宜しくご教示をお願いしたいと思います。

他のご回答者の皆様にもここをお借りしてお礼を申し述べさせて頂きますがホントに有り難うございました。

お礼日時:2012/05/24 21:30

こんにちわ



>例えば、前番号が 23-56 を入力した場合、その数字の羅列がある行を表示出来れば、
>無駄な入力をせずに済み、大変助かりますので・・・。

これは、マクロでオートフィルターを使えば、実現できます。
それには、セルの見出しの行数とか全体のセル配置とかが必要になります。

>出来ることなら、23-56 と入力した時点で 23-54 の次行に入力出来るのが希望ですが

これは、#1さんの書かれたとおり入力したあとで、ソートするのが簡単です。

マクロでの回答でよければ、補足をお願いします。

この回答への補足

お早うございます、早速のご回答有り難うございます。
質問文の内容を訂正させて頂きます、車番例を 23-56 と表示しましたが、実際のデータ表には-を省いて表記してあります。
従いましして実際の記録は、1~9999 迄の数字の羅列になり、これが

A列    B列    C列   D列
      前番号  後番号
       2356     45
       2368    7255
       2457    326

のような表が、現在一部空欄やダブりもあるため1500行ほどになっています。
実際上は前番号が同一で後番号が異なる場合もありますが、現在は入力後に編集、優先順位を指定して並べ替えております。
ご助言頂いたようにマクロで出来るものなら是非ご教示頂きたいとおもいます。
マクロの経験は、ANo.1 のところに書きましたようにごく単純なものを数回試した程度の経験しかありませんので宜しくお願いいたします。

蛇足ですが、キーボード操作が苦手なためデータ入力に時間がかかり苦慮していますので少しでも無駄を省けると大変助かります。
宜しくお願いいたします。

  

補足日時:2012/05/08 10:16
    • good
    • 0
この回答へのお礼

早速のご回答有り難うございます。
お言葉に甘えてマクロによる手法をご教示頂きたい思い補足欄に追加しましたが
慣れなためうまく東湖出来るかどうか自信がありません。
失敗したら再度スレッドをたて直しますので宜しくお願いいたします。

お礼日時:2012/05/08 10:27

本文にはいろいろなことが記載されていますが、ご質問の意味が重複するデータを入力しないようにしたいということなら、数式を使った入力規則が利用できます。



たとえばB列とC列のデータの組合わせたデータに重複がないようにしたいなら、B2セルからC列のデータ入力範囲(たとえばB2:C500)を選択して、「データ」「データの入力規則」で「ユーザー設定」を選択し、数式欄に以下の式を入力します。

=COUNTIFS($B$2:$B$500,$B2,$C$2:$C$500,$C2)

Excelのバージョンが2003までのバージョンなら以下の式を使用してください。

=SUMPRODUCT(($B$2:$B$500=$B2)*($C$2:$C$500=$C2))

>※出来ることなら、23-56 と入力した時点で 23-54 の次行に入力出来るのが希望ですが、

このようなケースでは、入力後にデータの並べ替えを行うのが一般的な対応です。
必要ならこの操作をマクロの記録に保存して、これをボタンクリックして実行することになります。
    • good
    • 0
この回答へのお礼

ご教示有り難うございます。
「データの入力規則」については以前ごく簡単な操作のものについての体験があるだけでして、教えて頂いた方法が自分の知識で出来るか自信はありませんが、
ANo.2でご回答くだされたマクロと併せて挑戦してみます。

お礼日時:2012/05/08 13:46

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