dポイントプレゼントキャンペーン実施中!

列の中に何種類のデータが入っているかを数えたいのですが、
(例えばA,B,B,C,F,F,F,D,Eだと「6」という答えが出るように)
過去の質問を検索したところ、
=SUMPRODUCT(1/COUNTIF(A1:A10,A1:A10))
という式を入れると書いてありました。

途中にブランクセルはないのでエラーにはならないのですが、
式を入れてENTERキーを押すとフリーズしてしまい、
強制終了しなくてはならなくなってしまいます。
データ数は8000件ほどあるので、量が多すぎてこのようになるのでしょうか?

何か他の方法があれば教えていただけませんでしょうか?
フリーズの原因についてもできれば知りたいと思います。
使用しているのはWindows98,Excel97です。
よろしくお願いいたします。

A 回答 (3件)

'(1)A列にテストデータとしてSheet1のA1:A12にa,a,a,a,a,b,a,b,c,c,d,aといれます。


'(2)VBEのModule1に下記コードを入れます。
Sub test02()
d = Worksheets("sheet1").Range("a1").CurrentRegion.Rows.Count
'---初期設定。第1行目分処理。
Cells(1, 10) = Cells(1, 1) 'J列 品名
Cells(1, 11) = 1
m = 1
'-----第2行目以下
For i = 2 To d
For K = 1 To m
If Cells(i, 1) = Cells(K, 10) Then
Cells(K, 11) = Cells(K, 11) + 1
GoTo p01
End If
Next K
'---新しい文字列が見つかった時
m = m + 1
Cells(m, 10) = Cells(i, 1)
Cells(m, 11) = 1
'-----
p01:
Next i
End Sub
実行するとJ、k列に
a7
b2
c2
d1
となり、4種類であることが分かります。
上記では内訳まで出ていますが、直接4種だけを出すことは、もっと易しい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
マクロで処理するほうが早いのですね…。
普段あまりマクロに慣れていないもので、
どういう風に書けばいいのか判らず、使わずじまいでした。
これから少しずつやっていこうと思います。

お礼日時:2002/10/16 11:26

こんにちは


範囲がA1:A8000の場合
数式バーに
=SUM(IF(A1:A8000="",0,(MATCH(A1:A8000,A1:A8000,0)=ROW(A1:A8000))*1))
と入力して [Ctrl]+[Shift]を押したまま[Enter]で
入力確定(配列数式)

成功すると数式バーの数式は{}で括られます

注:ROW(A1:A8000)の部分は範囲参照ではなくN番目を
  導き出す式なので計算結果が必ず1~ となります。
  もし範囲が A3:A8000などであれば
  ROW(A3:A8000)-2 と始まりが1になるように調整
  する式を付加して下さい!
  ROW(A3)-2 → 3-2 → 1
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
教えていただいた方法を試したのですが、
同じく時間がかかりすぎて「応答なし」になってしまいました。
結局はデータを分割して切りぬけたのですが…。

配列数式は初めて知りました。
とても勉強になりました。

お礼日時:2002/10/16 11:20

WinXP、Excel2002 で実験してみました。


データ数10000件で約1分弱かかりましたがフリーズはしませんでした。
フリーズの原因は断定出来ませんが、データ数も要因のようです。
ただの実験話で申し訳ございません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
やはり1分くらいはかかるものなのでしょうか。
私にこらえ性がなかったのかも!?

急ぎの仕事だったので、データをいくつかに
分割して計算しました。
また時間ができた時に試してみます。

お礼日時:2002/10/15 17:28

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