
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も見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
みんなの【マイ・ベスト積読2024】を教えてください。
積読、ついついしちゃいませんか?そこでみなさんの 「2024年に買ったベスト積読」を聞きたいです。
-
人生でいちばんスベッた瞬間
誰しも、笑いをとろうとして失敗した経験があると思います。
-
泣きながら食べたご飯の思い出
泣きながら食べたご飯の思い出を教えてください。
-
Excelで重複データの件数ではなく、何番目かを求める方法
Excel(エクセル)
-
【Excel】 SUMPRODUCT関数の高速化
Excel(エクセル)
-
SUMIFに変わる(代用)数式を教えてください
Windows 7
-
-
4
Excelの条件付き書式設定の太い罫線
Excel(エクセル)
-
5
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
EXCELで2つの数値のうち大きい方を採択する数式
Excel(エクセル)
-
8
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
9
Excelで数値→文字列変換で指数表示になったものをいっぺんに直したい
Excel(エクセル)
-
10
特定のシートのみ再計算させない方法は?
Excel(エクセル)
-
11
エクセルVBA 最終行はlast row ? end row ?
英語
-
12
エクセル2016でfilter関数がないので、、抜き出す関数をおしえてください。
Excel(エクセル)
-
13
エクセルのアポストロフィを一括で消したい
Excel(エクセル)
-
14
文字列の中の検索で、3番目に出てくる文字の位置を調べたい
Excel(エクセル)
-
15
countif/sumifのようなVBA関数
Visual Basic(VBA)
-
16
excel:条件付き書式の適用範囲が変わる
Excel(エクセル)
-
17
エクセルVBAにて、重複データ処理の高速化を実施したいのですが、いい方法はありますでしょうか? G列
Excel(エクセル)
-
18
EXCEL VBA マクロ 実行する度に処理速度がどんどん遅くなる原因が知りたい
Excel(エクセル)
-
19
Excelで、条件と一致する最後のセルを検索したい
Excel(エクセル)
-
20
空白への0入力 二次元配列(VBA)
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
Excelで2行単位のソートの出来...
-
エクセルで、重複データを除外...
-
Countifよりも早く重複数をカウ...
-
複数の条件に合う行番号を取得...
-
エクセルで1列に500行並んだデ...
-
VBA 大きなtxtテキストファ...
-
excel:別シートの値を飛び飛び...
-
エクセルで2つ以上のリスト比...
-
エクセル2016にて、行挿入&コピ...
-
不要な行を消したい
-
500行の中から、多い順に抽出す...
-
エクセルVBA C列に特定の文字列...
-
エクセルで横並びの複数データ...
-
Excel VBAでオートフィルタで抽...
-
Excel 同じ生まれ年の人数を調...
-
Excelの30個ずつの平均値の出し方
-
Excelで2つのデータの突合せを...
-
差し込み印刷 «Next Record»に...
-
VBA 数式を最終行までコピー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
Excelで2行単位のソートの出来...
-
複数の条件に合う行番号を取得...
-
エクセルで1列に500行並んだデ...
-
Countifよりも早く重複数をカウ...
-
excel:別シートの値を飛び飛び...
-
エクセルで、重複データを除外...
-
Excelの30個ずつの平均値の出し方
-
エクセルVBA C列に特定の文字列...
-
エクセルで横並びの複数データ...
-
エクセルで1つの会社名に対して...
-
VBA 数式を最終行までコピー
-
500行の中から、多い順に抽出す...
-
エクセル2016にて、行挿入&コピ...
-
不要な行を消したい
-
VBA 大きなtxtテキストファ...
-
【エクセル】1列内に複数ある同...
-
本日の日付を超えているものを...
-
Excel VBA 【QueryTables.Add】...
-
【Excel】フィルタの実行で重複...
おすすめ情報