- 締切済み
エクセルで顧客名簿 通し番号とその例外
エクセルで顧客名簿を作っています。 Aに顧客の通し番号 Bにお客さんの名前を入れるとして、 でも二度目以降のお客さんのときには (つまり前と同じ名前を入力したとき)、 前と同じ通し番号の後ろに -1 とか -2 とかつけて 何回リピートしてるかわかるようにしたいんですけど、 どうしたらいいでしょうか? ちなみに通し番号自体も、 B以降になにか入力されたら 自動的に入るようにしたいです。 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
単純にするためB列を独立させた。 A列 B列 C列 番号 サブ 氏名 1 山田 2 下村 1 2 山田 1 3 山田 3 大川 1 4 山田 3 2 大川 1 5 山田 A2は 式 =IF(C2="","",(IF(COUNTIF($C$2:C2,C2)=1,MAX($A$1:A1)+1,INDEX($A$1:$A$100,MATCH(C2,$C$1:$C$100,0),1)))) B2は =IF(C2="","",IF(COUNTIF($C$2:C2,C2)=1,"",COUNTIF($C$2:C2,C2))) C列は順次上から氏名入力する。
#3です。 ゴメンナサイ、余計なことを書きました。 「検証」はしてます。 なお、A列を「00001」と表示したければ、 A3は =TEXT($C3,"00000")&IF(COUNTIF($B$2:$B3,$B3)>1,"-"&COUNTIF($B$2:$B3,$B3)-1,"") としてください。
COUNTIF関数を使って2以上の顧客だったら、 もう一度、COUNTIF関数でカウント数を出せば 2回目なら「2」3回目なら「3」が算出できるハズです。 ただ、VLOOKUP関数を使いたいので、 A B C 1 通し番号 氏名 番号ワーク 2 1 山田太郎 1 3 2 鈴木花子 2 4 1-1 山田太郎 1 とします。 A2とC2は、それぞれ1を入力しておきます。 A列は左寄せを設定しておき、 A3に =$C3&IF(COUNTIF($B$2:$B3,$B3)>1,"-"&COUNTIF($B$2:$B3,$B3)-1,"") C3に、 =IF(OR($B3="",ISBLANK($B3)),"",IF(COUNTIF($B$2:$B2,$B3)=0,MAX($C$2:$C2)+1,VLOOKUP($B3,$B$2:$C2,2,FALSE))) で、いかがでしょう。 C列の表示がわ煩わしければ、C列の幅をゼロにしてしまえば、表示、印刷されません。 検証はしてませんが...
- kaitakusya
- ベストアンサー率50% (7/14)
完成途中ですが、こういう数式はいかがでしょうか。 =IF(B1="","",IF(COUNTIF($B$1:$B1,B1)>=2,ROWS($A$1:$A1)&-1,ROWS($A$1:$A1))) この数式だと、B列に顧客名が入った時点でA列(数式入力セル)に通し番号がつきます。 また、顧客名がいままで入力されたものだと番号の後ろに”-1”がつきます。 ちなみに数式はA1に入力する例です。A1に入力した後はオートフィルでコピーすればいいです。 もしA1以降のセルからはじめる場合は、COUNTIF・ROWSの行番号をはじめるセルの行番号に変えて入力してください。 問題点としては、 現段階のこの数式では3回目以降の顧客にも”-1”がつき、 リピート回数を見ためで判断するのは難しいと思います。 まだ完成途中で投稿して申し訳ありませんが、何かの参考にしていただければいいと思います。
- mu2011
- ベストアンサー率38% (1910/4994)
次の方法は如何でしょうか。 見出し行あり、A2は'00001を固定開始番号(手入力)、A3セルに次の数式を入力して必要分下方向にコピーして下さい。 =IF(B3<>"",IF(COUNTIF($B$2:B2,B3),TEXT(INDEX($A$2:A2,MATCH(B3,$B$2:B2,0)),"00000")&"-"&COUNTIF($B$2:B2,B3),TEXT(COUNTIF($A$2:A2,"<>*-*")+1,"00000")),"")