- ベストアンサー
エクセル 管理No.付与の際のアイデア
エクセルの管理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
その他の回答 (5)
- hallo-2007
- ベストアンサー率41% (888/2115)
No4です。投函した後に気がついたのでもう少し。 一般的?オーソドックスなシートの構成ですが A B C 用事 項目 番号 と分けて 済み A 済み C A B A ・・・として、C列には =IF(B2="","",COUNTIF(B2:B$2,B2)) と入れて下へコピィしておきます。 C列の書式は、ユーザー定義で 00000 とでもしておきます。 B列に A とか入力すれば、次の番号が自動で表示されます。 最初のシートの構成で複雑なことをして、後々、厄介になってしまった事例だと思いました。 取り合えず参考までに、新しいシートでも作成して試してみてください。
- hallo-2007
- ベストアンサー率41% (888/2115)
一応、アイディアとしてです。 >用事のすんだものからコピーペーストで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の方法で一度試してみました。 こんなやり方もあるのかと関心しましたし、配列関数自体初めて聞いた言葉だったのでとても勉強になりました。 親切にどうもありがとうございました。
- hige_082
- ベストアンサー率50% (379/747)
マクロでよければ 詳細が無いので 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と表示させたい場合はどうすればいいのでしょうか?
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 参考になるかどうか判りませんが・・・ Sheet2のA列にコピー&ペーストした管理NOがあり、 Sheet1のA列に新たに管理NOを入力すると仮定します。 B列を作業列とする方法ですが、 Sheet1のB1セルに =IF(COUNTIF(Sheet2!A:A,A:A)>0,"×","") としてオートフィルでドラッグしてみてはどうでしょう? もし重複する管理NOが入力された場合は「×」が表示され、重複がなければ空白になります。 (空白の変わりに「○」が表示される方法もいいかもしれません) この程度の回答ですが、 参考になれば幸いです。m(__)m
お礼
回答ありがとうございます。 この方法だと他にもいろいろと応用が利きそうでいいですね。 参考になりました、ありがとうございます。
- mitarashi
- ベストアンサー率59% (574/965)
お一人で使うには少々大がかりですが、下記の様な方法もあるそうです。 http://www.asahi-net.or.jp/~ef2o-inue/download/sub09_020_080.html
お礼
回答ありがとうございます。 今回の件には少し難しくて応用できませんでしたが、 このサイト自体とても勉強になりました。 ありがとうございました。
お礼
ご丁寧に回答ありがとうございます。 この機会にマクロをもっと勉強してみたいと思います。 ありがとうございました。