アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のような、ある施設の利用者一覧表です。

A列には利用した日にち、B列には利用者のIDがあります。

A   | B
日にち | ID
01/10 | 0001
01/10 | 0002
01/13 | 0001
01/15 | 0003
01/17 | 0001

これをEXCELで延べ人数ではなく、同じIDが複数回出てきても1とカウントしたいのですが方法が分かりません。
上記の表では0001、0002、0003しかありませんので3という数字を求めたいのです。

出来れば作業列を使いたくないのですが、やむをえない場合はしょうがないかなと思います。

宜しくお願いします。

A 回答 (9件)

#7です


◆すでに同じ回答をzap35さんがされていました
◆大変失礼しました

◆文字列または数値で途中空白があってもよい方法で別の式(少し長いですが)
=INT(SUMPRODUCT(1/SUBSTITUTE(COUNTIF(A1:A100,A1:A100),0,100)))

◆もし、ID番号が数値であればこんな方法も
=COUNT(1/FREQUENCY(A1:A100,A1:A100))
    • good
    • 13
この回答へのお礼

=COUNT(1/FREQUENCY(A1:A100,A1:A100))
↑この関数は数値限定のようですが簡単でいいですね。
ありがとうございました。

お礼日時:2007/09/21 08:35

#6です。


#6の最後の方で言った、SUMPRODUCT関数の利用例です。
例データ A列
001
002
001
002
003
004
002
004
006
007
上記以外のどこかのセルに
=SUMPRODUCT((COUNTIF(OFFSET($A$1,0,0,ROW(A1:A10),1),A1:A10)=1)*1)
と入れる
結果
    • good
    • 3
この回答へのお礼

SUMPRODUCT関数で出来ないかなと思い色々と試してみたのですが、こういう方法があったんですね。ありがとうございました。
またOFFSET関数は初めて見ました。これから勉強したいと思います。

お礼日時:2007/09/21 08:34

◆途中に空白があっても範囲は一致していなくともできますよ


=COUNT(INDEX(1/(MATCH(A1:A100,A1:A100,)=ROW(A1:A100)),))
    • good
    • 1

配列数式でもできます。


例データ
001
002
001
003
002
003
001
004
003
006

003

007

件数を出すセルに
=SUM(IF(COUNTIF(OFFSET($B$2:$B$100,0,0,ROW(B2:B100)-1,1),B2:B100)=1,1,0))
と入れて、SHIFT,CTRL,ENTERのキーを同時に押す。
結果

なお式の中ではB列100行までを対象にしてます。適当に変えてください。
式の意味は、最上行から注目行までに付いて、注目行の内容でCOUNTIFを出して、結果が1すなわち、初出行なら1を加えて(それ以外は0を加えて)全行に渉る合計を出してます。
注目行が下に行くにつれ、範囲を1行づつ広げてますが、そこが配列数式で技巧を使う点です。それ以外は人間が見て数える場合と似た素直な考えを式に表現しているだけです。
ーー
配列数式とSUMPRODUCTは相補的ですので、SUMPRODUCT関数でも出きるかも知れません。(ただし本質問の既出回答のSUMPRODUCTとは違う式の形)
    • good
    • 0

#04です。

式が間違っていました
 =COUNT(INDEX(1/(MATCH(B2:B100,B2:B100,0)=ROW(1:99)),))
になります。B2:B100は99行ありますのでROW関数は1:99を指定します。
この式も元はここで教えてもらったものです。

意味は本当はご自身で考えていただきたいのですが、配列数式を使っています。自分のセルの値でMATCH関数でB列を検索すると以下の結果が得られます。(式は「=MATCH(B2,B2:B100,0)」を下方向にコピーする)
これがROW(1:99)で発生する行番号と一致すると、そのIDははじめて出現し、一致しない場合は2度目以降に出現したことになります。

B列
ID
A0001 → 1 検索した結果=1行目の行番号と一致 → 初出
B0002 → 2 検索した結果=2行目の行番号と一致 → 初出
A0001 → 1 検索した結果=3行目の行番号と一致しない → 2度目以降

簡単にはこの一致した行数を数えていると考えてください。
1を割っているのは空白行の対策です。不一致の時はこれにより値が#DEV/0!エラーとなります。COUNT関数はエラー値は数えませんので空白行を無視することができます。
    • good
    • 1
この回答へのお礼

私のわがままにおつきあい頂き、ご丁寧に意味までお教え頂きましてありがとうございます。
非常に参考になりました。

お礼日時:2007/09/21 08:31

B列の途中に空白がなければ


 =SUMPRODUCT(1/COUNTIF(B2:B100,B2:B100))
でB列の重複しないID数を求められます

B列の途中に空白がある場合は、多少長くなりますが
 =COUNT(INDEX(1/(MATCH(B2:B100,B2:B100,0)=ROW(B2:B100)),))
で求められます。
    • good
    • 1
この回答へのお礼

COUNT関数をコピペしてみたのですが、ゼロになってしまいます。
また宜しければそれぞれの意味を教えて頂けますか?
例えば『INDEX(1/』とか『=ROW(B2:B100)』とかです。

お礼日時:2007/09/20 17:22

次の数式は如何でしょうか。


=SUMPRODUCT(1/COUNTIF(B2:Bn,B2:Bn))
※nは最終行、途中に空白セルが有る場合、エラーになります。
    • good
    • 2
この回答へのお礼

ありがとうございます。
でも空白セルが出てくる可能性があるのでちょっと無理ですね。。。

お礼日時:2007/09/20 17:16

ヘルプによると次の式でできそうですけど


=SUM(IF(FREQUENCY(MATCH(B2:B6,B2:B6,0),MATCH(B2:B6,B2:B6,0))>0,1))
範囲指定部分4か所はデータに合わせて修正してください。
ただし、範囲内に空白セルが混ざるとだめのようです。
    • good
    • 1
この回答へのお礼

ありがとうございます。
でも空白セルが出てくる可能性があるのでちょっと無理ですね。。。

お礼日時:2007/09/20 17:15

「データ」「フィルタ」「フィルタオプションの設定」で


「重複するレコードを無視する」チェックを使えば、
利用者を重複せずに抽出することが出来ますよ。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/filte …

まあ、ID順にソートすれば、重複したIDはまとまって出てきますので
目視でチェックしても、=IF(A1=A2,0,1) としてカウントしてもいいん
ですけど。計算が終われば日付順にソートしなおせば元に戻りますし。
    • good
    • 0
この回答へのお礼

ありがとうございます。
でも、関数で計算する方法を知りたかったのです。
説明不足ですいません。

お礼日時:2007/09/20 17:14

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

このQ&Aを見た人はこんなQ&Aも見ています