
1行目が項目、
2行目以降にデータが入っています。
合計30万行位あり、B列の重複数をカウントしたいのですが、とても時間がかかります。
数式は、
=countif(B:B,B2)
で、重複してる行全てに同じ数字を入れる必要があります。
(昇順にして上から1ずつ増やしていくカウント方式では駄目。)
同じデータが6個ある場合は、6行とも”6”が入っている必要あり。)
行った工夫としては
=countif($B1:$B300000,B2)
しかし、カウントする列が3列もあるので大変です。
もっと早く結果を出す方法は無いでしょうか?
VBAでも構わないのですが、、、
A 回答 (18件中1~10件)
- 最新から表示
- 回答順に表示
No.18
- 回答日時:
No17です。
>大文字小文字が違っていても重複としてくれる方法は無いでしょうか?
>事前にLower関数で小文字化すれば良いので面倒なら大丈夫です。
Lower関数と同様の処理を行えばよいでしょう。
VBAのLCase、UCase関数がこれに該当します。
https://docs.microsoft.com/ja-jp/office/vba/lang …
No13の処理では、一番最初に元データを配列vに読み込んでいますので、直後に全体を小文字化をしてから処理をするようにすれば、補足でご質問のような比較も可能です。
ただし、全角文字を半角にするような場合には工夫が必要になると思います。
(処理が複雑になれば、段々時間がかかることになります)
No.17
- 回答日時:
No16です。
>1列だけ試してみたら1分かからず結果が返ってきました。
う~~ん。けっこう時間がかかりますね。
とは言っても、更に速くなりそうな方法はVBAの範囲では残念ながら思いつきません。
>せっかくなら自動で3回処理できないかなと。
列が不明なので、別に設定する方式にしておいただけですので、決まっているのならそれに対応させてしまえばよいでしょう。
(37列、38列)と(40列、41列)、(43列、44列)と規則性があるようなので、列の値を変数にして全体をループすればすむと思われます。
あるいは、現状のものをサブルーチン化しておいて、
Call Subroutine( 元の列, 記入列 )
のようにして呼び出すメインルーチンを付け加えても宜しいかと思います。
(3回だけなら、ループなど利用せずに直接3行書いても変わらないですね)
ありがとうございます。サブルーチン化するのが初めてなのでやってみます。
No.13での事、ここで書かせてください。
高速になってとても助かるのですが一点見つけました。
大文字小文字まで区別してしまうため、以下のような場合重複としてカウントしてくれませんでした。
Excelの関数だと両方とも「2」いう結果が返ってきました。
Beijing12349876 →1
BEIJING12349876 →1
大文字小文字が違っていても重複としてくれる方法は無いでしょうか?
事前にLower関数で小文字化すれば良いので面倒なら大丈夫です。
No.15
- 回答日時:
[No.10お礼]へのコメント、
サヨナラはしたけれど、…(*^_^*)
》 正直言うと、貴方の添付してくれた画像が小さくて…
早く言ってよオ~ッ!
それは仰るとおり、元は大きな画像であっても「本サービスの仕様」で縮小されチャウんですよね。でも、Win10Pro Ver.21H2を使用中の私は、該当図をマウスで右クリック⇒[新しいタブで画像を開く]⇒作成された該当タブ[M.jpg(500x271)]をマウスでツンツンした画像は馬鹿デカイので、Ctrlキーを抑えて[-](マイナス)キーをツンツンして、縮小せずには居られない⇒鮮明になる
という次第。
知らなかったでしょ?是非、オタメシあれ。(^_^)
ご親切にコメントありがとうございます。
仰る通りに本スレッドの添付画像を右クリックして新しいタブで開いてみましたが、小さい画像のまま別タブ表示されました^^;
それをCtrl+プラスキーで拡大すると、粗くはなりますが判別できるサイズにはなりました。ChromeでもEdgeでも同様でした。
新しいタブで画像を開と、投稿する時の画像サイズ等倍で表示できる機能なのでしょうかね。だとすると投稿時のサイズ次第かと。
あと一定サイズ以上は自動的に縮小されるみたいなのでその辺の影響かもしれませんね。
No.14
- 回答日時:
fujillinさんこんばんは
VBAからセルにアクセスすると遅いけど、ディクショナリーを使って集計、配列編集して一気に貼り付ければパフォーマンスを最大限に活かせる
流石ですm(_ _)m
No.13
- 回答日時:
こんばんは
>VBAでも構わないのですが、、、
VBAは必ずしも速くはありませんので、単体の計算だけで比べればエクセル本体の方が速いはずです。
(関数1箇所だけなら、範囲が広くても瞬時に結果がでます。)
ただし、同じ関数を大量のセルに設定すると同様の計算を何度も行うことになるので、時間がかかる可能性はありますね。
以下は、VBAで全体をまとめて同時に計算してしまう例です。
VBAの場合、セルにアクセスすると時間がかかるため、速度を優先するのにメモリの使用量が多い方法になっています。
マシンの性能や使用可能メモリの影響を受けますが、私の環境では、出力までを含めて300000行を処理するのに約1秒でした。
※ どこかの列に結果を出力するものと思いますが、なんの記載も無いので、ひとまずD列に出力するようにしてあります。
※ 何回投稿しても「投稿中エラー」が発生してしまうため、通常とは少し異なる記述法に変えてあります。
Sub Q13027572()
Dim d, v, t, n As Long, i As Long
Const c1 = "B" '← カウント対象データ列
Const c2 = "D" '← 出力列
Const dic = "Scripting.Dictionary"
n = Cells(Rows.Count, c1).End(xlUp).Row - 1
If n < 1 Then Exit Sub
Set d = CreateObject(dic)
v = Range(c1 & "2").Resize(n).Value
For i = LBound(v) To UBound(v)
t = v(i, 1)
If t <> "" Then
If d.Exists(t) Then d(t) = d(t) + 1 Else d.add t, 1
End If
Next i
For i = LBound(v) To UBound(v)
t = v(i, 1)
If t = "" Then v(i, 1) = "" Else v(i, 1) = d(t)
Next i
d.RemoveAll
Range(c2 & "2").Resize(n).Value = v
MsgBox "END"
End Sub
ありがとうございます。すごいです!
1列だけ試してみたら1分かからず結果が返ってきました。
正直、その列だけピボットテーブルで集計できるからOKと思ってましたが、
やっぱりマクロで自動化出来るならそれに越したことはありません。
ここまで具現化してしまったのでちょっと希望と欲が出てきました。
当方が実際に使っている集計表で列を確認したところ
カウント対象データ列と出力列の組み合わせが、以下の3パターンあります。
AK、AL
AN、AO
AQ、AR
ソースのConst c1、c2の箇所でを書き換えて3回回せば良いので問題ないのですが、
せっかくなら自動で3回処理できないかなと。
簡単に出来るのであればご教授ください。
No.11
- 回答日時:
こんばんは、
>VBAでも構わないのですが、、、
VBAの場合、ユニーク数が多い様であれば、それなりに処理時間がかかりそうかな・・CountIf 遅いので
ユニーク数が少なければ、・・・(どの位を想定?)
CountIfの回数を減らして、テスト的にB列の結果をC列に出力とかで
数百とかユニーク数があるなら・・時間のある時に
Sub test()
Dim i As Long, j As Long
Dim Rng As Range
Dim myList, aryData
Dim tmp(), ans()
With ThisWorkbook.Worksheets(1)
Set Rng = .Range(.Cells(1, "B"), .Cells(.Rows.Count, "B").End(xlUp))
myList = WorksheetFunction.Unique(Rng)
ReDim tmp(UBound(myList), 1)
ReDim ans(Rng.Rows.Count)
For i = 1 To UBound(myList)
tmp(i, 0) = myList(i, 1)
tmp(i, 1) = Application.CountIf(Rng, myList(i, 1))
Next
aryData = Rng.Value
For i = 1 To UBound(aryData)
For j = 1 To UBound(tmp)
If tmp(j, 0) = aryData(i, 1) Then ans(i - 1) = tmp(j, 1): Exit For
Next
Next
'キヤスメ
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
.Cells(1, "C").Resize(UBound(ans)).Value = WorksheetFunction.Transpose(ans)
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End With
End Sub
>ピボット集計 賛成です
>Vlookupで どうかな?
No.10
- 回答日時:
[No.5お礼]へのコメント、
私の添付図が「イマイチ理解できず」は(理解力の問題なので)仕方ないとしても、
貴方から「しかし、左端図の結果を得たい」なんてな頓珍漢なコメントを頂戴するようでは、ここでオサラバ、退散させていただきます。
ちなみに、私の左端図は結果でなくて、開始図ですよッ!
「左端図を最終的に右端図にする」って申し上げていたじゃな~いッ!
サ・ヨ・ナ・ラ(^_^)/~~~
正直言うと、貴方の添付してくれた画像が小さくて(これは本サービスの添付画像の仕様ですかね)、
更にはその時私が使用していたノートの液晶画面が小さくて、文字が潰れて読めた物じゃなかったんです。
作業に焦っていた当時、拡大して解読してる余裕はなかったので、自分の理解不足とお礼で書きました。
頓珍漢と思わせて失礼しました。
ありがとうございました。
No.9
- 回答日時:
[No.5お礼]へのコメント、
》 流れがイマイチ理解できず…
オヤオヤ、困ったモンですね。
私の方ではイマイチどころか、貴方が記述された箇処にサッパリポンなところがあります。
》 重複してる行全てに同じ数字を入れる
と確かに仰いましたよね?
=countif(B:B,B2)の戻り値が 1 以外は、日本語的に、全~部重複してる数を表してますよね?
C列が「 1 以外」の 2 以上の B列の同じ行全てに同じ数字 6 を入れるンじゃなかったの、日本語的に?!
No.4のお礼に書きましたが、
言葉で説明するより具体例を挙げた方が早いですね。
失礼しました。
やりたかったのはこういう事です。
ピボット集計した結果をVlookupで当てはめるのが一番効率良いと考えています。もっと良い方法あれば助かります。
----------
B列、C列
鈴木、6
佐藤、2
阿部、3
田中、2
鈴木、6
鈴木、6
井出、1
阿部、3
木下、1
鈴木、6
佐藤、2
田中、2
鈴木、6
阿部、3
鈴木、6
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 重複しているか否かをソートせずに判断する方法ありますか? 2 2022/07/06 21:16
- Excel(エクセル) エクセルでフィルタ後の列の重複を回避したい 6 2022/10/13 12:50
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Excel(エクセル) countif関数について質問 4 2022/06/14 12:11
- Excel(エクセル) Excelでの複数条件のカウントについて 1 2022/09/25 07:40
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- その他(Microsoft Office) SUMIFとCOUNTIFの違いについて 4 2022/09/29 14:13
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
このQ&Aを見た人はこんなQ&Aも見ています
-
【Excel】 SUMPRODUCT関数の高速化
Excel(エクセル)
-
Excelで重複データの件数ではなく、何番目かを求める方法
Excel(エクセル)
-
エクセル2016でfilter関数がないので、、抜き出す関数をおしえてください。
Excel(エクセル)
-
-
4
SUMIFに変わる(代用)数式を教えてください
Windows 7
-
5
多量のSUMIF式を軽くしたい
Access(アクセス)
-
6
EXCELで2つの数値のうち大きい方を採択する数式
Excel(エクセル)
-
7
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
8
Excel MATCH関数で検索範囲内に同じ値の検索値が複数ある場合
Access(アクセス)
-
9
エクセルでアルファベットか数値の判定をしたいのですが
Excel(エクセル)
-
10
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには
Excel(エクセル)
-
11
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
12
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
13
エクセル フィルタ 数値のみ抽出したい
Excel(エクセル)
-
14
括弧があるとHYPERLINKで飛べない?
Excel(エクセル)
-
15
リンク先のファイルを開かなくても、値が読み込めるようにできますか?(SUMIFSを使ってます)
Excel(エクセル)
-
16
エクセルファイルのシート毎の容量
Excel(エクセル)
-
17
Excelで、条件と一致する最後のセルを検索したい
Excel(エクセル)
-
18
DoEventsがやはり分からない
Visual Basic(VBA)
-
19
INDIRECT関数の代替方法は?
Excel(エクセル)
-
20
エクセルVBAにて、重複データ処理の高速化を実施したいのですが、いい方法はありますでしょうか? G列
Excel(エクセル)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
Excelで2行単位のソートの出来...
-
エクセルで1列に500行並んだデ...
-
Countifよりも早く重複数をカウ...
-
excel:別シートの値を飛び飛び...
-
VBA 数式を最終行までコピー
-
エクセルで、重複データを除外...
-
複数の条件に合う行番号を取得...
-
Excelの30個ずつの平均値の出し方
-
差し込み印刷 «Next Record»に...
-
Excelで社員の本名をニックネー...
-
重複するデータの一部だけを抽...
-
エクセルの行の作り方
-
エクセルVBA C列に特定の文字列...
-
Excel VBA 【QueryTables.Add】...
-
エクセルで2つ以上のリスト比...
-
【エクセル】1列内に複数ある同...
-
エクセルで横並びの複数データ...
-
Excelで2つのデータの突合せを...
-
エクセル2016にて、行挿入&コピ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
Excelで2行単位のソートの出来...
-
複数の条件に合う行番号を取得...
-
エクセルで1列に500行並んだデ...
-
Countifよりも早く重複数をカウ...
-
excel:別シートの値を飛び飛び...
-
エクセルで、重複データを除外...
-
Excelの30個ずつの平均値の出し方
-
不要な行を消したい
-
VBA 数式を最終行までコピー
-
エクセルで横並びの複数データ...
-
エクセルVBA C列に特定の文字列...
-
エクセルで1つの会社名に対して...
-
エクセル~空白のセルのある行...
-
【Excel】小計単位で並べ替えを...
-
エクセルで重複データを削除す...
-
500行の中から、多い順に抽出す...
-
EXCELである範囲内での最大値の...
-
VBA 大きなtxtテキストファ...
-
重複するデータの一部だけを抽...
おすすめ情報