• ベストアンサー

Excel 列の中のユニークな文字列の個数を数える

こんにちは。 Excel 2007を使っています。 A列に文字列(ABC12345のような)が入っています。 大抵は4個ほど重複しています。 ですので重複する文字列を1個と数えて ユニークな文字列が全部で何個有るか数えたいのですが どんな関数を組んだらよいかわかりません。 ご存じの方お教えください

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.3です! 前回のコードの場合、For~Next でループしていますので、 データ数が多いとかなりの時間がかかると思います。 そこでFor~Nextを使用しないコードにしてみました。 Sub test2() 'この行から Dim i, k As Long i = Cells(Rows.Count, 1).End(xlUp).Row Application.ScreenUpdating = False Columns(1).Insert Cells(2, 1).Formula = "=IF(COUNTIF(B$2:B2,B2)=1,1,"""")" Cells(2, 1).AutoFill Destination:=Range(Cells(2, 1), Cells(i, 1)) k = WorksheetFunction.Sum(Columns(1)) Columns(1).Delete Application.ScreenUpdating = True MsgBox "データ数は、" & k & " 個です。" End Sub 'この行まで 今回も若干時間がかかると思いますが、前回ほどではないはずです。 お役に立ちますかね?m(__)m

sherman
質問者

お礼

20万行あるデータなので、非力なPC(core 2 duo + 2GB memory)では ハングアップしてしまいましたが Core i 7 + 16GB memoryで10分ぐらいかかりましたが86152個と出ました。 失礼ながら「使えるマクロ」だとわかりましたので、あとはデーターの不要な 部分を削って非力なPCでも動くようにしたいと思います。 ありがとうございました。

その他の回答 (5)

回答No.6

No.5です。失礼しました。No.2さんがNo.5とだいたい同じ内容を紹介されていましたね。No.5は無視してください。

回答No.5

セルに入力されている値の種類数を求める式としては、次のものがあります。数えるセル範囲をA1:A30とします。 空白セルを含まない場合 =sumproduct(1/countif($A$1:$A$30,a1:a30)) 空白セルを含む場合 =sum(if(a1:a30<>"",1/countif($A$1:$A$30,a1:a30),)) ※ 後者の式では、式の確定時、Ctrl+Shift+Enterを押す必要があります。これにより、式の前後に「{ }」が付加されます。数式バーをクリックするなどによりセルを編集モードにしたときも再度、同じ操作が必要となります。そうでないと「{ }」が外れ、正しく計算しなくなります。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! すでに回答は出ていますが、 VBAでの一例です。 データは2行目以降にあるとします。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, k As Long For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(Range("A2:A" & i), Range("A" & i)) = 1 Then k = k + 1 End If Next i MsgBox "データ数は、" & k & "個 です。" End Sub 'この行まで ※ お望みの方法でなかったらごめんなさいね。m(_ _)m

sherman
質問者

お礼

回答ありがとうございます。 データは2行目以降にあります。 教えていただいた方法で実験しているのですがフリーズ(応答なし) してしまいます。 If WorksheetFunction.CountIf(Range("A2:A" & i), Range("A" & i)) = 1 Then k = k + 1 でエラーになるようです。

noname#153864
noname#153864
回答No.2

関数よりフィルタの方が簡単だと思います。 重複するデータで一意の入力値の個数を数える - Excel - Office.com http://office.microsoft.com/ja-jp/excel-help/HP010070481.aspx#BMcount_the_number_of_unique_values_by_ EXCEL 重複するデータを1としてカウントする方法(1/2) | OKWave http://okwave.jp/qa/q3361513.html

sherman
質問者

お礼

tom04さんのマクロでフリースしています。 noname#153864さんの方法も後で試します。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

A2セルから下方にデータがあるとしてB2列に次の式を入力して下方にドラッグコピーします。 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,MAX(B$1:B1)+1,"")) 全部で何個あるかは  =MAX(B:B)

sherman
質問者

お礼

ご回答ありがとうございます ドラッグする行はB列ですよね?

関連するQ&A