• ベストアンサー

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

  • 複数列の中の文字列の検索、個数抽出

    どなたかお力をお貸しください。。 エクセル2003を使用しています。    A列 B  C  D 1  あ  う     あ 2  い  お  か  か 3  う        う 4  え     き  く 5  お  い  う  け Dの文字列のなかでA~C列の中に重複している文字が何個あるかを出したいです。 この場合D列は「あ、か、う、く、け」なので、A~C列にある「あ、か、う」が重複しているので、3個と出したいです。 もしくは重複していない「く、け」で2個と出したいです。 MATCH関数を使うと出来そうなのですが、MATCH関数だと配列の概念がなさそうなので、どうしたものかと。 条件として、 ・一つのセルで関数を使用して出す。 ・マクロ、計算用のセルはできたら使用しない。 ・空白セルもあり、文字列の完全一致のみ個数としてカウント。 ・列の数はだんだん増えてくるので、列数は増えても大丈夫なやり方の方がいいです。 COUNTIFで重複個数を出すと、「う」が複数回出てくるので、重複の個数が増えてしまい困っています。 もしかしたら不可能かもしれませんが、どなたかお知恵をお貸しください。 よろしくお願いいたします。

  • EXCELで文字列の中から特定の数値を取り出したい

    教えてください。EXCELの関数で例えばA列に "www.abc.jp/1/a/1.html" "www.abc.jp/11/a/23.html" "www.abc.jp/110/a/24.html" "www.abc.jp/121/a/122.html" という文字列が合った場合.htmlの直前の数値だけ取り出したい場合どのような関数を使いますか? (数値の桁数は固定ではありません。)

  • 列のユニークな文字列の個数を数える(条件付き)

    こんにちは。 「Excel 列の中のユニークな文字列の個数を数える」 http://okwave.jp/qa/q7469801.htmlではお世話になりました。 Excel 2007でA列にあるユニークな文字列の個数を数える マクロを教えていただき助かりました。 次のステップですが、 A列    H列 ABC12345 AB ABC12345 AB ABC12345 AB ABC12345 AB のようにH列がABだけのものの個数を数えたいです ABC54321 AB ABC54321 CD ABC54321 AB ABC54321 AB の様なものは数えません どのような条件をつければユニークな個数が数えられますか? おわかりの方お教えください。

  • エクセルで文字列の個数を数える

    ある範囲のエクセルデータから決まった文字列の個数をカウントする関数の使い方が判れば教えてください。 例えば、A1からH200までのデータより、”リンゴ”という文字列が何個あるかカウントしたいのですが。 COUNTIF(A1:H200,"*リンゴ*")とすると”リンゴ”という文字列が含まれるセルの個数は出たのですが、”リンゴ”という文字列が複数含まれるセルもあるので、”リンゴ”という文字列の個数とは 一致しないようなのです。 どなたか、よろしくお願いします。

  • エクセルで重複する文字列を取り出し、取出した文字列をそれぞれ買うん等する方法?

    エクセルで重複する文字列を取り出し、取出した文字列をそれぞれ買うん等する方法? ---------------- あああ ---------------- いいいいい ---------------- ううううう --------------- あああ -------------- いいいいい -------------- とあった場合 あああが2つ、いいいいいが2つ、うううううが1つと数える関数またはサンプルコードを教えて下さい。

  • エクセル関数:右側の文字列を抜き出す方法

    エクセル初心者です。 文字列の抜き出す方法で悩んでいます。 たとえば、A1~A5までに下のような 文字列が順に入っているとします。 C:\abc\TEST1.DOC C:\abc\def\TEST2.DOC C:\abc\def\ghi\jkl\TEST3.DOC C:\abc\def\ghi\TEST4.DOC C:\abc\def\TEST5.DOC これらの文字列の一番右側の'\'以降の文字列 (TEST1~5.DOC)を、B1~B5のセルに 出したいと思っているんですが できるのでしょうか? RIGHT関数や、LEN関数、FIND関数を使って できそうな気がするのですが どうも良い方法が思いつきません。 よろしくお願いします。

  • エクセルでユーザー定義を文字列に変えるには?

    エクセルでTODAY関数を使って日付を取得しこれをユーザー定義を使って次のように表示させました。→ABC090225 これを文字列として違うセルに表示させたいのですが、どうしたらよいかわかりません。良い方法をご存知の方教えてください。 よろしくお願いいたします。

  • 文字列の中からある文字の個数を調べるには?

    お世話になります。 abcdefga という文字列の中からaが何個あるのか調べる関数はありますでしょうか? http://www.yahoo.co.jp URLからスラッシュの個数を調べたいのですが。

  • EXCELで文字列の特定の文字の位置を知る方法

    EXCELで文字列の特定の文字の位置を知る方法 EXCELでセル中の文字列、例えば、"abc 4/3 5/5 6/4" の最後の"/"の位置を知る方法を関数の組み合わせで出来ますか? 教えてください。"/"の数は任意で最後の"/"の位置を知りたいのですが??? どうかよろしくお願いします。VBAでなく関数の組み合わせでお願いします。

  • Excelで文字列を抽出したい。

    Excelで文字列を抽出したい。 Excelで商品コード一覧を作成しました。 商品コード ABC230 DE120 ABC333 XU203 の様にアルファベット+数値で構成されています。 このアルファベットの部分のみを抜き出したいと考えています。 アルファベットの文字数はバラバラです。 何か便利な関数などありましたら、アドバイスよろしくお願いいたします。

専門家に質問してみよう