質問

エクセルの管理No.付与の際のいいアイデアを教えていただきたいです。

シートが2つあり、1つ目にはA-1,A-2,…、B-1,B-2…、C-1,C-2…といった管理No.をつけた表があり、バラバラの順番です。
A-1
C-1
A-2
B-1
A-3
B-1
↑こんな感じです。

日々増えていくもので、用事のすんだものからコピーペーストで2つ目のシートへ移動させてます。

そのため、新しく管理ナンバーを付与させる場合、2つのシートを見比べないと分からず、度々同じNo.を付与してしまうことがあるのです。

別表に使用した管理No.を付け加える方法も考えはしましたが、芸が無く工数もかかってしまうため、できれば簡単に、最新の管理No.がわかるアイデアが欲しいと思っています。

説明下手で分かりにくいかと思いますが、よろしくお願いいたします。

通報する

回答 (6件)

#3の補足読みました
>そこでもう1点訊きたいのですが、A-1をA-0001と表示させたい場合はどうすればいいのでしょうか?
対応してみました

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
If Intersect(Range("a:a"), Target) Is Nothing Then Exit Sub
For Each Rng In Target
If Rng.Value = "" Then Exit For
Select Case Rng.Value
Case "a", "A"
Rng.Value = "A-" & Evaluate("text(COUNTIF(sheet2!A:A,""a*"")+COUNTIF(A:A,""a*""),""0000"")")
Case "b", "B"
Rng.Value = "B-" & Evaluate("text(COUNTIF(sheet2!A:A,""b*"")+COUNTIF(A:A,""b*""),""0000"")")
Case "c", "C"
Rng.Value = "C-" & Evaluate("text(COUNTIF(sheet2!A:A,""c*"")+COUNTIF(A:A,""c*""),""0000"")")
End Select
Next Rng
End Sub

この回答へのお礼

ご丁寧に回答ありがとうございます。
この機会にマクロをもっと勉強してみたいと思います。
ありがとうございました。

No4です。投函した後に気がついたのでもう少し。
一般的?オーソドックスなシートの構成ですが
 A  B  C
用事 項目 番号 と分けて
済み A    
済み C    
   A
   B
   A
・・・として、C列には
=IF(B2="","",COUNTIF(B2:B$2,B2)) と入れて下へコピィしておきます。
C列の書式は、ユーザー定義で 00000 とでもしておきます。
B列に A とか入力すれば、次の番号が自動で表示されます。
最初のシートの構成で複雑なことをして、後々、厄介になってしまった事例だと思いました。
取り合えず参考までに、新しいシートでも作成して試してみてください。

一応、アイディアとしてです。
>用事のすんだものからコピーペーストで2つ目のシートへ移動させてます。
この作業すら手がかかると思います。
 A  B
用事 管理番号
済み  A-1
済み  C-1
    A-2
済み  B-1
    A-3
    B-1
・・・と一列追加して、用事が済んだものマークを入れる。
処理済と未処理を仕分けるにはオートフィルターを使用する方法は如何でしょうか。
1枚のシートですみます。
ちなみに、1行目、2行目に
1行目  A  B  C ・・・と準備
2行目に =MAX(IF(LEFT($B3:$B1000,1)=A1,RIGHT($B3:$B1000,1)*1,0))
と入れてCtrl+Shift+Enter で決定して配列関数にします(式が{}でくくられます。
出来た式を右へコピィします。
*上記式ではB列の3行目から管理番号があるとしています。
A,B,Cそれぞれで始まる管理番号の末尾の最大値が得られます。
もし末尾の番号が4桁であれば式中の RIGHT($B1:$B1000,4)としてみてください。

この回答へのお礼

回答ありがとうございます。
今回はコピーする手間がかかっても2シートにしたい理由がありますので申し訳ありません。
ただNo.4No.5の方法で一度試してみました。
こんなやり方もあるのかと関心しましたし、配列関数自体初めて聞いた言葉だったのでとても勉強になりました。
親切にどうもありがとうございました。

マクロでよければ
詳細が無いので
1つ目のシート名:Sheet1
1つ目のシート管理No.:A列
2つ目のシート名:Sheet2
2つ目のシート管理No.:A列
とします

Sheet1のシートタブを右クリック
コードの表示を選択
表示されるワークシートモジュールへコードをコピペ

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
If Intersect(Range("a:a"), Target) Is Nothing Then Exit Sub
For Each Rng In Target
If Rng.Value = "" Then Exit For
Select Case Rng.Value
Case "a", "A"
Rng.Value = "A-" & Evaluate("COUNTIF(sheet2!A:A,""a*"")") + Evaluate("COUNTIF(A:A,""a*"")")
Case "b", "B"
Rng.Value = "B-" & Evaluate("COUNTIF(sheet2!A:A,""b*"")") + Evaluate("COUNTIF(A:A,""b*"")")
Case "c", "C"
Rng.Value = "C-" & Evaluate("COUNTIF(sheet2!A:A,""c*"")") + Evaluate("COUNTIF(A:A,""c*"")")
End Select
Next Rng
End Sub

Sheet1のA列(管理No.)に"A"・"B"・"C"のどれか一文字を入力すると
最新の管理No.が表示される
マクロ以外が希望なら、スルーしてください

この回答へのお礼

回答ありがとうございます。
マクロだとこんなことも出来るんですね。感激です。
さっそく利用させていただきます。
そこでもう1点訊きたいのですが、A-1をA-0001と表示させたい場合はどうすればいいのでしょうか?

こんばんは!
参考になるかどうか判りませんが・・・
Sheet2のA列にコピー&ペーストした管理NOがあり、
Sheet1のA列に新たに管理NOを入力すると仮定します。

B列を作業列とする方法ですが、
Sheet1のB1セルに
=IF(COUNTIF(Sheet2!A:A,A:A)>0,"×","")
としてオートフィルでドラッグしてみてはどうでしょう?

もし重複する管理NOが入力された場合は「×」が表示され、重複がなければ空白になります。
(空白の変わりに「○」が表示される方法もいいかもしれません)

この程度の回答ですが、
参考になれば幸いです。m(__)m

この回答へのお礼

回答ありがとうございます。
この方法だと他にもいろいろと応用が利きそうでいいですね。
参考になりました、ありがとうございます。

お一人で使うには少々大がかりですが、下記の様な方法もあるそうです。
http://www.asahi-net.or.jp/~ef2o-inue/download/s …

この回答へのお礼

回答ありがとうございます。
今回の件には少し難しくて応用できませんでしたが、
このサイト自体とても勉強になりました。
ありがとうございました。

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

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

新しく質問する

注目の記事

おしトピにAndroid版アプリが登場

話題のトピックにさくっとコメントできる「おしトピ」に Android版アプリが登場! もっと身近に使いやすくなりました。
今ならダウンロードで話題の掃除ロボットや全天球カメラが 当たるプレゼントキャンペーンも実施中。


新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ

べんりQ&A特集